我在一个公共开发项目中工作,我对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
(这将创建合并提交,如果你决定这是你想要处理它的方式)