在一个分支上开发了很长一段时间后,我切换到了master。日志显示:

你的分支比“origin/master”慢了167次提交,并且可以快进。

我试着:

git checkout HEAD

它没有任何效果。这是因为我在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

其他回答

如果你站在不同的分支上,想要签出master的最新版本,你也可以这样做

git checkout -B master origin/master

git checkout master
git pull

应该做这份工作。

每次当你在不同于master的分支上工作时,你都会得到“你的分支落后”消息,有人对master进行了更改,而你git拉。

(branch) $ //hack hack hack, while someone push the changes to origin/master
(branch) $ git pull   

现在,源/主引用被拉出,但您的主引用没有与其合并

(branch) $ git checkout master
(master) $ 

现在master在origin/master后面,可以快速前进了

this will pull and merge (so merge also newer commits to origin/master)
(master) $ git pull 

this will just merge what you have already pulled
(master) $ git merge origin/master

现在你的master和原点/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

要将当前本地跟踪器分支移动到最新的远程状态之上,需要重新设置本地跟踪器分支:

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在重置操作之前指向的散列(通常是明显的),并将分支硬重置到该散列。

将分支指针移动到HEAD:

git branch -f master

你的分支主机已经存在,所以Git不允许你覆盖它,除非你使用…-f(这个参数代表——force)

或者你可以使用rebase:

git rebase HEAD master

请自行承担风险;)