我正在做一个拉动起源some_branch,可以看到有很多变化。最终我不介意他们擦掉我的全部。
我怎样才能全部接受它们,或者逐个使用mergetool和合并文件?
答案 0 :(得分:8)
只需:
git clone $url
认真!那是最好的方式。
您可以执行各种git reset
和git branch
命令来移动引用,但唯一的目的是将提交保留在本地存储库中的某个位置以供将来参考。如果这是目标,只需按原样保存整个存储库,然后重新克隆原点。
仅接受一个分支上的所有更改foo
:
git checkout foo
git fetch origin +refs/heads/foo:refs/remotes/origin/foo
git reset refs/remotes/origin/foo
foo
现在指向foo
上与origin
相同的提交。如果您想要删除工作目录中的文件,请将--hard
添加到git reset
。如果您想先合并,请将fetch
替换为pull
。
您可能在本地仓库中有一堆悬空提交,git可能会在某天清理,但有一段时间您仍然可以通过reflog访问它们。
答案 1 :(得分:5)
或者:
git status | grep "both " | cut -f2 | cut -f11 -d" " | xargs git checkout --theirs
git status | grep "both " | cut -f2 | cut -f11 -d" " | xargs git add
强制接受所有冲突的远程文件。
答案 2 :(得分:0)
这是我使用的方法,似乎没问题。我有一个名为“他们的”的分支,其中包含遥控器中所有内容的新版本。一个名为“我们的”的版本是基于他们很久以前的版本的作品,这些版本中有太多不相关的更改,但是我想要保留许多新增内容(站点/所有的新子目录)。
git checkout ours
git checkout theirs -- *.php *.txt *.config modules themes includes scripts
git commit -m "New version with all new key files from 'theirs'"
只要我在第二个结帐时得到的文件和目录列表正确,这应该没问题。
如果我希望历史记录基于“他们的”分支,我可能想要反过来这样做。