2017-08-24 69 views
1

我碰上這種情況下更多的時候,我想:如何'吹走'GIT合併並重新開始?

  • 我檢查出一個分支
  • 編輯一個文件
  • 去推
  • 我告訴分支機構有分歧,我需要合併100次更改

這通常發生在有人在我進行更新之前有人推送更新。

現在,我知道最好的解決方案是我需要在推動之前記住pull。但是當我忘記時,我被GIT卡住了,不斷告訴我需要合併一切。

我試過git checkout .來'清除'它並重新開始,但這是行不通的。我也試圖強制結賬。無論是哪種情況,它都表示我仍然合併提交。

是否有一種簡單的方法可以將我當前的狀態和'吹走',所以我可以重新檢查並重新編輯一個文件?

+1

'git reset --hard HEAD ^' – marcusshep

+0

https://xkcd.com/1597/ –

+0

@DEEval是的。這可能是所有* git問題的答案。 :) –

回答

1

在運行git checkout .之前,您需要運行git reset HEAD~1。這將導致您的上次提交被「撤消」,並且這些更改將處於「預加」階段。然後,您將收銀臺吹走。

或者,您可以在一個命令中完成這兩個例程。

git reset --hard HEAD^ 

這將導致在最後一次提交而復和HEAD將指向先前提交您所作的任何更改之前。這很可能是你的同事開始工作的承諾。

這需要在您提交您的同事提交之前進行。

+0

啊......真好!而這個命令實際上是有意義的(重置!)。這就是訣竅! –

2

如果我理解這個問題,我想你實際上的意思是:

  • 我檢查出一個分支
  • 經過一段時間 ...
  • 編輯一個文件
  • 一段時間過去了 ...
  • 去推
  • 上午告訴分支機構已經發生分歧,我需要合併100個變更

總是在活動項目上發生。在這一點上做一個Pull可以自動進行合併,沒有任何問題,在此之後,如果沒有衝突,你就可以推送(如果有衝突,你必須遲早解決它們)無論如何)。

但是有些團隊不喜歡這樣的歷史記錄(在一個活躍的項目上,這可能會失控)。所以另一個解決方案是做一個Fetch-and-Rebase。這將找到您的提交,撤消它們,獲取新的提交併重新應用您的提交。然後你可以推,歷史將看起來像一條線,代價是準確性(你的提交發生在歷史的另一個時間)。

+0

這也是一個很好的答案。聽起來我應該讓合併發生。也就是說,我是一名前端開發人員,通常我只是在一個文件中更改一行CSS或一行HTML,所以我想我只是想輕輕一踩,然後「重置事物」並放置在那一個變化。是的,GIT威脅我。 :) –

+0

期望'push'失敗,這是正常的,做一個'fetch'然後是'rebase'和'push'(儘管你可以跳過最初的'push')。硬重置時要小心。你可能會失去你的改變(這是它的目的)。 – rustyx