代码之家  ›  专栏  ›  技术社区  ›  Jeremy Huiskamp

如何使git合并处理对我的工作树的未提交更改?

  •  46
  • Jeremy Huiskamp  · 技术社区  · 16 年前

    我和一位同事目前都在母公司工作。我的工作树中有一些我不想提交的代码(调试语句等)。现在,如果他将更改提交到某些相同的文件,我将无法合并它们:

    $ git merge origin/master
    Updating 1b8c5c6..eb44c23
    error: Entry 'blah.java' not uptodate. Cannot merge.
    

    来自subversion的背景,我习惯于在从存储库提取更改时自动合并工作树,如果有冲突,我会手动解决。

    我发现在git中实现这一点的最快方法是:

    $ git stash
    $ git merge origin/master
    $ git stash pop
    

    3 回复  |  直到 16 年前
        1
  •  42
  •   Dustin    16 年前

    忘记你从颠覆中学到的一切。

    始终在引入外部更改之前提交。

    如果你承诺,你可以。如果你不这样做,你只会受苦。

    成为你所推动的,但你没有承诺的,你很容易失去。

    只要做安全和容易的事情,尽早承诺,经常承诺。

        2
  •  24
  •   Norman Ramsey    16 年前

    据我所知,你能做的最好的就是你已经拥有的 git stash . 我也觉得奇怪,merge只想处理干净的树。

        3
  •  7
  •   Leonardo Gonzalez    6 年前
    • 如果本地工作未提交
      • 您引入了远程分支中不存在的全新文件:
      • 或者,受本地工作影响的文件与受需要从远程拉取的更改影响的文件没有重叠:
        • git pull
      • 否则:
        • 如果本地更改与正在拉取的更改没有重叠:
            • git stash save
            • 吉特拉力
            • git stash pop
        • 如果本地更改与正在拉取的更改有些重叠:
            • 吉特隐藏保存
            • 解决合并冲突
            • git reset
            • git stash drop
      • 受本地工作影响的文件与受本地工作影响的文件没有重叠
        • 吉特拉力 “只是工作”
        • git pull --rebase 因为更干净的历史,“工作得更好”吗
        • 没有合并提交;您的更改将在上游更改后提交
      • 否则:
          • 吉特拉力
          • 解决合并冲突
          • git add FILE
          • git commit
        • git-pull——重基 因为更干净的历史,它还能“工作得更好”
          • 但是,解决合并冲突可能要困难得多

    有关详细说明,请参见: https://happygitwithr.com/pull-tricky.html

        4
  •  2
  •   Jamey Hicks    15 年前

    git merge

    使用CVS和SVN方法进行合并时,如果在更新之前没有手动复制文件,并且在合并时对其进行了置乱,则必须手动重新编辑以恢复到良好状态。

    如果在进行合并之前提交更改或隐藏更改,则一切都是可逆的。如果合并不顺利,你可以尝试几种方法来解决问题,然后选择一种效果最好的方法。

    如果您确实提交了实验或调试更改,则可以使用 git rebase 合并分支 使其更容易摆脱或避免意外地将它们推到存储库中。

    注意,使用 吉特重基 在您推送到共享存储库的分支上,将给从该存储库中拉出的每个人带来悲伤。

    git stash 在这些情况下,但我仅在合并更改了我已编辑但未提交的文件时使用它。