一部のファイルのみをコミットするにはどうすればよいですか?


259

2つのプロジェクトがあります。1つは「公式」プロジェクトで、もう1つは簡単な変更です(いくつかのファイルが追加されています)。新しいブランチを作成し、新しいファイルをそれらに配置しました。ただし、開発中、両方のブランチに共通するいくつかのファイルが変更されます。

これらのファイルのみをコミットするにはどうすればよいですか?


これら2つのプロジェクトは同じgitリポジトリに接続していますか?
Oleksandr 2011

はい、それは同じリポジトリですが、私は、サーバーへの私の支店を置きたくない
NIPS

それでは、新しいブランチをマスター(または他の公式ブランチ)にマージしてみませんか
Oleksandr 2011

1
これらの質問に対する答えは、あなたを助けなければならない。stackoverflow.com/questions/7161860/...の stackoverflow.com/questions/7175869/...は
eckes

回答:


261

変更を1つのブランチにコミットしてから、それらの変更を他のブランチに表示したいとします。gitでは、ブランチを変更するときにHEADの上に変更はありません。

変更したファイルのみをコミットするには:

git commit [some files]

または、ステージング領域がクリーンであることが確実な場合は、

git add [some files]       # add [some files] to staging area
git add [some more files]  # add [some more files] to staging area
git commit                 # commit [some files] and [some more files]

そのコミットを両方のブランチで利用できるようにしたい場合は、

git stash                     # remove all changes from HEAD and save them somewhere else
git checkout <other-project>  # change branches
git cherry-pick <commit-id>   # pick a commit from ANY branch and apply it to the current
git checkout <first-project>  # change to the other branch
git stash pop                 # restore all changes again

22
これらのファイルのみを文字どおりコミットするには、他の変更がステージングされている場合でも、2番目の例(スイッチgit commit [some files]を意味する--only)を使用する必要があります。最初の例(git add [some files]後にgit commit)は、ステージングされた他の変更もコミットします。
Lexikos 2013年

4
git commit [いくつかのファイル]の例を提供すると助かります。どのように[いくつかのファイル]、カンマ、空白を置き換える必要がありますか?
Claudiu Creanga 2015年

2
@claudiuは通常、シェルのものはスペースで区切られます。そして、十分に深く潜れば、それを何にでも変えることができます
Alex

いくつかの例を追加できれば、この答えは素晴らしいでしょう。
Yamur

154

コミットしたいファイルのリストを取得する

$ git status

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

modified:   file1
modified:   file2
modified:   file3
modified:   file4

ステージングにファイルを追加する

$ git add file1 file2

あなたがコミットしているものを確認してください

$ git status

Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

    modified:   file1
    modified:   file2

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

    modified:   file3
    modified:   file4

コミットメッセージでファイルをコミットします

$ git commit -m "Fixed files 1 and 2"

誤って間違ったファイルをコミットした場合

$ git reset --soft HEAD~1

ファイルのステージを解除してやり直す場合

$ git reset

Unstaged changes after reset:
M file1
M file2
M file3
M file4


30

この一部は「不完全」のようです

人々のグループは、彼らが引用符などを使うべきかどうかを知るつもりはありません。

場所のパスも示す特定のファイルを1つ追加します

git add JobManager/Controllers/APIs/ProfileApiController.cs

コミット (コミットはローカルのみであり、他のシステムには影響しません)

git commit -m "your message"  

リモートリポジトリにプッシュ

git push  (this is after the commit and this attempts to Merge INTO the remote location you have instructed it to merge into)

他の答えはあなたが時々やりたいと思う隠し場所などを示しています


11

既にファイルをステージングしている場合は、単にステージングを解除します。

git reset HEAD [file-name-A.ext] [file-name-B.ext]

次に、それらを少しずつ追加して戻します。


11

次のように、複数のファイルに変更を加えたとします。

  • ファイル1
  • ファイル2
  • ファイル3
  • ファイル4
  • ファイル5

しかし、File1とFile3の変更のみをコミットしたいとします。

これを行うには2つの方法があります。

1.以下の2つのファイルのみを使用してステージングします。

git add file1 file2

次に、コミット

git commit -m "your message"

次に押します

git push

2.直接コミット

git commit file1 file3 -m "my message"

次に押します

git push

実際、最初の方法は、ファイルを定期的に変更してステージングする場合に便利です ->大規模プロジェクト、通常はライブプロジェクト。
しかし、ファイルを変更してステージングしない場合は、直接コミットできます->小規模プロジェクト


2番目の例が示すようにファイル名を指定しない場合、gitはこれらの引数のコマンドフラグがであると想定します--only。次に、参照と同じコマンドをgit commit --only file1 --only file3 -m "my message"使用するか、ショートカットをgit commit -o file1 -o file3 -m "my message"リファレンスとして使用し
ます

0

コードの変更が少ない場合、これは単純なアプローチです。

1. git stash
2. git stash apply
3. remove the files/code you don't want to commit
4. commit the remaining files/code you do want

次に、別のコミットまたは別のブランチで削除したコード(コミットしなかったビット)が必要な場合は、このブランチで次のようにします。

5. git stash apply
6. git stash

ステップ5では、stashをすでに適用しており、ステップ4で必要なコードをコミットしたので、新しく適用されたstashでの差分と追跡解除は、ステップ4でコミットする前にステップ3で削除したコードです。

そのようなステップ6は、おそらく実際に変更を失いたくないので、コミットしなかったコードの隠し場所です。したがって、正しいブランチでgit stash applyを実行してコミットすることにより、ステップ6の新しいスタッシュをこのブランチまたは他のブランチにコミットできます。

明らかに、これは1つのフローで手順を実行することを前提としています。これらの手順の他の時点で隠しておく場合は、上記の各手順の隠し場所の参照に注意する必要があります(基本的な隠し場所だけでなく、最新の隠し場所を適用します)。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.