在同一个分支上工作,如何在不丢失更改的情况下进行拉取?

Working on the same branch, how to pull without losing changes?

我和同事在同一个分支工作。现在我已经提交了一些文件并发送给代码审查,其他一些同事也是如此。现在他先于我推送他的代码。我现在需要撤回他的更改,然后添加我的更改。但是它已经提交了。

我如何获得他的更改,然后添加我的更改,而不会使历史看起来很糟糕并且我不得不跳来跳去?我对 git 很陌生。

您可以使用 git pull --rebase。这将获取您同事的提交,然后将您的提交(您尚未推送的)放在它们之上,同时保持历史看起来不错。

编辑:Cyril CHAPON 在他的评论中提出了一些要点。查看他的一些链接,以充分了解 rebase 的工作原理并避免陷阱。

git pull

这将从远程服务器获取他的更改,将它们本地带到您的机器上,然后将他的工作与您的工作合并。这将在历史中加入一个分支:一个分支包含您的工作,一个分支包含他的工作,然后在将两者放在一起时加入一个分支。 Git 如果有必要,您将有机会解决任何冲突,但它在自动合并方面做得很好。

我强烈建议您阅读此内容:https://git-scm.com/book/en/v2

如前所述,您可以执行 git pull --rebase,但您还可以采用不同的方法: 想象一下你的历史现在是这样的:

A -> B -> C -> D | | local master remote/master 您可以执行以下操作:

$ git branch save_state $ git reset --hard C 基本上这会带你到

A -> B -> C (remote/master) \ -> D (local save_state)

你知道从远程拉取更改到你的主服务器

$ git pull origin master

这将导致快进合并(历史​​清理到这里) 并且知道你可以做

$ git checkout save_state $ git rebase master $ git checkout master && git merge save_state 您可以在这里毫无问题地变基这个分支,因为它还没有被推送到远程。