答案 0 :(得分:0)
什么分支孤儿提交属于? (Git,Github)
好吧,根据定义,孤立提交不属于任何分支(顺便说一句,说这个有点不对,更好的措辞是'哪些分支提交具有特定的提交在他们的等级链?' ),所以我想真正的问题是......
肯定是的。您可以使用有没有办法可以将这些提交合并到我选择的另一个分支中?
git cherry-pick
命令,quoting the docs,"应用某些现有提交引入的更改" 。以下是一个如何使用它的简单示例:
首先,初始化存储库:
> git init
> echo 1 > first.txt
> git add . && git commit -m "First commit"
[master (root-commit) a8871cd] First commit
1 file changed, 1 insertion(+)
create mode 100644 first.txt
然后,创建了孤立提交(最简单的方法是创建一个分支,将其推进一点,然后将其删除):
> git checkout -b branch-to-remove
Switched to a new branch 'branch-to-remove'
> echo 1 > cherry.txt
> git add . && git commit -m "Cherry commit 1"
[branch-to-remove 7cd90f8] Cherry commit 1
1 file changed, 1 insertion(+)
create mode 100644 cherry.txt
> echo 2 >> first.txt
> git add . && git commit -m "Cherry commit 2"
[branch-to-remove 8289dee] Cherry commit 2
1 file changed, 1 insertion(+)
> git checkout master
> git branch -D branch-to-remove
Deleted branch branch-to-remove (was 8289dee).
所以分支已经消失,但两个提交 - 7cd90f8和8289dee - 仍然存在。现在主分支正在进行:
> echo 3 >> first.txt
> git add . && git commit -m "Second commit"
[master e0c199e] Second commit
1 file changed, 1 insertion(+)
现在我们有一种你手中的情况:在某处应用了一些变化,我们需要将这些变化应用到当前分支上。对于简单的非冲突性更改,例如Cherry commit 1
中引入的更改,这是微不足道的:
> git cherry-pick 7cd90f8
[master 864dcbe] Cherry commit 1
1 file changed, 1 insertion(+)
create mode 100644 cherry.txt
重放提取的提交,应用更改,创建另一个提交,提高主分支的提示,生活是好的。但下一个会发生什么?
> git cherry-pick 8289
error: could not apply 8289dee... Cherry commit 2
hint: after resolving the conflicts, mark the corrected paths
hint: with 'git add <paths>' or 'git rm <paths>'
hint: and commit the result with 'git commit'
事实上,没有什么真正的糟糕:因为两个提交 - HEAD和被选中的一个 - 影响了同一个文件,那里发生了经典冲突。易于检查,易于修复;只是不要忘记git add
所有生成的文件,然后忘记git commit
。
请注意,由cherry-pick引起的提交仅具有单个父级(在这种情况下,它们与重新提交的提交相似)。