我将本地仓库回滚到提交,然后进行了一些本地更改。现在我想用我的本地仓库更新(简单地覆盖)遥控器。但当我做了一个git pull时,终端显示出一堆冲突。我不想要远程更改,我只想提交我的本地文件。
我读到了要做的地方
git checkout --ours
我像
一样运行它 git checkout --ours .
但在我执行git status
之后运行命令后,它显示了之前的状态。
答案 0 :(得分:3)
据我所知,你想要用本地分支中的任何内容覆盖你的远程分支。
这可以通过使用-f
强制选项或git push命令中的--force-with-lease
选项来实现。
让您的本地分支处于您想要的状态并执行:
git push -f origin <remoteBranch>
小心但 ,这个动作有后果,我强烈建议你阅读这个答案:https://stackoverflow.com/a/10510482/1695393
此外,当您执行git pull
时,git会尝试合并远程和本地分支,这将撤消您准备本地分支的工作。由于你想“覆盖”遥控器,我建议你跳过拉。
答案 1 :(得分:0)
如果你现在仍然处于这种不洁净的状态,你可能想要git reset --hard
将本地存储库重置为最后一次拉动之前的状态。
答案 2 :(得分:0)
git checkout --ours
只支持签出一个文件。因此,您键入git checkout --ours .
它将无法正常工作。
因此,在这种情况下,您必须运行git checkout --ours [path_to_your_conflict_file]
如果您有太多冲突文件,可以运行以下命令:
for f in `git ls-files -m`;do git checkout --ours $f; done;
答案 3 :(得分:0)
您想将历史记录保存在远程仓库吗?还有其他人退出吗?如果这两个问题的答案都是&#34; no&#34;,那么你可能只想摆脱冲突并强行推动。
git reset --hard <commit to keep>
git push --force origin <remote branch>
如果您确实希望将历史记录保存在远程仓库中和/或某人已撤消,您可以这样做:
git reset --hard origin/<remote branch> # Erase changes (conflicts) in your working copy
git reset --soft <commit to keep>
git commit --all --message "Commit message with reason for restoring"
git push
正如@dubes写的那样,要注意力推动可能带来的负面后果。