Gitブランチを特定のコミットにロールバックしたい。そこで私はgit log
を実行し、コミットSHAハッシュを見つけ、git checkout <myhash>
を実行します。Gitブランチの特定の時点(つまりコミット)にどのようにチェックアウトするのですか?
これは通常正常に動作しますが、今回は何かが怪しいです。 git log
をもう一度見ても、最新のコミットが正しいことがわかりますが、私はさらに多くのコミットを見逃しています。私の上には、このコミットがあります。このコミットは別のブランチ(another
)からのマージの一部であり、そのブランチからの履歴、つまり事前マージが表示されます。
master's log, pre-merge: D-C-----B'-B-A-----F
another's log: 7-6-----5-4--------3-2-F
master's log, post-merge: M-7-6-D-C-5-4-B'-B-A-3-2-F
私は5
をコミットし、another
からの歴史の中でコミットを取得チェックアウト:
5-4-3-2-F
しかし、私は、master
からの歴史の中でコミットを好きポストマージしたい:
5-4-B'-B-A-3-2-F
a repo私はこれをテストできます:
$ git clone git://github.com/henrik242/Git-Branch-Test.git
$ cd Git-Branch-Test
$ git checkout -t origin/another
$ git log ## The commits are named "test [2-7]"
$ git checkout master
$ git log ## master's original commits are named "test [A-D]".
$ git checkout 68c1226a0c ## test 5
$ git log ## We now have the commits in the history from the "another" branch,
## even though this commit exists in the "master" branch as well
私はほとんど私がやりたいgit rebase -i
を使用することができます。
$ git branch back-in-time
$ git checkout back-in-time
$ git rebase -i 18b1a648bc ## the SHA1 of 'test 4', the commit before 'test 5'
エディタが起動します:不要なコミットを削除します。保存して終了、およびgit log
は今、希望コミットを示しています
5-4-B'-B-A-3-2-F
問題はgit rebase -i
は難しい右のコミットを選択することができた、git log
と同じ順序でコミットを示していないということです。
次の2つのコミットをしてい'2'というラベルのコミット・グラフでは、同じハッシュを持つことはできず、コミット・グラフの別の場所にあることもできません。彼らが実際に同じコミットかどうかを明確にすることができますか? –
あなたはまた、祖先を右に、子孫を右に持つことになっている従来の方法(例えば、Gitのマンページ)からあなたの写真をミラーリングしました。 – Cascabel
@MarkLongair:2,3,4,5,6の2つはすべて同じですが(私はそうは思いませんが)、1の2つのラベルは間違いなく同じです! OPに:マークのコメントと一緒に、コミット2をどのようにチェックアウトしましたか? SHA1で?異なるコミットのSHA1は、定義が異なります。 – Cascabel