git pull和git reset之间有什么区别--hard origin / <branch>?

时间:2017-03-27 03:03:08

标签: git version-control git-pull

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

5 个答案:

答案 0 :(得分:21)

以下命令:

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

将丢弃所有本地更改。

其中:

git pull

与...完全相同:

git fetch
git merge origin/<branch>

将尝试保留本地更改。

答案 1 :(得分:2)

$ 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)

示例:假设您在本地AB中有两次提交,而远程有两次提交AC。现在,如果你拉,那么你的本地包含ABC,就像你重置一样,那么你的本地将包含A,{{1不是C

答案 2 :(得分:0)

他们所做的完全不同:

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

使用git reset --hard origin/branch Git会:

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

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

答案 3 :(得分:0)

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

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

Git可以明确满足您的开发风格的特定需求,您可以在路上发现它们。一旦你对你的工作安全感到高兴,就不应该担心表现。

答案 4 :(得分:0)

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

git pull拉(获取和合并)从远程更改为本地,特别是其他推送提交到远程,您希望这些提交适用于您的本地分支。

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