很多时候,git rebase
是在某个分支的上下文中使用的。例如,如果我想要将 feature
分支的基础移动到 master
分支的顶部(基于最新提交)- 教程会这样说:
git checkout feature
git rebase master
在这样的教程之后,会有很多问题。例如:如何在不检出的情况下执行相同的操作?如何使用
--onto
选项执行相同的操作?--onto
和普通rebase之间有什么区别?我可以传递一系列的提交还是必须是整个分支?等等...我已经多次阅读了man页面,但仍然存在很大的差距。
因此,主要问题是:Git如何解析不同场景中的参数,以及我应该如何在我的头脑中解释/想象它们?例如:
git rebase master
git rebase feature master
git rebase --onto master feature
git rebase HEAD~4 HEAD~2
git rebase --onto HEAD~4 HEAD~2
假设我们有以下仓库:
Z -- W (HEAD, test-branch*)
A -- B -- C -- D -- E (master)
\
1 -- 2 -- 3 (feature)
test-branch is checked out.
upstream
是什么意思吗?我尝试翻译了一下这个词,但没有得到有用的信息。 - Timur Fayzrakhmanovupstream
是一个分支所分支出来的源分支。upstream
就像逆流而上的河流。这里的水流代表时间。如果你开始沿着历史记录向另一个分支走回去,那么你就是在向上游走。在我的例子中,master
是topic
的上游。对于 rebase 而言,Git 会将branch-to-rebase
中所有不在upstream
中的更改放在onto
的顶部。 - Schwern