【问题标题】:Is it possible to merge from one branch to another in git with only certain files?是否可以仅使用某些文件在 git 中从一个分支合并到另一个分支?
【发布时间】:2016-07-15 23:15:36
【问题描述】:

假设我有两个分支

  • 一个
  • B

我想将A 中的更改合并到B。但是,A 有一些我更改的文件以及其他人更改的一些文件。例如,A 中有 2 个文件发生了更改。

  • path/to/JavaFile1.java(我更改了这个文件)
  • path/to/another/JavaFile2.java(另一个用户更改了这个文件)

在从A 合并到B 时,我发现与其他人更改的文件存在冲突(在运行示例中为JavaFile2.java)。现在,我希望合并继续进行,以便

  • “忽略”或“跳过”其他人更改的文件(我不知道如何解决该冲突)
  • 我希望合并是这样的,当其他人合并时,他们也必须处理冲突并决定做什么。

我不确定使用minetheirs 的解决方案是否合适,因为在下一次合并时,它可能永远不会再次考虑冲突(git 会在未来的合并中将冲突标记为已解决)。

我想我也可以选择樱桃,但在我们的团队中,我们有一个政策是 merge 向前(例如从 AB)和樱桃向后选择(例如从 B 到 @ 987654334@).

可以按照我说的做吗?我们还有一项政策,即开发人员必须合并他们自己的提交,但不幸的是,该开发人员在接下来的两周(假期)内不可用。

【问题讨论】:

    标签: git merge


    【解决方案1】:

    对我来说,处理此问题的概念上最简单的方法是执行合并,然后将有问题的文件重置为B 中的提交,该提交位于合并前该分支的HEAD

    用于重置其他用户修改的文件的命令是:

    git checkout <SHA-1> path/to/another/JavaFile2.java
    

    其中&lt;SHA-1&gt; 是您进行合并之前在B 上最近提交的哈希(即您要保留的版本)。

    如果在合并过程中这个文件有合并冲突,那么你可以使用上面的命令重置它并提交。如果合并完成没有冲突,那么你仍然可以运行上面的命令,你可以修改合并提交:

    git add path/to/another/JavaFile2.java
    git commit --amend
    

    【讨论】:

    • 我可以改用git checkout HEAD path/to/another/JavaFile2.java 吗?使用这种方法,如果有人试图从A 合并到B,git 仍然会强制用户解析第二个文件正确(JavaFile2.java)?
    • @JaneWayne 如果合并通过提交自动完成,那么HEAD 将指向该新提交,而git checkout HEAD JavaFile2.java 将什么也不做。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多