37

gitコマンドを使用して、gitリポジトリに長い間マージされてきた過去のコミットを元に戻すことはできますか?または、そのコミットで行われたすべての変更を手動で元に戻す必要がありますか?

4

2 に答える 2

43

次の手順を実行することで、いつでも1回のコミットから変更を元に戻すことができます。

git revert <commit-id>

これにより新しいコミットが作成され、それらの変更のみが元に戻されることに注意してください

例えばgit log --oneline

d806fc9 two
18cdfa2 bye
62c332e hello
c7811ee initial

コミットで変更を元に戻したいとしましょう18cdfa2

git revert 18cdfa2

私たちは今持っています:git log -1 -p

commit fb9d6627a71636503fc9a1eb4f725937c783ecee
Author: Seth <sehe@mint12.(none)>
Date:   Wed Oct 3 10:32:46 2012 +0200

    Revert "bye"

    This reverts commit 18cdfa27c964b66b624be1030250757b745d6866.

diff --git a/a b/a
index 0907563..3b18e51 100644
--- a/a
+++ b/a
@@ -1 +1 @@
-bye world
+hello world
于 2012-10-03T08:31:14.310 に答える
21

git revert <commit-hash>gitcommitを元に戻すにはいつでも実行できます。ただし、これはgit reflogに追加する新しいコミットを作成するため、ほとんどの場合役に立ちません。

一歩下がる必要があるときに私が通常行うことは、ブランチを以前の段階にリセットすることです。これを行うには、git reflogを実行し、移動先のHEAD位置を探します。

rizwan@dragonstone:~/myrepo$ git reflog -3
8d386b8 HEAD@{0}: commit: I did something I don't want
2a59955 HEAD@{1}: commit: Feedback from PR #792
1023102 HEAD@{2}: checkout: moving from one branch to another

2a59955ここで、ハッシュをコミットして、のすべての変更を元に戻すために移動したいとし8d386b8ます。私はします:

Update: git reset --soft HEAD@{1} 

これにより、ブランチが初期状態にリセットされます。これを行うと、すべての変更が取り消されるだけでなく、このコミットで追加した可能性のあるすべてのファイルの追跡も停止します。どうしても、これは1回のコミットですべての変更を元に戻す最も効率的な方法です。

これにより、すべての変更が取り消されます。過去にさかのぼることを目的としたハードリセットがあります(少なくともgitの観点から)。この--hard代わりに使用する--soft

于 2012-10-03T09:11:08.203 に答える