首页 文章

如何使用Git和命令行在合并期间保留本地文件或远程文件?

提问于
浏览
159

我知道如何使用vimdiff合并修改,但是,假设我只知道整个文件可以保留或丢弃,我该怎么做?

我不想为每个人打开vimdiff,我改变了想要一个“保持本地”或“保持远程”的命令 .

E.G:我合并了标记为已更改的文件,因为有人在Windows下打开它,更改EOL,然后提交 . 合并时,我想保留自己的版本并丢弃他的版本 .

我也对此感兴趣:我搞砸了很长时间并希望接受远程文件,丢弃我的更改 .

4 回答

  • 9

    这种方法看起来更简单,无需单独选择每个文件:

    # keep remote files
    git merge --strategy-option theirs
    # keep local files
    git merge --strategy-option ours
    

    要么

    # keep remote files
    git pull -Xtheirs
    # keep local files
    git pull -Xours
    

    直接复制自:Resolve Git merge conflicts in favor of their changes during a pull

  • 243

    你也可以这样做:

    git checkout --theirs /path/to/file
    

    保留远程文件,并:

    git checkout --ours /path/to/file
    

    保留本地文件 .

    然后 git add 他们,一切都完成了 .

  • 72

    有关行尾的内容,请参阅 man git-merge

    --ignore-space-change 
    --ignore-all-space 
    --ignore-space-at-eol
    

    务必将 autocrlf = false 和/或 safecrlf = false 添加到Windows克隆(.git / config)

    使用git mergetool

    如果您配置这样的合并工具:

    git config mergetool.cp.cmd '/bin/cp -v "$REMOTE" "$MERGED"'
    git config mergetool.cp.trustExitCode true
    

    那么简单

    git mergetool --tool=cp
    git mergetool --tool=cp -- paths/to/files.txt
    git mergetool --tool=cp -y -- paths/to/files.txt # without prompting
    

    会做的工作

    使用简单的git命令

    在其他情况下,我假设

    git checkout HEAD -- path/to/myfile.txt
    

    应该做的伎俩

    Edit 反过来(因为你搞砸了):

    git checkout remote/branch_to_merge -- path/to/myfile.txt
    
  • 9

    git checkout {branch-name} -- {file-name}

    这将使用来自所选分支的文件 .

    我喜欢这个,因为 posh-git autocomplete对此很有用 . 它还消除了哪个分支是远程的以及哪个分支是本地的歧义 . 并且 --theirs 无论如何都不适合我 .

相关问题