我创建了一个新分支new_feature
并开始研究它。到目前为止,我做了4次提交,并将所有这些提交到远程。但由于某些官方原因,我需要从本地和远程删除所有提交,但我需要在本地保留更改,然后在一次提交中再次提交所有内容。所以我需要做的步骤是
new_feature
new_feature
new_feature
分支new_feature
分支。最后new_feature
分支应该只有一个提交,其中包含我迄今为止在此分支中所做的所有更改。答案 0 :(得分:1)
要在有效地将树重置为最新远程提交的同时保留更改,请使用git reset origin/master
。然后将所有内容作为单个新提交提交。然后按(这将需要--force
)。
重新定位会起作用,但在这种特殊情况下,它并不是真正需要的。
答案 1 :(得分:0)
使用git rebase -i ...
并将提交压缩成一个,然后执行git push --force
以使用重新定位的本地分支覆盖远程分支。
答案 2 :(得分:0)
我不确定你为什么需要做你要问的事情,但我会根据你所描述的场景来做这件事。
git rebase
将所有本地提交压缩到一次提交中。 (https://git-scm.com/docs/git-rebase)git push
与--force
一起使用您的重新定位的本地分支覆盖远程分支。 (https://git-scm.com/docs/git-push)注意,如果有人检查了您的远程分支,当您覆盖远程分支的历史记录时,它们将会处于困境中。
我希望这会有所帮助。
答案 3 :(得分:0)
你被要求有效地"压制你的提交"。
这是一个非常常见的请求,因为您的更改已准备好合并为master。
您的一些选择是:
使用交互式rebase,例如git rebase -i HEAD~10
选择并压制提交。
git merge --squash
将更改后的文件复制到项目外部,然后从master创建一个新分支(或删除分支,然后重新创建),然后复制文件。
请注意,前两个选项可能需要您强制推送(使用`-f),因此请确保没有其他人已将其他提交推送到该分支这是选项3的一个原因对于新手来说可能更安全。
答案 4 :(得分:0)
听起来你想要改变 - 这将允许你将几个提交折叠成一个。我们假设你有以下提交(最近的提交):
cdef... Finished feature X new_feature/HEAD
89ab... Continue feature X
4567... Start feature X
0123... Fix typo in docs master
您希望将最后三个提交折叠成一个,因此您在上保留最后一个要保留的提交:
$ git rebase -i 0123
编辑器弹出:
pick cdef... Finish feature X
pick 89ab... Continue feature X
pick 4567... Start feature X
改变"选择"到"壁球"对于后来的提交:
squash cdef... Finish feature X
squash 89ab... Continue feature X
pick 4567... Start feature X
所有更改将合并为一个提交,您将被要求提交新的提交消息,并且Bob是您的叔叔。
顺便说一下,如果你想要提交的安全性可以回滚,但想要/需要一个清晰的提交历史记录,这是一个很好的工作方式:分支,在本地疯狂提交,然后重新变成逻辑黑客。
回到目前的状况,现在您已经遇到了无法将此问题推到遥控器上的问题,因为您已经改变了历史记录。你可以强行推动,但不要轻易做到这一点 - 你会为那些拉开那个分支的人打破一切。
$ git push --force <remote> new_feature