You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在Git中创建父提交顺序反转的合并提交(Weblate场景)

如何简便调换Git合并提交的父提交顺序

你完全不用再折腾那些繁琐的临时分支操作啦,这里有两种更简洁的方法,能帮你快速调整合并提交的父顺序,让GitHub这类工具优先展示Weblate的翻译变更:

方法一:简化分支切换法

这个方法比你原来的方案少了分支删除的步骤,操作更顺畅:

# 先拉取上游仓库的最新代码
git fetch origin

# 切换到上游的master分支
git checkout origin/master

# 合并你的本地master分支(包含翻译提交),生成父顺序正确的合并提交
git merge --no-ff master -m "Translated using Weblate"

# 切回本地master分支,把它重置到刚生成的合并提交上
git checkout master
git reset --hard HEAD@{1}

# 最后推送到上游仓库即可
git push origin master

方法二:无需切换分支的高效技巧

如果你不想来回切换分支,这个命令行组合操作更适合你:

# 第一步还是拉取上游最新代码
git fetch origin

# 执行合并操作但不提交,要是有冲突就手动解决,解决完记得git add .
git merge --no-ff --no-commit origin/master

# 把合并后的文件树状态保存下来
MERGED_TREE=$(git write-tree)

# 撤销刚才未提交的合并操作
git merge --abort

# 创建一个新的合并提交,这里特意把上游master设为第一个父,你的本地提交设为第二个父
NEW_COMMIT=$(git commit-tree $MERGED_TREE -p origin/master -p HEAD -m "Translated using Weblate")

# 把本地master分支指向这个新的合并提交
git reset --hard $NEW_COMMIT

# 推送到上游仓库
git push origin master

为什么这两种方法管用?

GitHub这类工具会默认把合并提交的第一个父节点当作当前分支,第二个父节点当作被合并的分支。我们调整父顺序后,工具展示的差异就会是你的翻译变更相对于上游仓库的内容,正好符合你想要的效果。

对比你之前用临时分支的方案,这两种方法要么简化了步骤,要么完全避免了分支切换,操作效率提升不少。

内容的提问来源于stack exchange,提问作者Michal Čihař

火山引擎 最新活动