【发布时间】:2012-02-03 12:30:26
【问题描述】:
假设我有一个名为 develop 的私有主题分支,在 master 之前有 2 次提交。
git pull origin master 是做什么的?
从远程master中拉取所有东西在本地develop并合并吗?拉取本地 master 分支中的所有内容并合并?
有没有办法在没有git checkout master 的情况下从开发中更新master?
【问题讨论】:
假设我有一个名为 develop 的私有主题分支,在 master 之前有 2 次提交。
git pull origin master 是做什么的?
从远程master中拉取所有东西在本地develop并合并吗?拉取本地 master 分支中的所有内容并合并?
有没有办法在没有git checkout master 的情况下从开发中更新master?
【问题讨论】:
git pull origin master 将 master 分支从远程称为 origin 拉到您的当前分支。 它只影响你当前的分支,不影响你的本地主分支。
它会给你的历史看起来像这样:
- x - x - x - x (develop)
\ /
x - x - x (origin/master)
您的本地主分支与此无关。 git pull本质上是git fetch和git merge的组合;它获取远程分支,然后将其合并到您当前的分支中。这是一个像任何其他的合并;它不会做任何神奇的事情。
如果你想更新你的本地 master 分支,你别无选择,只能检查一下。无法合并到未签出的分支中,因为 Git 需要工作树才能执行合并。 (特别是,报告合并冲突并允许您解决它们是绝对必要的。)
如果您碰巧知道拉入 master 将是一个快进(即您在本地 master 分支中没有提交不在 origin 的 master 中),您可以解决,as described in this answer。
【讨论】:
update-ref 解决方案,因为您可以在 reflogs 中留下正确的痕迹,而我就是这样着迷的。
一旦你提交更改到你的分支,使用
git add -A
git commit -m <message>
你可以这样做:
git pull origin master
进入你的分支,这将使你的提交保持在主拉的顶部。您的分支现在将与 master + your commits 保持一致。所以,你现在可以这样做:
git push
并且 git 会将您的更改连同主提交一起推送到您的分支中。然后,您可以轻松地将其合并到 Github 上的 master 中。
【讨论】: