假设我刚刚从远程存储库中提取或获取。
现在我想切换到另一个本地分支。
我可以对git checkout <branch_name>
或git switch <branch_name>
这样做,但如果它在origin
之后,这不会更新分支。
Git会告诉你在切换分支后使用git pull
,但这似乎是到服务器-这是多余的,因为我刚刚已经做了一个git fetch
从服务器获取所有更改。
所以我的问题是-是否有一种方法来更新本地分支,使其在git checkout
/git switch
之后与远程同步,而不使用git pull
?
顺便说一下,在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
时,已经与服务器同步了。
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 remoteremote-branch-name
(@{u}
只是分支上游的简写)
我个人更喜欢删除我不使用的本地分支。然后它将每次在正确的位置创建分支:-)
编辑:我猜你可以使用@{u}
语法创建一个git update
命令,如果你想要它:p(见git别名)
Git会告诉你在切换分支后使用Git pull,但这似乎是到服务器的——这是多余的,因为我刚才已经做了一个Git fetch从服务器获取所有更改。
如果您已经从远程下载并且远程命名为origin
,那么在git checkout mybranch
之后执行任何:
git merge origin/mybranch
git merge --ff-only origin/mybranch
git rebase origin/mybranch
你可能还想跟踪这个分支:
git branch --set-upstream-to=origin