コーディング中に、何が起こっているかを追跡するために、いくつかのファイルにprintステートメントを追加しました。
完了したら、一部のファイルの変更を元に戻すことはできますが、実際に作業したファイルをコミットしますか?
ファイルA
にprintを追加したが、ファイルB
を変更したとします。 B
はコミットしたいものであり、A
は古い状態に戻したいものです。
これを行うには、ファイルAに加えた変更に応じて3つの基本的な方法があります。インデックスに変更を追加またはコミットしていない場合は、checkoutコマンドを使用します。リポジトリに一致する作業コピーの状態:
git checkout A
すでにインデックスに追加している場合は、resetを使用します。
git reset A
コミットした場合は、revertコマンドを使用します。
# the -n means, do not commit the revert yet
git revert -n <sha1>
# now make sure we are just going to commit the revert to A
git reset B
git commit
一方、コミットしたのに、元に戻さないファイルがかなり多く含まれている場合、上記の方法には多くの「リセットB」コマンドが含まれている可能性があります。この場合、次の方法を使用できます。
# revert, but do not commit yet
git revert -n <sha1>
# clean all the changes from the index
git reset
# now just add A
git add A
git commit
また別の方法では、rebase -iコマンドを使用する必要があります。これは、編集するコミットが複数ある場合に役立ちます。
# use rebase -i to cherry pick the commit you want to edit
# specify the sha1 of the commit before the one you want to edit
# you get an editor with a file and a bunch of lines starting with "pick"
# change the one(s) you want to edit to "edit" and then save the file
git rebase -i <sha1>
# now you enter a loop, for each commit you set as "edit", you get to basically redo that commit from scratch
# assume we just picked the one commit with the erroneous A commit
git reset A
git commit --amend
# go back to the start of the loop
git rebase --continue
ソース: http://git-scm.com/book/en/Git-Basics-Undoing-Things
git checkout-modifiedfile.Java
1)$ gitステータス
変更されたファイルが表示されます
2)$ git checkout-modifiedfile.Java
3)$ gitステータス
git add B # Add it to the index
git reset A # Remove it from the index
git commit # Commit the index
man git-checkout :git checkout A
はい;
git commit FILE
fILEのみをコミットします。その後、使用することができます
git reset --hard
他のファイルのローカル変更を元に戻すため。
私が知らない他の方法もあるかもしれません...
編集:または、NicDumZが言ったように、git-checkoutは変更を元に戻したいファイルだけです(最良の解決策は、コミットするファイルがもっとあるか、元に戻すファイルがもっとあるかによって異なります:-)
「 git add<file>」を使用して、コミットにどのような変更を加えたいのか単にマークできないのはなぜですかまたは「git add --interactive」、または「git gui」(インタラクティブなコミットのオプションがあります)、そして「git commit -a」の代わりに「git commit」を使用しますか?
あなたの状況では(あなたの例のために):
Prompt> git add B
Prompt> git commit
ファイルBへの変更のみがコミットされ、ファイルAは「ダーティ」のままになります。つまり、作業領域バージョンのそれらのprintステートメントが残ります。これらのprintステートメントを削除する場合は、使用するだけで十分です。
Prompt> git reset A
または
Prompt> git checkout HEAD -- A
コミットされたバージョン(HEADからのバージョン、つまり「git show HEAD:A」バージョン)に戻す。