gitリポジトリを特定のコミットに切り替える方法


189

私のgitリポジトリでは、以下のようにgitログで5つのコミットを行いました。

commit 4f8b120cdafecc5144d7cdae472c36ec80315fdc
Author: Michael 
Date:   Fri Feb 4 15:26:38 2011 -0800

commit b688d46f55db1bc304f7f689a065331fc1715079
Author: Michael
Date:   Mon Jan 31 10:37:42 2011 -0800

commit b364f9dcec3b0d52666c4f03eb5f6efb7e1e7bda
Author: Michael
Date:   Wed Jan 26 13:33:17 2011 -0800

commit 4771e26619b9acba3f059b491c6c6d70115e696c
Author: Michael 
Date:   Wed Jan 26 11:16:51 2011 -0800

commit 6e559cb951b9bfa14243b925c1972a1bd2586d59
Author: Michael 
Date:   Fri Jan 21 11:42:27 2011 -0800

以前の4つのコミットをブランチでローカルにロールバックするにはどうすればよいですか?言い換えると、最新の4つのコミットなしでブランチを作成するにはどうすればよいですか(gitログからそのコミットのSHAがあると仮定します)?

回答:


230

(ローカルで)新しいブランチを作成するには:

  • コミットハッシュ(またはその一部)

    git checkout -b new_branch 6e559cb
    
  • または、HEADから4つのコミットに戻る

    git checkout -b new_branch HEAD~4
    

新しいブランチが(ローカルで)作成されたら、この変更を同じ名前のリモートに複製することができます。変更をリモートブランチにプッシュするにはどうすればよいですか。


以下のために、最後の3つのコミットを破棄し、参照して以下Lunaryornの答えを


以下のための新しいブランチを作成せずにコミット指定にあなたの現在のブランチのヘッドを移動させる参照、以下Arpiagarの答えを


153

上記のすべてのコマンドは新しいブランチを作成し、最新のコミットがコマンドで指定されたものになりますが、現在のブランチHEADを指定されたコミットに移動したい場合に備えて、以下にコマンドを示します。

 git checkout <commit_hash>

これは、デタッチとポイントHEADコミット指定すると、ユーザーがちょうどその特定のコミットまでの分岐状態を表示したい場合新しいブランチを作成から保存されます。


次に、最新のコミットに戻って、切り離されたHEADを修正します。

Git分離ヘッドを修正しますか?


1
これで頭が外れます。便利でない。
IgorGanapolsky

<commit_hash>前方にある別のブランチにある場合でも?
Ciasto piekarz

リンクされた質問はgit checkout master、特定の状況に適用される可能性のある1つまたは2つのエッジケースと一緒に、とだけ言っています。
i336_

66

最新の4つのコミットを破棄したい場合は、以下を使用します。

git reset --hard HEAD^^^^

あるいは、リセットしたいコミットのハッシュを指定することができます:

git reset --hard 6e559cb

4
これは分岐ステップを省略します。ここに表示されているとおりに実行すると、上位のコミットが永久に失われます。
ジミーCuadra

3
まあ、必ずしも恒久的ではありません-以前のヘッドのSHAを取得してgit reflogリセットすることができます-しかし、それはそれらを破棄することになるでしょう、はい。
アンバー

1
コミットが最初にプッシュされてからリセットされた場合、プルするだけで再度取得できます。
リックスミス

17

新しいブランチを開始したいコミットをチェックアウトして、新しいブランチを作成するだけです

git checkout -b newbranch 6e559cb95
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.