什么';“git reset--hard master”和“git reset--hard origin/master”之间的区别是什么?
我在Stackoverflow/其他地方尝试了很多链接,以正确理解什么';“git reset--hard master”和“git reset--hard origin/master”之间的区别是什么?,git,github,version-control,git-reset,Git,Github,Version Control,Git Reset,我在Stackoverflow/其他地方尝试了很多链接,以正确理解 git重置--硬选项 我知道: 如果省略或是原点,则在原点 如果提供了SHA1散列,则在相应的提交上执行重置 我不理解的是以下价值观: origin HEAD origin/master origin/branch 它们似乎都有相同的行为,即它们指向master上的最新提交 请解释上述所有4个价值选项的意义 我还想知道,如果我在某个特定的分支上,如何重置到该分支上的最后一次提交? 例如,如果我在v1.2,origin/v1.
git重置--硬选项
我知道:
- 如果省略或是
,则在原点
原点
- 如果提供了SHA1散列,则在相应的提交上执行重置
origin
HEAD
origin/master
origin/branch
master
上的最新提交
请解释上述所有4个价值选项的意义
我还想知道,如果我在某个特定的分支上,如何重置到该分支上的最后一次提交?
例如,如果我在
v1.2
,origin/v1.2
仍然会带我到master
,master
,HEAD
,origin/something
,可能还有一些标签,为什么不呢,可能都指向同一个提交,但它们肯定不是同一个东西
origin
通常是源代码的名称
您可以使用git remote-v
查看您的遥控器并配置新的遥控器
尝试一下(使用-v
)可能会有意义
remote/somebranch
指向远程存储库上某个分支的头
origin/master
指向origin
上的master
的头部
它与母版相同吗
是和否。如果您拉主分支,做一些工作,同时其他人提交master
并推送到origin
,它们将不同
当您执行git fetch origin
时,origin/master
将有额外的提交(将在前面)
HEAD
只是“当前提交”。
把它想象成
看
再次,这可能与
$ git checkout master
$ git log -1 --format="%H" HEAD
123abc
$ git log -1 --format="%H" origin/master
123abc
他们是一样的
$ git diff origin/master
当然他们的内容是一样的
$ echo "foo" > foo
$ git add foo
$ git commit -m "Foo the thingy"
$ git log -1 --format="%H" HEAD
321bca
$ git log -1 --format="%H" origin/master
123abc
$ git checkout -b newbranch
$ echo "baz" > baz
$ git add baz
$ git commit -m "Baz the thingy with the stuff"
$ git branch -a
master
* new_branch
origin/master
$ git log -1 --format="%H"
789def
$ git log -1 --format="%H" master
321bca
git log -1 --format="%H" origin/master
321bca
git log -1 --format="%H" origin/new_branch
unknown revision or path not in the working tree.
Note: checking out 123abc. You are in 'detached HEAD' state, etc
$ git checkout -b old_master
$ git branch -a
master
* new_branch
origin/master
old_master
啊,看,现在他们不一样了
$ git push origin master
$ git log -1 --format="%H" HEAD
321bca
$ git log -1 --format="%H" origin/master
321bca
现在他们不是!我们已经推动了我们的最新承诺,他们都指向同一点
$ echo "foo" > foo
$ git add foo
$ git commit -m "Foo the thingy"
$ git log -1 --format="%H" HEAD
321bca
$ git log -1 --format="%H" origin/master
123abc
$ git checkout -b newbranch
$ echo "baz" > baz
$ git add baz
$ git commit -m "Baz the thingy with the stuff"
$ git branch -a
master
* new_branch
origin/master
$ git log -1 --format="%H"
789def
$ git log -1 --format="%H" master
321bca
git log -1 --format="%H" origin/master
321bca
git log -1 --format="%H" origin/new_branch
unknown revision or path not in the working tree.
Note: checking out 123abc. You are in 'detached HEAD' state, etc
$ git checkout -b old_master
$ git branch -a
master
* new_branch
origin/master
old_master
当然不是。我们没有将新分支机构
推送到原点
,它只在我们的本地机器上
git checkout 123abc
我们刚刚签出了123abc
,这位master
的老头头。现在,它不是任何分支机构的负责人,但我们仍然可以查看它
$ echo "foo" > foo
$ git add foo
$ git commit -m "Foo the thingy"
$ git log -1 --format="%H" HEAD
321bca
$ git log -1 --format="%H" origin/master
123abc
$ git checkout -b newbranch
$ echo "baz" > baz
$ git add baz
$ git commit -m "Baz the thingy with the stuff"
$ git branch -a
master
* new_branch
origin/master
$ git log -1 --format="%H"
789def
$ git log -1 --format="%H" master
321bca
git log -1 --format="%H" origin/master
321bca
git log -1 --format="%H" origin/new_branch
unknown revision or path not in the working tree.
Note: checking out 123abc. You are in 'detached HEAD' state, etc
$ git checkout -b old_master
$ git branch -a
master
* new_branch
origin/master
old_master
现在猜猜它们的SHA1分别是什么?首先,您需要了解分支和标记名只是指向散列值的指针,散列值表示一个提交,如果您说有4个选项具有相同的行为,那么第一个逻辑答案是因为它们都指向相同的提交
我不确定,但我认为origin
本身将解析为origin
,我认为这取决于您的github设置,在github中您设置了一个“默认分支”,origin/HEAD
将解析为origin/HEAD
,在您的情况下,我假设它是master,这就是为什么它与origin/[default\u branch]
具有相同的效果origin/master
始终指向当前提交,即您所处的提交,因此HEAD
将永久删除跟踪文件和暂存文件更改中的所有更改,但不会更改提交哈希git reset--hard HEAD
是自上次获取/拉取以来远程主分支中的最后一次提交,每次提交到origin/master
,您的本地master
都会更新,您的master
也会更新,如果其他人推到origin/master
您的repo将不知道有更新,除非您执行master
,否则您的git获取
将先于源代码/主代码
,甚至可能会偏离。主代码
如果您当前在
分支上并且master
与master
同步,则运行origin/master
将具有相同的效果git reset--hard origin/master
我不确定这代表什么,因为默认情况下没有origin/branch
,所以我猜您创建了一个名为origin/branch
的分支,并且恰好与主分支处于同一提交状态,以确认您可以尝试执行branch
来查看所有分支,我猜你会找到一个叫做git branch
branch
要以可视化的方式查看所有这些,您可以尝试运行
git log--graph--decoration--all
,或者我更喜欢像gitk
这样的可视化工具,如果您安装了二进制文件,您将运行gitk--all
以查看彼此相关的所有分支原点
可以通过gitrevisions(7)
中的
条目来解释;它完全扩展到refs/remotes/origin/HEAD
origin/master
扩展到refs/remotes/origin/master
,类似地origin/branch
将扩展到refs/remotes/origin/branch
(假设它存在)。