在一个分支上开发了很长一段时间后,我切换到了master。日志显示:
你的分支比“origin/master”慢了167次提交,并且可以快进。
我试着:
git checkout HEAD
它没有任何效果。这是因为我在master上签出了一个中间提交。
我怎样才能使主人保持头脑清醒?
在一个分支上开发了很长一段时间后,我切换到了master。日志显示:
你的分支比“origin/master”慢了167次提交,并且可以快进。
我试着:
git checkout HEAD
它没有任何效果。这是因为我在master上签出了一个中间提交。
我怎样才能使主人保持头脑清醒?
当前回答
在你的例子中,要快进,运行:
$ git merge --ff-only origin/master
这使用了git merge的——ff-only选项,因为问题特别要求“快进”。
下面是git-merge(1)的一个节选,展示了更多的快进选项:
--ff, --no-ff, --ff-only
Specifies how a merge is handled when the merged-in history is already a descendant of the current history. --ff is the default unless merging an annotated
(and possibly signed) tag that is not stored in its natural place in the refs/tags/ hierarchy, in which case --no-ff is assumed.
With --ff, when possible resolve the merge as a fast-forward (only update the branch pointer to match the merged branch; do not create a merge commit). When
not possible (when the merged-in history is not a descendant of the current history), create a merge commit.
With --no-ff, create a merge commit in all cases, even when the merge could instead be resolved as a fast-forward.
With --ff-only, resolve the merge as a fast-forward when possible. When not possible, refuse to merge and exit with a non-zero status.
我经常快进,以至于它需要一个别名:
$ git config --global alias.ff 'merge --ff-only @{upstream}'
现在我可以快进:
$ git ff
其他回答
不需要复杂。你就站在你的树枝上,做一个git拉。这对我很管用。
或者,作为第二次尝试,git拉origin master。但这只是以防万一,如果你第一个命令不走运的话。
在你的情况下,git rebase也会奏效。因为你没有master没有的更改,git会快进。如果你正在使用一个rebase工作流,这可能是更可取的,因为如果你搞砸了,你就不会以合并提交告终。
username@workstation:~/work$ git status
# On branch master
# Your branch is behind 'origin/master' by 1 commit, and can be fast-forwarded.
# (use "git pull" to update your local branch)
#
nothing to commit, working directory clean
username@workstation:~/work$ git rebase
First, rewinding head to replay your work on top of it...
Fast-forwarded master to refs/remotes/origin/master.
# On branch master
nothing to commit, working directory clean
将分支指针移动到HEAD:
git branch -f master
你的分支主机已经存在,所以Git不允许你覆盖它,除非你使用…-f(这个参数代表——force)
或者你可以使用rebase:
git rebase HEAD master
请自行承担风险;)
对于任何想要快进的人来说,如果不签出该分支,他们就不能进入另一个远程分支(包括它本身)。你可以:
git fetch origin master:other
如果您不在其他分支上,这基本上会将other的索引快速转发到origin/master。您可以通过这种方式快速前进多个分支。
如果你在另一个分支上工作了一段时间,并且想要从远程更新过时的分支到它们各自的头:
git fetch origin master:master other:other etc:etc
尝试git合并origin/master。如果你想确保它只做快进,你可以说git merge——ff-only origin/master。