Mat*_*t W 4 git rebase git-pull
起点:我已经创建了一个分支master并在本地进行了提交。在我的分支工作期间,其他提交已被公关到master......
然后我在本地要做的是git checkout master,git pull然后检查我的分支机构并git rebase master
我的理解是 - 此时 - 我在分支上工作时所做的所有提交都将在这些master提交“之后”应用。
我的理解git pull --rebase是它的作用正如我上面所描述的那样。我的问题是(假设这是正确的)如何知道git pull --rebase我正在基于哪个分支?
在上面的步骤中,我已经重新建立了HEADof 的基础master,而大多数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**
Run Code Online (Sandbox Code Playgroud)
问题:我可以/应该将上述步骤更改为:
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
Run Code Online (Sandbox Code Playgroud)
在当前的程序中,您离开master于origin/master(因为您在分支机构工作)。然后,当您拉动时,生成的合并是快进的,然后您可以rebase分支master以保持线性历史记录(如果您喜欢这类事情)。
你可以做一个--rebase拉动,它的工作原理完全相同,因为你没有处于--rebase有意义的情况。当 pull 时master,更改拉取对--rebase提交的操作,但不提交- 在您的场景中没有提交。masterorigin/master
让--rebase你做的不是首先创建分支,但仍然以线性历史结束(如果你喜欢那样的事情)。让我们说而不是
A -- B -- C <--(master)(origin/master)
\
D -- E -- F <--(branch)
Run Code Online (Sandbox Code Playgroud)
相反,你有
A -- B -- C <--(origin/master)
\
D -- E -- F <--(master)
Run Code Online (Sandbox Code Playgroud)
因为你直接在master上完成你的工作。现在如果你做了“正常”pull你会得到
A -- B -- C ---- X ---- Y <--(origin/master)
\ \
D -- E -- F -- M <--(master)
Run Code Online (Sandbox Code Playgroud)
但如果你使用的git pull --rebase话,拉取会将本地重新设置master为新获取的origin/master基础,所以你会得到
A -- B -- C -- X -- Y <--(origin/master)
\
D -- E -- F <--(master)
Run Code Online (Sandbox Code Playgroud)
D..F这与您在分支上执行并在pulling X..Yinto后自行重新设置基数所获得的线性历史相同master。