Cn - 父提交。
Cn+1(green) - 本地提交。
Cn+1(黄色) - 同一分支中的另一个提交,但已推送到远程,但与本地提交具有相同的父级。
结果:我需要保存本地提交中的所有更改(绿色),但不要覆盖远程提交中的更改(黄色)。所以它看起来像保存本地和远程提交中相对于父级的更改,但绿色具有高优先级。
我不能用合并来做到这一点,因为它需要在交互模式下手动操作,我需要从 bash 自动完成。
假设您有一个分支,假设它被称为mybranch
,它指向 C(n+1),并且还有另一个分支some_branch
指向 C(n+3),然后生成图像中显示的结构,您可以运行
git checkout some_branch
git merge mybranch
另一种选择是将绿色 C(n+1) 移植到 C(n+3) 之上。你可以通过运行来做到这一点
git checkout some_branch
git cherry-pick some_branch..mybranch
在其中任何一个之后,您可以运行诸如git log --graph
检查提交历史记录之类的命令,然后如果您对它感到满意,则将git push
更改上传到远程服务器。
但是,请注意,一般来说,如果没有交互,这些都不能保证成功。根据在各种提交中所做的更改,可能存在 Git 无法自行解决的冲突。无论您选择如何组合提交,这都是可能的。
似乎它起作用了
PS我不使用它来合并代码,只有yaml格式的值
git fetch origin test
PARENT_COMMIT=$(git show --format='format:%H' --no-patch HEAD~1)
LAST_REMOTE_COMMIT=$(git log --all -n 1 --pretty='format:%H' HEAD..origin/test)
git diff --unified=0 $PARENT_COMMIT $LAST_REMOTE_COMMIT | git apply
git add file
git commit --amend --no-edit
LAST_LOCAL_COMMIT=$(git show --format='format:%H' --no-patch HEAD)
git checkout origin/test
git rebase $LAST_LOCAL_COMMIT --strategy recursive -X ours
git push origin test