git rebase --onto 可以与标签一起使用吗?

问题描述 投票:0回答:1

经过一番思考,我认为我有一个与文档中类似的变基情况,尽管有其他分支名称。

这里的文档说要申请

git rebase --onto master next topic

获得

在我的例子中,我有一个名为“develop”的分支,其中图中的 master 所在位置,以及一个名为“MyFeature”的分支,其中图中的 topic 所在位置。在“下一个”所在的点上,我没有分支,但我有一个标签“OLDdevelop”

我可以在此处应用 git rebase --onto 而无需在“下一个”位置明确创建分支吗?

git rebase
1个回答
0
投票
git rebase --onto <newbase> <upstream> <branch>

这里有一些伪命令解释了

git rebase
的工作原理。

# Checkout <branch>
git checkout ${branch}

# Reset it to <newbase>
git reset ${newbase} --hard

# Get the commits that are to be applied
commits=$(git rev-list ${upstream}..${branch})

# Apply these commits onto the newbase one by one
for commmit in $commits;do
    git cherry-pick $commit
done

上述伪命令中除了第一个参数之外,这 3 个参数是分支、标签、提交还是其他 commit-ish 都没关系。无论如何,都会应用提交,并创建一个新的日志图。

无论

git checkout $branch

 是否为分支,
$branch
的行为都不同。

# A branch in short format
git checkout master

# A branch in other formats, or a non-branch ref
git checkout refs/heads/master  # a branch in long format
git checkout refs/tags/foo  # a tag in long format
git checkout foo  # a tag in short format
git checkout 5b74449ba231d4750743c2b5c00ddc2535fab38e  # a commit
git checkout refs/changes/22/339822/1  # a Gerrit ref
git checkout refs/merge-requests/99/head  # a Gitlab merge-request head

第一个切换到分支

master
,其他则通向分离的 HEAD。

topic
指向提交
a4f6f0e8cabe00011f5fc27176284c30575c136f

之前

git-rebase

* 8a73f8b (master) e
* 0271872 d
* 5b53145 c
| * a4f6f0e (topic) n
| * 046efc5 m
| * 544582f (next) g
| * f6516cf f
|/
* 7f2ea62 b
* 42dee2c root

git-rebaes
之后,

# Case 1
git rebase --onto master next topic

git log --oneline --graph --decorate master topic next
* 5b74449 (HEAD -> topic) n
* 05f4607 m
* 8a73f8b (master) e
* 0271872 d
* 5b53145 c
| * 544582f (next) g
| * f6516cf f
|/
* 7f2ea62 b
* 42dee2c root



# Case 2
git rebase --onto master next a4f6f0e8cabe00011f5fc27176284c30575c136f
git log --oneline --graph --decorate HEAD master topic next

* 5b74449 (HEAD) n
* 05f4607 m
* 8a73f8b (master) e
* 0271872 d
* 5b53145 c
| * a4f6f0e (topic) n
| * 046efc5 m
| * 544582f (next) g
| * f6516cf f
|/
* 7f2ea62 b
* 42dee2c root

两者都可以。假设最后一次提交是在命令之后的

5b74449
。在情况 1 中,您不需要做额外的工作。在情况 2 中,您需要将
topic
重置为
5b74449
。否则,
topic
仍指向
a4f6f0e8cabe00011f5fc27176284c30575c136f

git checkout topic
git reset abc123 --hard
git log --oneline --graph --decorate master topic next

* 5b74449 (HEAD -> topic) n
* 05f4607 m
* 8a73f8b (master) e
* 0271872 d
* 5b53145 c
| * 544582f (next) g
| * f6516cf f
|/
* 7f2ea62 b
* 42dee2c root

在你的情况下,无论

$next
是分支、标签、提交还是任何其他提交,都是一样的。

© www.soinside.com 2019 - 2024. All rights reserved.