これを解決する方法は複数あります。
現在の変更を妨げることなく、最初のコミットの変更を行いたい場合は、を使用できますgit stash
。これにより、開いているすべての変更が破棄され、後で復元できます。git status
それらがもう存在しないことを確認するために使用します。使い慣れた最初のコミットを作成します。次にgit stash pop
、元の変更を復元し、2番目のコミットを作成して、主要な作業を行うことができます。
別の方法は、必要なすべての変更を行ってから、作業の一部を含む2つのコミットを作成することです。そのためには、gitが提供するインデックス(ステージング領域とも呼ばれます)を使用できます。これは、コミットの準備に使用できる特別な領域です。複数のファイルを変更した場合、を使用して各ファイルをインデックスに追加できますgit add
。実行するgit commit
と、インデックスに追加されたファイルのみがコミットされます。git status
変更のどの部分がコミットされ、どの部分がコミットされないかが表示されます。たとえば、ファイルa.txt、b.txt、c.txtを変更した後、次のようにすると、次のようになりますgit add a.txt
。
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
modified: a.txt
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: b.txt
modified: c.txt
あなたがやっている場合はgit commit
、この状態では、A.TXTへの唯一の変更は、あなたのコミットに追加されます。
さらにgit diff --cached
、を使用してコミットする正確な変更を確認できます。これにより、コミットされるすべての変更の差分が表示されます。
1つのファイルに両方のコミットの変更が含まれている場合、「git add --patch b.txt」を使用して、その一部のみをインデックスに追加することもできます。gitは、指定されたファイルをインデックスに追加する必要がある場合、各ファイルの変更を要求する対話モードを提供します。隣り合う行に変更があり、2つのコミットで分割する必要がある場合、これは難しくなる可能性がありますが、それを解決する方法もあります。
ステージング領域の詳細については、http:
//gitready.com/beginner/2009/01/18/the-staging-area.htmlをご覧ください。
インタラクティブな追加の詳細については、http://nuclearsquid.com/writings/git-add/をご覧ください。
git status
、すべての変更されたファイルを参照して、使用して、2つの以上のコミットを行いgit add
、特定のファイル(の代わりにgit add --all
)、そして少しずつをコミットします。