我想获取一个远程分支,然后在与某人共享时根据该分支重新调整我当前的工作分支。通常我会这样做:
git fetch
git rebase origin/branch_im_working_on
这似乎工作正常,但它似乎从远程存储库获取所有分支。所以我环顾四周,发现了这个:
git fetch originbranch_im_working_on
当我这样做时,git 告诉我它获取了 HEAD,然后尝试执行以下操作:
git rebase origin/branch_im_working_on
git 告诉我,我是最新的,即使我知道有更改推送到远程,也没有什么可做的。
如果我尝试这样做:
git rebase originbranch_im_working_on
我遇到了很多 merge 冲突,因此不得不求助于原始命令来使我的分支保持最新状态:
git fetch
git rebase origin\branch_im_working_on
有人可以帮助我理解这里发生了什么吗?
最佳答案
git fetch
和 git fetch origin
之间的区别
- 如果 git 仓库只有一个远程
来源
(您可以通过git remote -v
检查远程),则这两个命令的工作方式相同。 - 如果 git 存储库包含多个 Remote ,例如有 Remote
origin
和upstream
。git fetch
将从远程origin
和upstream
获取所有更改。git fetch origin
只会从远程origin
获取更改。
此外,如果您只想从远程获取某个分支,可以使用git fetch Remotename Branchname
。例如git fetch originbranch_im_working_on
只会从originbranch_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
但是命令git rebase origin\branch_im_working_on
无法工作(对于Windows操作系统),因为origin\branch_im_working_on
不是有效的分支(既不是本地分支,也不是跟踪分支)。
关于Git Fetch 与 Git Fetch Origin,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47469380/