git pull --rebase 解释
git pull --rebase explanation
起点:我从 master
创建了一个分支并在本地进行了提交。在我的分支工作期间,其他提交已被 PR 进入 master
...
然后我会在本地做的是 git checkout master
、git pull
,然后检查我的分支和 git rebase master
我的理解是 - 在这一点上 - 我在我的分支上工作时所做的所有提交都将被应用 "after" 那些 master
提交。
我对 git pull --rebase
的理解是它的作用与我上面描述的一样。我的问题是(假设这是正确的)git pull --rebase
怎么知道 我要重新定位哪个分支?
在上面的步骤中,我已经重新定位到 master
的 HEAD
,而大多数 git pull --rebase
解释似乎都集中在对 相同的提交的重新定位上分支(不是原来的master
)。
我的典型步骤,明确:
git clone <path>
cd <dir>
git checkout -b feature/my-branch
<make changes>
git add .
git commit -m "some message"
git checkout master
git pull --all
git checkout feature/my-branch
git rebase master
**git push --set-upstream origin feature/my-branch**
问题:Can/Should我把上面的步骤改成:
git clone <path>
cd <dir>
git checkout -b feature/my-branch
**git push --set-upstream origin feature/my-branch**
<make changes>
git add .
git commit -m "some message"
git pull -r
可以设置一个分支来跟踪上游分支。
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
。换句话说,创建的分支指向您已检出且未设置上游分支的提交。
在您当前的程序中,您将 master
留在 origin/master
(因为您在分支机构工作)。然后,当您拉动时,生成的合并是 fast-forward,然后您可以 rebase
您的分支到 master
以保持线性历史(如果您喜欢那种事情)。
你可以做一个 --rebase
pull,它的工作原理完全一样,因为你不在 --rebase
有意义的情况下。拉动 master
时,--rebase
会更改拉动对 在 master
中的提交所做的更改,但不会在 origin/master
中更改 - 在您的场景中是 none.
--rebase
让您做的不是首先创建分支,而是仍然以线性历史结束(如果您喜欢那种事情)。让我们说而不是
A -- B -- C <--(master)(origin/master)
\
D -- E -- F <--(branch)
你反而有
A -- B -- C <--(origin/master)
\
D -- E -- F <--(master)
因为您直接在 master 上完成了工作。现在如果你做了 "normal" pull
你会得到
A -- B -- C ---- X ---- Y <--(origin/master)
\ \
D -- E -- F -- M <--(master)
但是如果你使用 git pull --rebase
那么 pull 会将本地 master
rebase 到 newly-fetched origin/master
上,所以你得到
A -- B -- C -- X -- Y <--(origin/master)
\
D -- E -- F <--(master)
这与您通过在分支上执行 D..F
并在 pull
将 X..Y
转换为 master
后自己重新设置基准得到的线性历史相同。
起点:我从 master
创建了一个分支并在本地进行了提交。在我的分支工作期间,其他提交已被 PR 进入 master
...
然后我会在本地做的是 git checkout master
、git pull
,然后检查我的分支和 git rebase master
我的理解是 - 在这一点上 - 我在我的分支上工作时所做的所有提交都将被应用 "after" 那些 master
提交。
我对 git pull --rebase
的理解是它的作用与我上面描述的一样。我的问题是(假设这是正确的)git pull --rebase
怎么知道 我要重新定位哪个分支?
在上面的步骤中,我已经重新定位到 master
的 HEAD
,而大多数 git pull --rebase
解释似乎都集中在对 相同的提交的重新定位上分支(不是原来的master
)。
我的典型步骤,明确:
git clone <path>
cd <dir>
git checkout -b feature/my-branch
<make changes>
git add .
git commit -m "some message"
git checkout master
git pull --all
git checkout feature/my-branch
git rebase master
**git push --set-upstream origin feature/my-branch**
问题:Can/Should我把上面的步骤改成:
git clone <path>
cd <dir>
git checkout -b feature/my-branch
**git push --set-upstream origin feature/my-branch**
<make changes>
git add .
git commit -m "some message"
git pull -r
可以设置一个分支来跟踪上游分支。
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
。换句话说,创建的分支指向您已检出且未设置上游分支的提交。
在您当前的程序中,您将 master
留在 origin/master
(因为您在分支机构工作)。然后,当您拉动时,生成的合并是 fast-forward,然后您可以 rebase
您的分支到 master
以保持线性历史(如果您喜欢那种事情)。
你可以做一个 --rebase
pull,它的工作原理完全一样,因为你不在 --rebase
有意义的情况下。拉动 master
时,--rebase
会更改拉动对 在 master
中的提交所做的更改,但不会在 origin/master
中更改 - 在您的场景中是 none.
--rebase
让您做的不是首先创建分支,而是仍然以线性历史结束(如果您喜欢那种事情)。让我们说而不是
A -- B -- C <--(master)(origin/master)
\
D -- E -- F <--(branch)
你反而有
A -- B -- C <--(origin/master)
\
D -- E -- F <--(master)
因为您直接在 master 上完成了工作。现在如果你做了 "normal" pull
你会得到
A -- B -- C ---- X ---- Y <--(origin/master)
\ \
D -- E -- F -- M <--(master)
但是如果你使用 git pull --rebase
那么 pull 会将本地 master
rebase 到 newly-fetched origin/master
上,所以你得到
A -- B -- C -- X -- Y <--(origin/master)
\
D -- E -- F <--(master)
这与您通过在分支上执行 D..F
并在 pull
将 X..Y
转换为 master
后自己重新设置基准得到的线性历史相同。