在Git中正确使用rebase



我在一个公共开发项目中工作,我对Git Bash合并更改到远程分支的正确使用有疑问。我的同事正在使用一个UI (turtle Git),但我想继续使用Git Bash。

我通常是这样提交和推送我的修改的:

git commit -a -m "<commit message>"
git pull
git push

如果有冲突,我继续如下:

git commit -a -m "<commit message>"
git pull
<Solve conflicts using Tortoise Git>
git commit -a -m "<commit message>"
git push

我的理解是,以上不是最佳实践,因为分支的日志将变得混乱(周围有很多分支,加上我推送更改时的一长串差异)。我被告知rebase是一个更好的选择,因为日志历史保持线性(基本上提交是一个接一个地存储)。

我该如何正确使用变基函数修改我的代码吗?

您首先需要了解的是git pull是如何工作的。根据文档

更准确地说,git pull使用给定的参数运行git fetch,然后根据配置选项或命令行标志,调用git rebase或git merge来协调分支。

如评论中所述,您可以使用git pull --rebase(或-r)。你会没事的。但是你可以这样做:

git config pull.rebase true(您可能想在这里添加--global标志)

有了这个配置,你不需要修改你正在运行的命令。

这将是所有关于答案,但我的小提示。我个人使用不同的配置:git config pull.ff only

有什么不同,为什么?使用此配置,如果远程分支与本地分支分离,您将无法拉取。然后你将能够检查是什么原因。(也许你一开始就没有预料到转移,也许你拼错了分支名称,你几乎合并了不同的远程分支?)

从这里你可以进行第一次检查日志,例如您可以运行git log <branch_name>...<origin_branch_name>当你决定你想做什么,您可以运行:

git pull -r(因为你不想把历史弄得一团糟)

git pull -ff(这将创建合并提交,如果你决定这是你想要处理它的方式)

最新更新