2016-08-16 1 views
0

私は元に戻ろうとしましたが、紛らわしい葛藤を続けました。前のgitコミットのコピーを作成してそれを頭にする方法

A-B-C-D-E-F

A-B-C-D-E-F-D」

これを行うための簡単な方法があります:

は、私はこのような何かをしたいです。

+0

なぜあなたはHEADでGitコミットのコピーを再生したいのですか?これを行う意味は何でしょうか? –

+0

私は以前のコミットを台無しにしましたが、私はそれらを履歴として保持したいと思います。 – slimboy

+0

保存したい特定の要素が 'E'と' F'ですか?なぜ、 'F'と' E'を元に戻してそれをやってみませんか?現在の「HEAD」を元に戻すことは決して衝突を起こさない。 –

答えて

2

あなたの投稿やコメントからわかるように、FEを元に戻して、履歴として保存したいと考えています。 D後にコミットあなたはしかし、バックHEADから遠いとnを置き換える

git revert HEAD~n..HEAD 

(あなたの現在のコミット)されています。何ができることはこれです。

これは、コミットをすべてHEADから復帰させ、逆順でDの後にコミットすることで、競合がないことを保証します。

これは、その範囲にマージコミットがあると、かなり複雑になります。マージの最初の親のブランチにコミット好む、および他の枝にマージすることによって導入された変更を削除します

git revert -m 1 HEAD~n..HEAD 

:がある場合は、このような何かを行います。それはあなたが実際にしたいことをやり遂げないかもしれないので、細心の注意を払ってこれを行います。受け入れ答えに反対して

0

、私は(あなたが周りのどこかに飛ばされたものを維持しながら、いくつかのコミットをバックに設定したいmasterブランチ、について話していると仮定して)を示唆している:

git checkout master 
git checkout -b old_master 
git branch -f master D 
git checkout master 

これはあなたに非常に明確な歴史を与え、あなたが削除ジャンクはまだ周り

master 
     | 
     v 
A-B-C-D 
     \ 
     E-F 
     ^
      | 
     old_master 

どれさらにコミットが発散歴史につながるです...

 master 
      | 
      v 
A-B-C-D-G-H 
     \ 
     E-F 
     ^
      | 
     old_master 

だからEとFはあなたの「本当の」履歴を混乱させることはありませんが、あなたはいつもそれらに戻ることができます。あなたが最終的にもうそれらを必要としないと決めたら、あなたはただgit branch -D old_masterであり、彼らは痕跡なしでなくなっています。

関連する問題