在一个分支上开发了很长一段时间后,我切换到了master。日志显示:
你的分支比“origin/master”慢了167次提交,并且可以快进。
我试着:
git checkout HEAD
它没有任何效果。这是因为我在master上签出了一个中间提交。
我怎样才能使主人保持头脑清醒?
在一个分支上开发了很长一段时间后,我切换到了master。日志显示:
你的分支比“origin/master”慢了167次提交,并且可以快进。
我试着:
git checkout HEAD
它没有任何效果。这是因为我在master上签出了一个中间提交。
我怎样才能使主人保持头脑清醒?
当前回答
要将当前本地跟踪器分支移动到最新的远程状态之上,需要重新设置本地跟踪器分支:
git fetch && git rebase
一般来说,快进和删除本地更改(硬重置)*:
git fetch && git checkout ${the_branch_name} && git reset --hard origin/${the_branch_name}
快进并保持本地更改(rebase):
git fetch && git checkout ${the_branch_name} && git rebase origin/${the_branch_name}
* -要撤消无意硬重置造成的更改,首先做git reflog。它以相反的顺序显示HEAD的状态。找到HEAD在重置操作之前指向的散列(通常是明显的),并将分支硬重置到该散列。
其他回答
要将当前本地跟踪器分支移动到最新的远程状态之上,需要重新设置本地跟踪器分支:
git fetch && git rebase
一般来说,快进和删除本地更改(硬重置)*:
git fetch && git checkout ${the_branch_name} && git reset --hard origin/${the_branch_name}
快进并保持本地更改(rebase):
git fetch && git checkout ${the_branch_name} && git rebase origin/${the_branch_name}
* -要撤消无意硬重置造成的更改,首先做git reflog。它以相反的顺序显示HEAD的状态。找到HEAD在重置操作之前指向的散列(通常是明显的),并将分支硬重置到该散列。
尝试git合并origin/master。如果你想确保它只做快进,你可以说git merge——ff-only origin/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 checkout master
git pull origin
将获取并合并origin/master分支(你可能会说git pull as origin是默认的)。
在我的方式,它返回所有改变的头,是最快的方式:
git fetch origin master
git reset --hard FETCH_HEAD
git clean -df