我知道如何使用vimdiff合并修改,但是如果我只想保留整个文件或者丢弃整个文件,该怎么做呢?
我不想为每一个文件都打开vimdiff, 我需要一个命令来表示“保留本地”或“保留远程”。
例如,我合并了一个标记为已更改的文件,因为有人在windows下打开它,并改变了EOL,然后提交。当合并时,我只想保留我的版本并丢弃他的版本。
我还对相反情况感兴趣:我搞砸了,想接受远程文件,放弃我的更改。
你也可以这样做:
git checkout --theirs /path/to/file
保留远程文件,并且:
git checkout --ours /path/to/file
保留本地文件。
然后执行git add
,一切就完成了。
附注:
请记住,这适用于合并(merge
)场景。在变基(rebase
)期间,--theirs
是指你一直在工作的分支。
这种方法似乎更直接,避免了需要逐个选择每个文件的麻烦:
# 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
直接复制自: 如何在Git pull过程中选择对方的更改并解决合并冲突
git merge --strategy-option theirs
策略,那么我应该在什么时候输入这个命令?这是暂时的吗?我希望它只在这个rebase中生效,而不是未来的rebase。 - soMuchToLearnAndSharegit checkout {branch-name} -- {file-name}
posh-git
自动完成非常出色。它还消除了哪个分支是远程的、哪个是本地的任何歧义。
而且--theirs
对我也没有用。关于行尾标记,可以参考man git-merge
:
--ignore-space-change
--ignore-all-space
--ignore-space-at-eol
请确保将 autocrlf = false
和/或 safecrlf = false
添加到 Windows 克隆 (.git/config) 中。
如果你像这样配置了一个合并工具:
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 checkout HEAD -- path/to/myfile.txt
这应该能解决问题。
编辑可用于执行反向操作(因为您出错了):
git checkout remote/branch_to_merge -- path/to/myfile.txt
git checkout remote/branch_to_merge -- path/to/myfile.txt
在解决合并冲突时非常好用。(git 1.7.1) - sehe我一天前问了一个问题,与此问题非常相似,但我的问题略有不同,因为它涉及到数据库sqlite3。
但是站点上的管理员要求我删除该问题,所以我删除了它,但他最终封锁了我。
无论如何,对于我的问题,答案是"git checkout --their db.sqlite3"。
与数据库相关的事情,然后只需简单地输入"git checkout --their db.sqlite3",不需要放置路径。
我把这个答案留给那些和我有同样问题的人。
git版本1.8.4
。 - Rosdi Kasim