4

ローカルとそれに対応する github リポジトリがあります。私はいくつかのコミットを持っています

A <- B <- C <- D

Aが最新です。

これは両方のレポの状況です。コミット C を削除したいと思います。

だからそれはのようにする必要がありますgit log

A <- B <- D

両方のレポで。

私は試しgit reset --soft <sha-commit-C>てみましたが、今は立ち往生しています。見えないA, B。さらなる手順を実行する前に、自分が何をしているのかを完全に確認したいと思います。

git reflog私に与えます:

git reflog
73ea54d HEAD@{0}: reset: moving to 73ea54d8
a594699 HEAD@{1}: rebase -i (finish): returning to refs/heads/unique_ptr_release
a594699 HEAD@{2}: checkout: moving from unique_ptr_release to a594699fb6f7d85bc8
a594699 HEAD@{3}: checkout: moving from unique_ptr_release to unique_ptr_release
a594699 HEAD@{4}: commit (merge): Merge branch 'master' into unique_ptr_release

HEAD@{4}reset --soft命令の前に私の頭があったものです。

どうすればこの状況から抜け出すことができますか?

4

2 に答える 2

7

Git-rebaseはあなたが探しているものです。

commit の場合、A-B-C-DC を削除したい場合は、次を試してください。

git rebase -i HEAD~3

エディターを介して最後の 3 つのコミットが表示されます (私の場合は vim)。削除するddコミットの行を (vim: で) 削除し、それを保存します (vim: で:wq)。

完了して表示すると、コミットが削除されgit logていることがわかります。C

*コードまたは .git フォルダーをバックアップすることを忘れないでください。

于 2013-09-06T11:12:45.300 に答える
1
  1. .git フォルダーを必ずバックアップしてください。
  2. コミット D を確認し、C で行われた変更に依存しないでください。
  3. git rebase --onto DB~1 (A が最新のコミットであるため)
于 2013-09-06T10:48:36.357 に答える