Git:使用Rebase还是Merge更新本地分支

3

我有一个开发分支,由项目中所有人共享并进行远程跟踪。

本地上,我已经从该分支切出去并开始了一些持续性的工作。然而,与此同时另一个开发者已经提交并推送了一些变更到开发分支,我希望将这些变更反映到我的本地分支中。 现在是进行变基的时候了吗?

我不想简单地将我的本地分支提交到开发分支,然后开始一个新的分支,因为我想保留我的提交历史。

据我所知,变基会将开发分支的HEAD取出,并在其上重新应用所有我的提交,但如果我们对相同的行进行了更改,那么它会覆盖其他开发者的更改吗?是否会产生冲突?


为什么不将你的更改存储为一个补丁,拉取他的更改,然后再应用你的补丁呢? - shortstuffsushi
1
@shortstuffsushi 我可能误解了你(我对补丁几乎一无所知),但我不明白拉取请求如何将他的更改合并到我的私有分支中,只会合并到我的本地开发分支副本中。 - Nick Brown
@shortstuffsushi; git rebase会自动完成这个任务,为什么要让事情变得更加困难呢? - itsbruce
@itsbruce 可能是这样,但我从未成功过。不过我从未真正在一个干净的树上工作过。 - shortstuffsushi
@shortstuffsushi 你应该始终使用干净的代码库。如果没有多余的垃圾存在,Git 的大多数功能(如 rebase、快速切换分支或返回历史记录、二分查找等)都能更好地工作。使用 .gitignore 来避免额外的文件影响你的工作,并在有未完成的更改时使用 git stash。除非你正在积极地进行工作,否则 git status 应该报告没有需要提交的内容。 - Brian Campbell
2个回答

6

首先,你要fetch,然后再进行rebase。这样做不会破坏其他人的更改;你所做的是重新设置你的变更集,使其成为针对他的更改而不是早期版本的差异。这消除了日志中不必要和无用的合并消息,并使日志更有意义如果这确实是开发历史应该被表示的方式。

请放心进行rebase;在这种情况下听起来是正确的做法。太多人在没有思考的情况下就执行git pull命令。


+1 对于“太多人只是不加思考地 git pull”的说法。 - Dan Moulding

5

是的,您说得对,rebase会获取开发分支的头部,并重新应用所有提交。

不过,它不会在没有抛出冲突的情况下覆盖其他开发人员的更改。如果存在冲突的更改,您需要解决冲突,就像合并一样(修复冲突,并使用git add将修复内容暂存),然后告诉rebase继续使用git rebase --continue

是的,这是进行rebase的适当时机。这是许多人的工作方式;如果他们有未推送的本地提交,而又有上游提交,他们会在继续工作或推送到公共repo之前对其本地提交进行rebase。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接