我有一个包含数百个新文件和不同文件的分支,我只想将其中的十几个合并到我的发布分支中。我尝试运行一个没有提交的普通 git merge,它自动暂存了数百个我不想要的文件(除了发现几十个需要手动合并的冲突。)然后我尝试做一个 git revert 来取消暂存所有自动合并的文件文件,只需将我想要的那些添加回索引,但这也会中止合并并将所有冲突标记留在文件中。我以为我可以只运行合并工具,但它现在无法识别冲突标记...
我是在以完全错误的方式解决这个问题……还是我遗漏了什么?
就像使用一样简单git reset
。我正在使用git stash pop
并发生合并冲突,它还上演了一些由我更改并合并的文件。我使用以下命令解决了冲突并取消了所有文件:
git reset HEAD <file_1> <file_2> ... <file_n>
这个问题有点模棱两可。我会尝试改写它并相应地回答。假设您只想合并 branchA 中的文件(file2,file3):
1)获取分支提交的树sha1:
git cat-file -p branchA
2)检查文件2和文件3在该树下的更改:
git reset <sha1> -- file2 file3
3)提交此更改:
git commit -m 'Merge of branchA'
如果您已经向 staging 发送消息,请执行(以防所有需要的更改都提前提交): git reset --hard
要恢复精确的合并提交,并将所有更改分阶段进行,可以使用以下命令。
git revert -m 1 <commit-hash>