Git通过合并撤消更改

时间:2015-11-18 12:37:51

标签: git

我将本地仓库回滚到提交,然后进行了一些本地更改。现在我想用我的本地仓库更新(简单地覆盖)遥控器。但当我做了一个git pull时,终端显示出一堆冲突。我不想要远程更改,我只想提交我的本地文件。

我读到了要做的地方

git checkout --ours

我像

一样运行它
 git checkout --ours .

但在我执行git status之后运行命令后,它显示了之前的状态。

4 个答案:

答案 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写的那样,要注意力推动可能带来的负面后果。