是否有一个git merge命令将另一个分支合并到当前分支中,但是不会更改任何文件?
或者换句话说,我想在分支A上创建一个新的提交:
考虑两个长期运行的分支,一个矿井,一个矿井。我想将他们的分支合并到我的分支上,但由于代码实际上是这样做的,我想将它标记为合并。下次我再次合并时,它将不会回溯到将在此过程中创建的合并提交。
我知道-X mine
/ --strategy-option=mine
,但只有在发生实际合并冲突时才会启动。不应在我的分支上应用添加/删除的文件。
答案 0 :(得分:2)
如果您完全确定不需要theirs
,则可以在不提交的情况下执行merge
,然后按原样结帐mine
,然后完成合并提交。
git merge --no-commit their-branch
git rm . -rf
git checkout HEAD -- .
git commit
git checkout HEAD -- .
将覆盖任何冲突或自动修改的文件。此时执行git status
应该会发现没有任何内容被修改,但您仍处于合并中。 commit
然后完成您的非合并合并。
git rm . -rf
最初,我已经省略了此工作流程的任何部分,可以从theirs
删除全部新文件,因为git checkout HEAD -- .
会保留这些文件。
行git rm . -rf
可确保删除当时git
已知的每个文件。这将包括删除theirs
但不存在ours
中存在的任何文件。然后,我们将checkout
仅ours
中的那些,并提交结果为空的合并。
答案 1 :(得分:2)
您可以使用所需的详细信息制作自己的提交对象。以下是我手动操作的方法
git checkout A
A
分支 git cat-file commit A > mine.commit
git rev-parse B
4.
在您喜欢的文字编辑器中修改mine.commit
tree
行保持不变 - 这是此提交时存储库的状态parent
行保持不变 - 这是您的A分支的提交ID parent
行,其中包含从3.
上方打印的哈希码author
,committer
行。更改底部的提交消息 cat mine.commit | git hash-object -t commit --stdin -w
git merge --ff-only <output from hash-object above>
A
分支应该相应地更新