2016-08-16 24 views
0

我試過恢復,但它不斷給我惱人的衝突。如何使以前的git commit的副本,並使其頭部

我想是這樣的:

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,但保留它們作爲歷史。你可以做的是這樣的:

git revert HEAD~n..HEAD 

當你更換n遠然而從HEAD回來(你當前提交)提交D是。

這將做的是以相反的順序恢復HEADD之後的提交之間的每一次提交,確保沒有衝突。

當在該範圍內存在合併提交時,這變得非常複雜。如果有,做這樣的事情:

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,它們就沒有任何痕跡。

相關問題