1

次のような 3 つのコミットを持つmy-branchという名前のブランチがあるとします。

aaa
bbb
ccc

最初、 my-branchの先端はaaa を指しています。そうすればgit reset --hard HEAD^、ヒントは bbb を指し始めます。同じコマンドを実行すると、 my-branchの先端がccc を指すようになります。aaa や bbb に再びチップを向けるにはどうすればよいでしょうか?

1 つのオプションは、aaa または bbb をチェックアウト (HEAD をデタッチ) してから、新しいブランチ (たとえばnew-branch ) をチェックアウトし、 my-branchを削除して新しいブランチを使用することです。また、次のようなものが機能git branch -f my-branch bbbするはずだと思いますが、これを試してみると、

fatal: Cannot force update the current branch.

他のアイデアはありますか?

4

4 に答える 4

5

git reset --hard <commit-ID>現在のブランチを再調整するために実行できます。必要に応じて、reflog を使用して ID を見つけます。または、reflog にこれが (たとえば)HEAD@{2}であると示されている場合は、さらに単純です (それぞれがinの番号を付け直すことにgit reset --hard HEAD@{2}注意してください)。git resetn@{n}

そのマージが早送りマージである場合、 Francisco Puga's answergit mergeの方法も正常に機能します。(間違ったものを選択すると、実際のマージが行われます。それが必要な場合は問題ありません。そうでない場合は、元に戻すことができます。)ここでも、生の SHA-1 または reflog 名を指定できます。追加のボーナスとして:git reset --hard HEAD^

git merge --ff-only id

は「ブランチ名を前方にスライドさせる」(またはのような新しいヒントに向かって)だけであり、「通常の」マージは決して行わないため、適切な ID を使用していることを確認するのに適した方法です。aaabbb

于 2013-09-29T09:45:09.027 に答える
2

それらのコミットがmasterなどの別のブランチに存在する場合、 git merge を使用してmy-branchに戻すことができます。

ハッシュ bbb のコミットをmy-branchに復元するには、次を使用します

git checkout my-brach
git merge bbb

これらのコミットがブランチに存在しなくなった場合は、git reflogを使用する必要があります。

于 2013-09-29T09:04:14.360 に答える
1

「branchname@{yesterday}」などの日付ベースの sha1 式を使用して、ブランチの先端を特定のコミットに設定できます。

例: git checkout testbranch@{yesterday}

ただし、これにより、既に述べたように、分離された HEAD 状態になります。

于 2013-09-29T09:31:55.653 に答える