C.T*_*ale 1 git version-control github rebase branching-and-merging
假设我有这种情况,是branch1从master. 经过几次提交后branch1,我还创建了另一个分支,称为branch2. 此后,其他人在 中犯了 (D) 罪master。现在我想branch1用master. 但是既然branch2的branch1哈希值已经被重写并且现在branch2丢失了呢?
master: A - B - C - D
\
branch1: E - F
\
branch2: G - H
Run Code Online (Sandbox Code Playgroud)
在 master 之上对分支 1 进行变基后,分支 2 就会丢失,因为变基重写了分支 1 的哈希值。
master: A - B - C - D
\
branch1: E - F
branch2: G - H
Run Code Online (Sandbox Code Playgroud)
在这种情况下,是否有正确的方法可以在branch1之上再次使用git rebasebranch2?
branch2没有丢失,并且您的第二个 ASCII 艺术不正确。在对branch1进行变基之后,你的历史记录现在实际上看起来像这样:
master: A - B - C - D
\ \
branch1: \ E' - F'
\
branch2: E - F - G - H
Run Code Online (Sandbox Code Playgroud)
提交E和F未移动,但创建了提交的副本。E并且F仍然与变基之前完全相同(提交一旦创建就永远无法修改)。G的父级仍然指向F,因此F必须存在。
弄清楚这一点后,让我们看一下如何进入的两个G..H答案F':
git rebase --onto "F'" F branch2。适用于较旧的 Git 版本,并且可以在重新设置分支 1 的基础后执行。git rebase --update-refs master branch2。仅适用于最新的 Git 版本,并且必须执行此操作,而不是对branch1 进行变基:它将对所有提交进行变基,同时将引用(例如分支)移动到新的、变基的提交。