取消git merge但保留本地更改

时间:2016-01-21 01:47:17

标签: git

我开始使用git merge,但是我想要保留本地更改。我不想再合并,而是继续处理本地更改。我该怎么做?

4 个答案:

答案 0 :(得分:6)

众所周知,语言含糊不清。 :-)当你说“保持局部变化”时你可能意味着:

  1. 保留工作目录中的所有当前更改,无论您是手动编辑这些文件还是将其置于中间的合并;或
  2. 放弃合并带来的任何更改,并保留您所引入的任何更改。
  3. 这个简单的解决方案解决了第(1)点:

    $ git stash save
    $ git stash pop
    

    以下是显示影响的成绩单:

    $ git status
    On branch stuff-217/apply-new-config-details
    All conflicts fixed but you are still merging.  <<<<<< notice this line!
    
    Changes to be committed:
            modified:   package.json
            modified:   src/wallabyTest.ts
            modified:   wallaby.js
    
    $ git stash save
    Saved working directory and index state WIP on stuff-217/apply-new-config-details...
    
    $ git status
    On branch stuff-217/apply-new-config-details
    nothing to commit, working tree clean
    
    $ git stash pop
    On branch stuff-217/apply-new-config-details
                                                 <<<<<< no longer in the merge!
    Changes not staged for commit:
            modified:   package.json
            modified:   src/wallabyTest.ts
            modified:   wallaby.js
    

答案 1 :(得分:0)

首先,复制您正在处理的文件夹,以防发生不良事件。 Git通常非常防弹,但是如果你开始使用git reset --hard,就有可能发生坏事。

然后,执行git commit --patch,仅选择要保留的更改并保留合并所做的所有操作。一旦您提交了这些更改,请执行git reset --hard,并且合并应该消失,但您的更改仍应存在。

答案 2 :(得分:0)

找到了以下经过测试的解决方案:

  1. 将所有当前更改保留在工作目录中,无论您是手动编辑这些文件还是将其合并到其中都合并
rm .git/MERGE*
rm .git/ORIG_HEAD

可能会有些危险,因为您基本上是在直接干扰git的内部工作,因此请先备份您的文件夹:)

答案 3 :(得分:0)

今天发生在我身上,我需要在一个新的分支中进行合并,该分支是通过develop创建的,并且对另一个分支进行了某些更改...

我尝试了迈克尔·索伦斯(Michael Sorens)的解决方案,但是还需要额外的步骤... git add .,如果您有冲突

git checkout -b mynewbranchfromdevelop
git merge AnotherBranchToMergeIntoMynewbranchfromdevelop

它有冲突,我试图制作一个git stash,但是出现“需要合并”消息,我要做的只是使用

git add .

要解决并逐步解决这些冲突(但仍需要git commit来完成合并),然后

git stash

会将这些更改保存在一个存储库中,如果您使用“ git status”进行检查,则没有任何内容可提交,并且无法清除树

git stash apply

您将在当前分支的本地目录中进行那些更改而无需提交