之前,我給我的回答是:我會建議逼近問題的根源(需要在不同的機器上的不同代碼)一種更正式的方式,因爲我懷疑這最終會給你帶來更多麻煩。根據語言和工具的不同,我認識到這可能並不容易(當然,如果不瞭解語言,工具等,我無法提供一個通用的解決方案),但您可能會覺得它值得。
但是,嘿,假設你目前的做法是要爲你工作得很好,這裏是你會怎麼做堅持下去:
你開始這種情況
X --- X <--(origin/master)
\
A --- B --- C <--(master)
你要推的變化形成B
和C
,但不是A
;此外,您希望本地繼續工作,基於A
,B
和C
的所有更改。
爲了讓事情辦得那樣順利,因爲他們可以,你也想混帳認識到,從B
和C
變化的照顧,這樣以後(當你有D
並希望將它),你不」最終導致一堆毫無意義的衝突解決。
所以首先做你的互動rebase;但不是刪除A
,而是將其移至TODO列表的末尾。此操作後,您應該
X --- X <--(origin/master)
\
B' --- C' --- A' <--(master)
(技術上A,B和C都還在閒逛,你可以回到他們,如果你需要,但如果一切順利的話,你會不會需要)
現在你想要退回master
上一個提交,按下,然後將master
拉回到A'
。
git reset --hard HEAD^
git push
git reset --hard [email protected]{1}
產生
X --- X --- B' --- C' <--(origin/master)
\
A' <--(master)
進行,必要時重複
這會起作用,但有兩個原因我不喜歡它個人。 (1)您必須小心,不要意外提交隱藏的更改,這可能會在工作流程的隨機點創建額外的工作。 (2)我只是不喜歡長壽的積木;我想我不會在意如果我不使用短暫存放的相當一部分,但是因爲我發現長期存放我的方式。但是ymmv –