我目前正在学习使用git rebase
命令。在推到遥控器之前我已经用它来压缩提交,但刚才我注意到我可能搞砸了。不幸的是,我不太确定它,我也找不到任何专门告诉我会发生什么的资源,这就是我需要你帮助的原因。这是我做的:
在将多个提交压缩在一起后,我将它们推到远程。几个小时之后,我和master一起重新启动了分支,做了一些提交并将这些提交压缩到我之前推送的提交中,并推送到远程。
我认为这正是我不应该做的事情,因为我重新定义了已经公开的提交,但最糟糕的事情是什么 - 可以丢失工作吗?
顺便说一下:我非常有信心,没有其他人接触过这个分支,也没有人从中做过工作。
答案 0 :(得分:3)
你是对的,你不应该改变已经发布的提交。这并不是真正失去工作,而是因为它会导致与此同时与存储库保持联系的任何人一团糟。这通常意味着他们必须通过移动分支指针并重置东西来手动修复它。
如果你确信没有其他人碰过这个分支 - 甚至没有抓住它! - 那么就不会有任何后果。但是你可能仍然想警告人们如果你决定推动它。
话虽如此,仅仅因为你重新定位它,这并不意味着你需要推动那个重新定位的提交。您实际上可以重置为非基础状态。例如,您可以使用git reflog
检查reflog以返回到原始提交。或者你可以获取然后简单地git reset --soft origin/master
去除自推送提交以来的所有更改(这只会删除历史记录,但会保留工作目录中的更改,以便您可以使用它进行新的提交)。这样你就可以恢复一个可以安全推送的状态。
可以丢失工作吗?
重新定位显然会让你失去你正在变相的原始历史。但除非你搞乱合并冲突,否则变更的<em>内容应该是相同的,不应该有任何损失。