起点:我已经从master
和本地提交创建了一个分支。在我的分支工作期间,其他提交已经PR [{1}} ...
我在本地做的是master
,git checkout master
,然后结帐我的分支和git pull
我的理解是 - 在这一点上 - 我在分支上工作时所做的所有提交都将在“{1}}提交之后”应用。
我对git rebase master
的理解是它如上所述。我的问题是(假设这是正确的)master
如何知道我正在重新定位哪个分支?
在上面的步骤中,我已经重新定位到git pull --rebase
的{{1}},而大多数git pull --rebase
解释似乎都集中在对相同的提交时的重新定位上分支(不是原始HEAD
)。
我的典型步骤,明确:
master
问题:可以/应该将上述步骤更改为:
git pull --rebase
答案 0 :(得分:1)
可以设置分支以跟踪上游分支。
git branch --set-upstream my_branch origin/master
如果在创建分支时执行此操作,则不需要这样做:
git checkout -b my_branch origin/master
设置上游分支后,您可以查看my_branch
并执行git pull -r
。对于上述两种情况,它将在origin/master
上重新定位。
您可以将分支与其跟踪的上游分支一起列出:
git branch -vv
如果您希望feature/my-branch
跟踪origin/feature/my-branch
,我建议您按照典型步骤进行更改:
git checkout -b feature/my-branch
为:
git checkout -b feature/my-branch origin/feature/my-branch
请注意git checkout -b feature/my-branch
等于git checkout -b feature/my-branch HEAD
。换句话说,创建分支以指向您已签出的提交且没有上游分支集。
答案 1 :(得分:1)
在您当前的程序中,您将master
留在origin/master
(因为您正在分支机构工作)。然后,当您拉动时,生成的合并是快进的,然后您可以rebase
将您的分支master
保存到--rebase
以保持线性历史(如果您涉及到这种情况)。
你可以进行--rebase
拉动,它会完全相同,因为你不会处于master
有意义的情况。在提取--rebase
时,master
会更改提取<{1}}中提交而不是origin/master
中提取的内容 - 并且在您的方案中没有。
--rebase
让你做的不是首先创建分支,而是以线性历史结束(如果你是那种东西)。让我们说而不是
A -- B -- C <--(master)(origin/master)
\
D -- E -- F <--(branch)
你改为
A -- B -- C <--(origin/master)
\
D -- E -- F <--(master)
因为你直接在master上完成了你的工作。现在,如果你做了“正常”pull
,你就会得到
A -- B -- C ---- X ---- Y <--(origin/master)
\ \
D -- E -- F -- M <--(master)
但是如果您使用git pull --rebase
,那么拉动会将本地master
重新定位到新提取的origin/master
上,所以你得到了
A -- B -- C -- X -- Y <--(origin/master)
\
D -- E -- F <--(master)
这与您在分支上执行D..F
时获得的线性历史记录相同,并且在pull
X..Y
master
{{1}}之后自行重新定位。