我在 Stackoverflow/elsewhere 上尝试了很多链接来正确理解
的行为git reset --hard option
我知道:
- 如果它被省略或者它是
origin
,则在origin
上的最近一次提交上完成重置 - 如果提供了 SHA1 哈希,则会在相应的提交上完成重置。
我不明白的是以下值:
来源
头
来源/主人
起点/分支
所有似乎都有相同的行为,即它们指向 master
上的最新提交。
请解释上面提供的所有 4 个值选项的意义是什么。
我还想知道如果我在一个特定的分支上,我该如何重置到那个分支上的最后一次提交?
例如,如果我在 v1.2
上,origin/v1.2
仍会将我带到 master
上的最新提交。
最佳答案
首先你需要明白分支和标签名称只是指向散列值的指针,它代表一次提交,如果你说有 4 个选项具有相同的行为,那么第一个合乎逻辑的答案是因为它们都指向同一个提交
origin
我不确定这一点,但我认为origin
本身会解析为origin/HEAD
我think 将取决于你的 github 设置,在 github 中你设置了一个“默认分支”,origin/head
将解析为origin/[default_branch]
,在你的情况下我假设它是 master,所以这就是为什么它与origin/master
具有相同的效果。HEAD
始终指向当前提交,即您所在的提交,因此git reset --hard HEAD
将永久删除跟踪中的所有更改文件和暂存文件更改,但不更改提交哈希。origin/master
是自上次获取/pull 以来远程 master 分支中的最后一次提交,每次提交到master
时,您的本地master
已更新并且您的origin/master
也已更新,如果其他人推送到master
您的 repo 将不知道有更新,除非您执行git fetch
然后你的origin/master
将移动到你的master
之前,或者甚至可能发散。
运行git reset --hard origin/master
如果你当前在master
分支并且master
在与origin/master
同步
origin/branch
我不确定这代表什么,因为默认情况下没有origin/branch
,所以我猜你创建了一个分支称为branch
并且碰巧与你的主人在同一个提交中,以确认你可以尝试做一个git branch
来查看你所有的分支,我猜你会找到一个名为branch
的分支
要以可视化方式查看所有这些,您可以尝试运行 git log --graph --decorate --all
或者我更喜欢像 gitk
这样的可视化工具,如果你安装了二进制文件,你将运行 gitk --all
来查看所有分支之间的相对关系
关于git - `git reset --hard master` 和 `git reset --hard origin/master` 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29862319/