1. ホーム
  2. git

[解決済み] Gitが一部のファイルの変更を取り消す [重複] [重複

2022-04-13 23:11:59

質問

コーディング中に、何が起こっているかを追跡するために、いくつかのファイルにprintステートメントを追加しました。

作業が終わったとき、いくつかのファイルの変更を元に戻すことはできますが、実際に作業したファイルをコミットすることはできますか?

ファイルに印刷を追加したとします。 A を修正しました。 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

一方、コミットしたけれども、そのコミットにはむしろ多くのファイルが含まれていて、それを戻したくない場合、上記の方法では多くの "reset 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