2011-01-27 69 views
5

Git是一個驚人的工具,但我還沒有想到解決推送的更改的最佳方法。這是情況。Git:使用恢復或檢出來撤消推送的更改?

我在一個分支上,並推動了幾次提交給GitHub。從那時起,我們已經決定,我已經放棄了兔子洞,我們需要取消我已經完成的一些提交,並重新開始。從本質上講,我需要將所有推送的提交反轉回前一個提交。這裏是我認爲是適當

git revert # - creates a new commit that "undoes" the changes of one specific commit 
git checkout 'commit SHA' # - sets the head to that specific commit, wherein I will re-push to the repo, undoing my changes... I think 

所以這兩個命令,對嗎?我是否需要對我想要返回的特定提交進行git結賬?或者在這個令人費解的過程中有什麼我不瞭解的東西?

謝謝。

回答

-1

由於霍里亞指出正確的,你需要的git復位。

Git的檢出意味着您切換到另一個分支或使用結賬-b您可以創建一個新的分支,並切換到它的時候了。

5

有根據的狀態兩種情況,你推什麼:

  • 沒有人用於任何推送分支呢。在這種情況下,您可以使用git reset強制本地分支進行特定提交 - 然後您可以使用--force參數git push分支。

  • 但是,如果有人將他的作品放在分支上而不小心推倒了,那麼您無法真正重置它,因爲他會將他的變化置於分支之外。這是git revert進場的地方。它會記錄一個反向修補程序,有效地消除先前的變化。這樣做的好處是,其他人可以輕鬆地將他們的工作建立在分支上。

方法的選擇取決於你如何存儲庫是和意外補丁多久那裏。如果開發人員少,通信和reset可能是答案。但是,這件事長久以來就存在了,它可能更好地恢復 - 除非你想重寫整個歷史!

另一種看待它的方法是:git revert是持久的,而git reset/git push --force是對歷史的破壞性重寫。兩者都有合適的時間。

最後,當我深入跟隨愛麗絲掉進兔子洞,探討以後如何,我通常做上本地創建分支。然後,如果我喜歡這些變化,我通常會將它們合併到一個測試分支中,然後讓它們在測試分支上進行一些調整,然後再將它們合併到master。這樣你就可以在很多時候避免這個問題。簡而言之,我經常擁有20-30個當地分支機構,每個分支機構都有一個分支機構。他們傾向於先個別測試。有時候,我會創建一個新分支test並將所有內容合併到該分支中,並一起完成所有測試。要跟蹤分支間的衝突,我使用git rerere。好處是我可以決定何時功能足夠穩定以推送給其他人。