假设我刚刚从远程存储库中提取或获取。
现在我想切换到不同的本地分支。
我可以用
git checkout <branch_name>
或 git switch <branch_name>
来做,但是如果它落后于 origin
.,这不会更新分支
Git 会告诉你在切换分支后使用
git pull
,但这似乎是到服务器 - 这是多余的,因为我已经做了一个 git fetch
刚刚从服务器获取所有更改。
所以我的问题是 - 有没有办法更新本地分支,以便在
git checkout
/ git switch
之后与远程同步,而不使用 git pull
?
FWIW,在 Mercurial 中更合乎逻辑,
hg pull
获取所有远程更改,hg update
从远程更新本地,无需再次访问服务器。
假设您想更新本地分支而不做明确的
git pull
,您可以尝试以下操作:
# from master
git fetch origin
git checkout feature
git merge origin/feature
上面首先做一个
git fetch
更新你的本地跟踪分支origin/feature
。然后它会与您本地 feature
分支的跟踪分支合并。这基本上是 git pull
的第二步,这是一个获取,然后是与跟踪分支的合并。
假设我刚刚从远程存储库中拉取或获取。 现在我想切换到不同的本地分支。
假设你打算切换到的分支是
mybranch
.
然后如果你通过说来获取
git fetch origin mybranch:mybranch
那就没有第二步了;当您切换到
mybranch
时,它将already与服务器保持同步。
Git 等价于
hg pull
是 git fetch
.
git pull
是一个方便的命令,用于“git fetch
后跟我设置的任何内容,这是我当前结帐后通常要做的事情”。要在不重新获取的情况下对其他分支执行您想做的事情,只需在不重新获取的情况下对其他分支执行您想做的事情:
git pull
git checkout otherbranch
git merge
将在获取后执行您通常对当前结帐所做的任何操作,然后切换到
otherbranch
并直接进行合并。
git pull 相当于:
git fetch
git merge @{u}
只需换到分支并使用
git merge @{u}
或git merge remote\remote-branch-name
(@{u}
只是上游分支的简写)
我个人更喜欢只删除我不使用的本地分支。然后它每次都会在正确的位置创建分支:-)
edit:我猜你可以使用
@{u}
语法来创建一个 git update
命令,如果你想要的话:P(见 git aliases)
Git 会告诉你在切换分支后使用 git pull,但这似乎是到服务器 - 这是多余的,因为我刚才已经执行了 git fetch 以从服务器获取所有更改。
如果您已经从遥控器下载并且遥控器被命名为
origin
然后在git checkout mybranch
之后执行任何one:
git merge origin/mybranch
git merge --ff-only origin/mybranch
git rebase origin/mybranch
您可能还想跟踪这个分支:
git branch --set-upstream-to=origin