Git命令与Hg命令的对应关系

4

我之前使用过Mercurial,现在使用Git。但是我对Git的理解有些困难,你能帮我吗?像Mercurial一样,有哪些替代Git命令的选择?

hg up -C 
hg revert --all 
hg purge

如果我在使用Mercurial命令"hg up"时遇到一些冲突,我可以运行像hg revert --all & hg purge或者hg up -C这样的命令。

在执行git pull并且出现文件冲突后,如果我不想继续而是要恢复到原始状态,或者更新文件而没有冲突(类似于hg up -C),我应该怎么做?

2个回答

5

谢谢你的回答。 我尝试遵循你的建议。在使用“git reset --hard”命令后,所有更改都被丢弃,然后我运行了“git checkout -f”命令并收到以下消息http://screencloud.net/v/x2p5 。然后我检查文件更改,新的更改未被应用。之后,我运行了“git status”命令,得到了消息http://screencloud.net/v/8Dl9/。之后我再次运行“git pull”,但又出现了冲突 =(((这很困惑,因为如果我的工作目录干净,我可以运行“hg pull”命令而不会出现冲突。但是如果我运行“git pull”,我就会有冲突。 - Антон Хороший
关于您的 git checkout -f 错误信息,请参见 https://dev59.com/lHE95IYBdhLWcg3wHqIV#2452610 - VonC

0
“git pull” 后如果文件冲突,我不想继续,只想恢复到原始状态,该怎么办?
当你执行“git pull”时,实际上是在执行“git fetch”,然后跟着一个“git merge”或“git rebase”。假设你的拉取策略使用合并,则你的问题是如何撤销在“git pull”期间完成的合并。撤销合并的一种干净方法是将本地分支重置为最新提交:
git reset --hard <SHA-1 hash of latest commit>

我能做什么...更新文件而不产生冲突(例如 hg up -C)。
当你执行git pull时,你会将远程分支的所有文件更改带入。通常情况下,你不想只更新没有冲突的文件。Git是一个基于工作区的版本控制系统,而不是像SVN这样基于文件的VCS。
如果你真的想尝试执行git pull,然后只更新没有冲突的文件,那么你可以使用以下命令来识别哪些文件存在冲突:
git diff --name-only --diff-filter=U

然后对于列表中的每个文件,您可以对其执行git reset

git checkout -- filename_in_conflict

你是在寻找一种映射Mercurial命令的方法,还是想了解如何在Git中实际执行的信息? - Tim Biegeleisen
我不理解Git =( 如果我运行 hg pull & hg up -C,我总是能够在工作目录中获取实际代码而不会发生冲突,但是 git fetch & git checkout -f 不等同于 hg pull & hg up -C。如果我运行命令 git checkout -- filename_in_conflict ,我会收到消息 http://screencloud.net/v/scPD - Антон Хороший
我的建议是你发一个新问题,其中明确说明你在Git中要做什么。这样你就能得到一个可以帮助你入门的答案。 - Tim Biegeleisen
非常感谢您的帮助。这是我的新问题:http://stackoverflow.com/questions/33255900/git-how-to-update-the-working-directory-like-hg-up-c-in-mercurial - Антон Хороший

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接