git pull和git reset有什么区别--hard origin / ?

问题描述 投票:15回答:5

我发现后者比第一个更快,所以我通常在git fetch之后,每当我需要将本地分支与遥控器同步时。有什么区别,如果有的话?

git version-control git-pull
5个回答
23
投票

以下命令:

git fetch
git reset --hard origin/<branch>

将丢弃所有本地更改。

在哪里:

git pull

这完全相同:

git fetch
git merge origin/<branch>

将尝试保留当地的变化。


3
投票
$ git pull                        
# takes the latest changes of origin/branch (exists both local & remote changes)

$ git reset --hard origin/branch  
# replace your local with origin's branch history (discard local changes)

示例:说,我们在本地A有两个提交,B和remote有两个提交AC。现在,如果你拉,那么你的本地包含ABC不同,如果重置然后你的本地将有AC而不是B


0
投票

获取源更新的方式比您的性能问题更重要。您需要针对特定​​情况使用它们。我可以举两个例子:

  • 如果您经常发现自己修改生产代码以进行调试,则git reset --hard ...可用于更新生产中的代码。这通常发生在项目部署的早期阶段,有着懒惰的想法。
  • git pull是获得新提交的最常用方式,通常情况下你不会有巨大的局部变化。如果您的提交周期越长,同一分支上的人越多,您最终可能会有一种直觉,即先做git pull --rebase或先获取然后进行比较。

Git可以明确满足您的开发风格的特定需求,您可以在路上发现它们。一旦您对工作安全感到满意,就不应该关注性能。


0
投票

这两个命令主要用于不同的情况。

qazxsw poi pull(fetch and merge)从远程更改为本地,特别是其他push提交到远程,你希望这些提交适用于你的本地分支。

git pull强制使您的本地分支指向origin / branch指向的提交。通常情况下,您希望放弃所做的本地更改并将本地分支保持为远程状态。


0
投票

它们的作用完全不同:

git reset --hard origin/branch:将来自远程存储库的更改合并到当前分支中。在默认模式下,git pull是git fetch的简写,后跟git merge FETCH_HEAD。

随着git pull Git将:

  • 让您当前的分支(通常是主分支)回到git reset --hard origin/branch点。
  • 然后使工作树中的文件和索引(“临时区域”)与<SOME-COMMIT>中提交的版本相同。

注意:值得注意的是<SOME-COMMIT>是一个潜在的危险命令,因为它会丢弃所有未提交的更改。为安全起见,在使用之前,应始终检查git status的输出是否干净(即为空)。

© www.soinside.com 2019 - 2024. All rights reserved.