提问人:user5855178 提问时间:10/13/2023 最后编辑:isherwooduser5855178 更新时间:10/14/2023 访问量:62
我可以在不先签出其中一个分支的情况下合并 Git 分支吗?
Can I merge Git branches without checking one of them out first?
问:
无论您签出哪个分支,有没有办法合并分支?Git 是否支持与 --source 和 --destination 标志合并?
我正在寻找一个简单的命令来支持像这样简单的东西:
git merge --sourcebranch --destinationbranch
不得不在分支之间移动以合并内容非常尴尬。我宁愿合并分支,而不管我现在签出的是哪个分支。
答:
3赞
knittl
10/14/2023
#1
您可以使用低级 git merge-tree
命令。手册页甚至在使用说明部分有一个示例,说明您正在尝试执行的操作:
NEWTREE=$(git merge-tree --write-tree $BRANCH1 $BRANCH2)
test $? -eq 0 || die "There were conflicts..."
NEWCOMMIT=$(git commit-tree $NEWTREE -p $BRANCH1 -p $BRANCH2)
git update-ref $BRANCH1 $NEWCOMMIT
把它变成一个 shell 函数,你就可以开始了:
my_merge() {
NEWTREE=$(git merge-tree --write-tree "$1" "$2")
if [ "$?" -ne 0 ]; then
echo 'There were conflicts...' >&2
return 1
}
NEWCOMMIT=$(echo "Merge branch '$2' into $1" | git commit-tree "$NEWTREE" -p "$1" -p "$2")
git update-ref "$1" "$NEWCOMMIT"
}
并使用它:
my_merge first_branch second_branch
first_branch
将被转发到新的合并提交; 保持不变。如果存在冲突,则操作将中止,并且不会发生任何操作。second_branch
评论
0赞
TTT
10/14/2023
这太棒了。阅读这个答案就像看一个伟大的魔术,然后看一个解释它是如何表演的视频一样。:)
1赞
knittl
10/14/2023
@TTT文档中存在:“日志消息是从标准输入中读取的,除非给出了 -m 或 -F 选项。但我也错过了;应该在答案中提到
1赞
knittl
10/14/2023
@TTT :D好吧,它有效™,它只是坐在那里等待用户输入提交消息。我更新了该函数,以根据分支名称提供默认提交消息:)
0赞
TTT
10/14/2023
(我删除了我的其他评论,因为你已经修复了它。
0赞
TTT
10/14/2023
现在你的答案比 Git 文档更好。;)
评论
git help worktree