之前,我给我的回答是:我会建议逼近问题的根源(需要在不同的机器上的不同代码)一种更正式的方式,因为我怀疑这最终会给你带来更多麻烦。根据语言和工具的不同,我认识到这可能并不容易(当然,如果不了解语言,工具等,我无法提供一个通用的解决方案),但您可能会觉得它值得。
但是,嘿,假设你目前的做法是要为你工作得很好,这里是你会怎么做坚持下去:
你开始这种情况
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 –