git合并两个提交

我不确定这是否是重复的,我不是git专家,所以原谅我可能看起来像一个愚蠢的问题。

我有一个文件。 我编辑它,保存并执行这些更改。

我忘了我已经完成了这个工作,并编辑了该文件的原始版本(恰好在另一个编辑器窗口中打开),保存并提交了一组不同的更改。

因此我有两个连续的提交。
我想生成一个git merge样式文件,并在两者之间产生冲突,以便我可以编辑并解决冲突。

Git认为它可以使用所有较新的文本并丢弃旧的文本。
我已经尝试了git mergegit merge -no-ff组合,但不能真正解决做什么问题。

我也不确定要使用哪些搜索条件。

更新:

只是要清楚,我最终想要的是一个git merge冲突的文件。 我可以很容易地看到使用git diff的两个文件之间的git diff但是输出不容易编辑。 我认为git可能有一种简单的方法来说“这两个提交以这种方式冲突......”,因为它必须能够在某个级别上做到这一点。


如果你只是试图合并这两个提交,那么Git会(正确地)认识到一个基于另一个提交,并且不会为它产生冲突。 毕竟,对Git来说,历史看起来像这样:

                   master
                     ↓
* ---- X ---- A ---- B

B是一个改变A具有的东西的提交。 从版本X查看文件状态时,Git无法知道您是否创建了B

所以你必须改变这个事实,所以Git将使用X作为AB 。 所以让我们先为基础创建一个分支:

git branch base X

这导致:

      base         master
       ↓             ↓
* ---- X ---- A ---- B

现在,我们切换到base并从B检出文件并提交该更改(这实质上是从B复制文件的状态)

git checkout base
git checkout master -- file.ext
git add file.ext
git commit
                   master
                     ↓
* ---- X ---- A ---- B
        
         
          C
          ↑
         base

现在您可以合并A并按照需要生成冲突:

git merge A

解决冲突之后,结果如下:

                   master
                     ↓
* ---- X ---- A ---- B
              
               
          C ---- M
                 ↑
                base

此时,您拥有该文件所需的状态。 你现在有三个选择:

  • base合并master以保留我们人为创建的整个历史。 对于文件冲突(您将在此收到),您可以使用theirs策略来保持解决方案的状态。
  • 复制文件内容,切换到master文件,并在B之后对合并的内容进行新的提交。
  • master重置为M (扔掉B ),并使用这个新创建的历史记录继续。 当然,这会删除提交B因此它基本上删除了历史(如rebase),如果您已经发布了B则应该避免这种情况。

  • 既然你只是想合并一个文件,你可能更好的是创建每个状态的副本,并手动合并(或与一些合并工具)。


    如果你做了两次提交,git没有提出任何抱怨,那就意味着你没有任何冲突。

    我建议你

  • 软重置第二次提交
  • 与第一次提交相比较,以查看第二次提交引入的更改
  • 按照您认为合适的方式保留/放弃更改并add / rm它们
  • 修改第一次提交。
  • 这样你最终会得到一个包含你希望包含的更改的提交。

    在命令中,它会是这样的

    $ git checkout sha-commit-2  # or branch name, depends on how your tree looks
    $ git reset HEAD^  # soft reset, remove commit but keep changes
    $ git diff  # diff against previous commit (should be the first one you mention)
    --make your changes and add them--
    $ git commit --amend
    

    如果你只做了提交,而你没有推进你的更改,你可以恢复你已经完成的提交,在这里:

    如何撤消Git中的最后一次提交?

    你会发现如何撤消你最后一次提交:

    $ git commit -m "Something terribly misguided"
    $ git reset --soft HEAD~
    << edit files as necessary >>
    $ git add ...
    $ git commit -c ORIG_HEAD
    

    另一个类似的信息与其他设施如何在git中提交提交?

    如果git的使用对你来说很复杂,另一种方法是:将自己置于编辑文件的分支中,将编辑后的文件复制并保存到另一个文件夹中,例如。 “/ home / your_file_here”,然后将您的分支更改为主,并将编辑的文件“/ home / your_file_here”移至主。 然后您将更新文件,并且可以使用“git diff your_edited_file”来检查更改。

    更新你的文件后,你可以删除你修改文件的分支“git branch -d branch_to_be_removed”。 附加信息在这里:如何删除本地和远程的Git分支?

    所以我的建议是,不要合并你有的两个提交,你应该撤销其中的一个,在这种情况下,你是在主人做的。 如果你想了解更多关于'合并'的信息,你会在这里找到真正有趣的信息:Git-Branching-Basic-Branching-and-Merging和here:Git-Tools-Advanced-Merging

    链接地址: http://www.djcxy.com/p/23461.html

    上一篇: git merging two commits

    下一篇: How to join last N merge commits into one?