【发布时间】:2011-11-04 06:18:59
【问题描述】:
我有一个项目的本地分支(“configUpdate”),我从其他人的项目中分出,我已经对其进行了大量更改,并希望将他们所做的更改合并到我的本地分支。
我试过了
git pull --rebase origin configUpdate
但它没有获取最新的更改 - 我如何合并两者? (还有加分我用pull --rebase 命令做了什么?)
【问题讨论】:
我有一个项目的本地分支(“configUpdate”),我从其他人的项目中分出,我已经对其进行了大量更改,并希望将他们所做的更改合并到我的本地分支。
我试过了
git pull --rebase origin configUpdate
但它没有获取最新的更改 - 我如何合并两者? (还有加分我用pull --rebase 命令做了什么?)
【问题讨论】:
从您的功能分支(例如 configUpdate)运行:
git fetch
git rebase origin/master
或更短的形式:
git pull --rebase
为什么会这样:
git merge branchname 从分支 branchname 获取新提交,并将它们添加到当前分支。如有必要,它会自动在顶部添加“合并”提交。
git rebase branchname 从分支 branchname 获取新提交,并将它们插入到您的更改“下方”。更准确地说,它会修改当前分支的历史记录,使其基于 branchname 的提示,以及您在此基础上所做的任何更改。
git pull与git fetch; git merge origin/master基本相同。
git pull --rebase与git fetch; git rebase origin/master基本相同。
那么为什么要使用git pull --rebase 而不是git pull?这是一个简单的例子:
您开始开发一项新功能。
当您准备好推送更改时,其他开发人员已经推送了几个提交。
如果您git pull(使用合并),除了自动创建的合并提交之外,您的更改将被新提交隐藏。
如果您改为 git pull --rebase,git 会将您的 master 快速转发到上游,然后将您的更改应用到上面。
【讨论】:
git rebase 似乎对我不起作用。在 git rebase 之后,当我尝试将更改推送到本地分支时,我一直收到错误消息(“提示:更新被拒绝,因为您当前分支的尖端位于其远程分支的后面。集成远程更改(例如 'git pull . ..') 在再次推动之前。") 即使在 git pull 之后。最终对我有用的是 git merge。
git checkout <local_branch>
git merge <master>
如果你像我一样是初学者,这里有一篇关于 git merge vs git rebase 的好文章。 https://www.atlassian.com/git/tutorials/merging-vs-rebasing
【讨论】:
切换到本地分支
> git checkout 配置更新
将远程 master 合并到您的分支
> git rebase master configUpdate
如果您有任何冲突,请更正它们并为每个冲突的文件执行命令
> git add [path_to_file/conflicted_file](例如 git add app/assets/javascripts/test.js)
继续变基
> git rebase --continue
【讨论】:
我发现它是:
$ git fetch upstream
$ git merge upstream/master
【讨论】:
pull --rebase 不起作用,因为origin 指向你的分叉。如果你这样做git pull --rebase upstream/master,它会起作用的。