git pull 和 git reset --hard origin/<branch> 有什么区别?
What is the difference between git pull and git reset --hard origin/<branch>?
我发现后者比第一个快,所以我通常在 git fetch
之后每当我需要将我的本地分支与远程同步时这样做。如果有的话,有什么区别?
$ 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
并且远程有两个提交 A
,C
.现在,如果您拉动,则您的本地包含 A
、B
、C
,这与如果 reset 不同,则您的本地将包含 A
、C
不是 B
。
以下命令:
git fetch
git reset --hard origin/<branch>
将放弃所有本地更改。
其中:
git pull
与以下内容完全相同:
git fetch
git merge origin/<branch>
将尝试保留本地更改。
他们做的事情完全不同:
git pull
:
将远程存储库中的更改合并到当前分支中。在其默认模式下,git pull 是 shorthand for git fetch 其次是 git merge FETCH_HEAD.
与 git reset --hard origin/branch
Git 将:
- 使您当前的分支(通常是 master)回到指向
<SOME-COMMIT>
。
- 然后使工作树中的文件和索引 ("staging area") 与
<SOME-COMMIT>
中提交的版本相同。
注意:
始终值得注意的是 git reset --hard
是一个具有潜在危险的命令,因为它会丢弃所有未提交的更改。为了安全起见,在使用之前,您应该始终检查 git 状态的输出是否干净(即为空)。
您获取源代码更新的方式比您对性能的关注更重要。您需要将它们用于特定情况。我可以为您提供两个示例:
git reset --hard ...
可用于在生产中更新代码,如果
你经常发现自己修改生产代码
调试。这通常发生在项目的早期阶段
带着懒惰的想法部署。
git pull
是获得新提交最被接受的方式,它
通常是有道理的,你不会有巨大的本地变化。如果您的承诺期更长且有更多人参与
同一个分支,你最终可能会有直觉去做 git pull --rebase
或
先抓取再比较。
Git 可以明确说明您的开发风格的非常具体的需求,您可以在路上发现它们。一旦您对您的工作安全感到满意,性能就根本不应该受到关注。
这两个命令主要用于不同的情况。
git pull
拉取(获取并合并)从远程到本地的更改,尤其是其他推送到远程的提交,并且您希望这些提交应用到您的本地分支。
git reset --hard origin/branch
强制使您的本地分支指向 origin/branch 指向的提交。一般是针对你想放弃本地所做的修改,让本地分支保持远程状态的情况。
我发现后者比第一个快,所以我通常在 git fetch
之后每当我需要将我的本地分支与远程同步时这样做。如果有的话,有什么区别?
$ 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
并且远程有两个提交 A
,C
.现在,如果您拉动,则您的本地包含 A
、B
、C
,这与如果 reset 不同,则您的本地将包含 A
、C
不是 B
。
以下命令:
git fetch
git reset --hard origin/<branch>
将放弃所有本地更改。
其中:
git pull
与以下内容完全相同:
git fetch
git merge origin/<branch>
将尝试保留本地更改。
他们做的事情完全不同:
git pull
:
将远程存储库中的更改合并到当前分支中。在其默认模式下,git pull 是 shorthand for git fetch 其次是 git merge FETCH_HEAD.
与 git reset --hard origin/branch
Git 将:
- 使您当前的分支(通常是 master)回到指向
<SOME-COMMIT>
。 - 然后使工作树中的文件和索引 ("staging area") 与
<SOME-COMMIT>
中提交的版本相同。
注意:
始终值得注意的是 git reset --hard
是一个具有潜在危险的命令,因为它会丢弃所有未提交的更改。为了安全起见,在使用之前,您应该始终检查 git 状态的输出是否干净(即为空)。
您获取源代码更新的方式比您对性能的关注更重要。您需要将它们用于特定情况。我可以为您提供两个示例:
git reset --hard ...
可用于在生产中更新代码,如果 你经常发现自己修改生产代码 调试。这通常发生在项目的早期阶段 带着懒惰的想法部署。git pull
是获得新提交最被接受的方式,它 通常是有道理的,你不会有巨大的本地变化。如果您的承诺期更长且有更多人参与 同一个分支,你最终可能会有直觉去做git pull --rebase
或 先抓取再比较。
Git 可以明确说明您的开发风格的非常具体的需求,您可以在路上发现它们。一旦您对您的工作安全感到满意,性能就根本不应该受到关注。
这两个命令主要用于不同的情况。
git pull
拉取(获取并合并)从远程到本地的更改,尤其是其他推送到远程的提交,并且您希望这些提交应用到您的本地分支。
git reset --hard origin/branch
强制使您的本地分支指向 origin/branch 指向的提交。一般是针对你想放弃本地所做的修改,让本地分支保持远程状态的情况。