Git 合并覆盖所有更改

Git merge overwrites all changes

我有两个分支:A 和 B 我想将其他人在分支 B 上所做的更改合并到我的本地分支 A,但我想选择哪些更改是安全的(我想应用一些来自其他分支的更改和一些来自我在我的分支上所做的更改)。

我正在尝试:

git merge B

带有不同选项集的命令,如 --no-ff、-X theirs/ours 等,但每个策略都会覆盖我在分支 (A) 上所做的所有更改。

如果您想在分支 A 的更改之上应用分支 B 的特定提交,这里有一个简单的方法:

git checkout A
git cherry-pick <commit-hash>

您要应用的提交的十六进制字符串标识符在哪里。您可以通过查看分支 B:

上的 git 日志来找到这些哈希值
git checkout B
git log

但是请记住,这不会将分支 B 合并到分支 A。分支 B 在被挑选出来后将保持原样。如果您想在分支 A 之上应用来自分支 B 的 所有 更改,同时摆脱分支 B,请尝试执行 git 变基:

git checkout A
git rebase B

这样做是在分支 A 之上重播分支 B 的整个提交历史,使它们本质上成为一个分支。

您可以使用 --no-commit 选项在创建合并之前有机会检查它:

git merge --no-commit
# review changes ...
# once you are satisfied with the content :
git commit    # this will create the merge commit