在同一个分支上工作,如何在不丢失更改的情况下进行拉取?
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
您可以在这里毫无问题地变基这个分支,因为它还没有被推送到远程。
我和同事在同一个分支工作。现在我已经提交了一些文件并发送给代码审查,其他一些同事也是如此。现在他先于我推送他的代码。我现在需要撤回他的更改,然后添加我的更改。但是它已经提交了。
我如何获得他的更改,然后添加我的更改,而不会使历史看起来很糟糕并且我不得不跳来跳去?我对 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
您可以在这里毫无问题地变基这个分支,因为它还没有被推送到远程。