Git Fetch vs Git Fetch Origin

时间:2017-11-24 08:43:18

标签: git version-control

我想获取一个远程分支,然后在我与某人共享时,将当前工作分支重新绑定。通常我会这样做:

git fetch

git rebase origin/branch_im_working_on

这似乎工作正常,但它似乎从远程存储库中获取所有分支。所以我环顾四周找到了这个:

git fetch origin branch_im_working_on

当我这样做时,git告诉我它取了HEAD然后尝试做:

git rebase origin/branch_im_working_on

git告诉我,我是最新的,即使我知道有更改被推送到遥控器,也无所事事。

如果我尝试:

git rebase origin branch_im_working_on

我遇到了很多合并冲突,所以不得不重新使用原始命令让我的分支更新:

git fetch

git rebase origin\branch_im_working_on

有人可以帮我理解这里发生的事情吗?

1 个答案:

答案 0 :(得分:1)

Streamgit fetch

之间的差异
  • 如果git repo只有一个远程git fetch origin(你可以通过origin检查遥控器),这两个命令的工作原理相同。
  • 如果git repo包含多个遥控器,例如有遥控器git remote -voriginupstream将从遥控器git fetchorigin获取所有更改。 upstream只会从远程git fetch origin获取更改。

此外,如果您只想从遥控器获取某个分支,则可以使用origin。例如git fetch remotename branchname只会从源git fetch origin branch_im_working_on获取更改。

重新设置远程分支顶部的本地更改:

假设提取历史记录在获取后显示如下:

branch_im_working_on

如果您希望在…---A---B---C---D branch_im_working_on \ E---F origin/branch_im_working_on (最新提交)的顶部进行本地更改(提交C并提交D),则以下任何一个命令都可以正常工作:

origin/branch_im_working_on

然后提交历史记录将是:

git rebase origin branch_im_working_on
git rebase origin/branch_im_working_on
git fetch origin branch_im_working_on --rebase

命令…---A---B---E---F---C---D branch_im_working_on | origin/branch_im_working_on 无法正常工作(适用于Windows操作系统),因为git rebase origin\branch_im_working_on不是有效分支(既不是本地分支也不是跟踪分支)。