gpt4 book ai didi

git - 在 git 中以相反的父顺序创建 merge 提交

转载 作者:太空狗 更新时间:2023-10-29 13:54:38 24 4
gpt4 key购买 nike

Weblate我们有时会创建最终推送到上游存储库的 merge 提交。我希望它们是用不同顺序的父提交构建的,这样像 GitHub 这样的工具在显示 merge 提交时会显示 Weblate 更改而不是上游存储库中的更改(它们总是将第一个父项视为当前分支,将第二个父项视为 merge 的分支).

你可以看到例子here - 这几乎是 git diff 4a4f5aaa8...bb81599ac,而我想得到 git diff bb81599ac...4a4f5aaa8。所以我需要的是在 merge 提交中有不同顺序的父提交。

目前的运作方式:

git clone https://github.com/WeblateOrg/weblate.git
edit translations
git commit -a -m 'Translated using Weblate'
git remote update origin
git merge orgin/master
# Now we have merge commit in case there are changes in upstream meanwhile

作为一个明显的解决方法(而不是普通的 git merge orgin/master),我们可以创建临时分支,在那里进行 merge 然后 merge 回来:

# Create local branch for upstream
git branch tmp origin/master
# Checkout upstream branch
git checkout tmp
# Merge current Weblate changes, this can lead to conflict
git merge master
# Checkout branch with Weblate changes
git checkout master
# Merge temporary branch (this is fast forward so does not create merge commit)
git merge tmp
# Delete temporary branch
git branch -d tmp

这样 merge 提交将以我想要的方式构建,但是这样做似乎很复杂。有没有更简单的方法来实现相同的目标?

最佳答案

您的方法可能是最好且最不容易出错的方法,因为它只使用陶瓷命令。您的另一个选择是使用一些管道,这将需要一些散列杂耍。

在没有提交的情况下 merge ,使用 squash 选项覆盖 no-commit 对象,如下所示:

git checkout master
git merge --squash branch

然后使用 git-write-tree 为您的索引创建一个树对象并使用 git-commit-tree 手动制作您的提交:

git write-tree
git commit-tree -p parent1 -p parent2 -m "message" <tree-hash>

这个方法应该是可编写脚本的,没有太多困难。

关于git - 在 git 中以相反的父顺序创建 merge 提交,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48302475/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com