【问题标题】:Difference between git reset and git checkout [duplicate]git reset 和 git checkout 之间的区别 [重复]
【发布时间】:2015-02-28 19:15:44
【问题描述】:

下面两条命令的实际效果有什么区别? 他们不是都让暂存区和工作目录匹配最新的提交吗?

git reset --hard

git checkout <sha-of-latest-commit>

【问题讨论】:

  • 真的是复制品吗?另一个问题非常广泛,但这个问题非常具体,应该得到一个具体的答案。
  • 第二个命令会让你进入分离的 HEAD 状态。

标签: git git-checkout git-reset


【解决方案1】:

git reset --hard 放弃对工作树中文件的所有更改。

git checkout <sha-of-latest-commit> 保留这些更改。

当您的 HEAD 引用分支(不是分离的 HEAD 模式)时,还有另一个区别。

git checkout <sha-of-latest-commit> 将分离 HEAD。

git reset --hard 不会分离 HEAD。

【讨论】:

    【解决方案2】:

    git reset --hard 等价于git reset --hard HEAD,即它使您的分支指向 HEAD(即 NOP),并将索引和工作树重置为相同的内容。

    git checkout 带有文字 sha1 将进入分离头模式,即您将不再在您的分支上。它也不会改变工作树或索引。

    自己看:

    $ git init
    $ touch a b
    $ git add .
    $ git commit -m 1
    $ echo 1 >a; echo 1 >b; git add a #do some changes
    $ git status
    On branch master
    Changes to be committed:
      (use "git reset HEAD <file>..." to unstage)
    
            modified:   a
    
    Changes not staged for commit:
      (use "git add <file>..." to update what will be committed)
      (use "git checkout -- <file>..." to discard changes in working directory)
    
            modified:   b
    
    $ git reset --hard 
    $ git status # still on master, changes are gone
    On branch master
    nothing to commit, working directory clean
    $ echo 1 >a; echo 1 >b; git add a  #redo changes
    $ git checkout HEAD@{0}
    $ git status  #no longer on master, changes are still there
    HEAD detached at be924ba
    Changes to be committed:
      (use "git reset HEAD <file>..." to unstage)
    
            modified:   a
    
    Changes not staged for commit:
      (use "git add <file>..." to update what will be committed)
      (use "git checkout -- <file>..." to discard changes in working directory)
    
            modified:   b
    

    【讨论】:

    • 它也不会改变工作树或索引。不正确。
    • 您能解释一下吗?我在上面给出了一个详细的示例,显示索引和工作树没有变化。 (除非您指定显式路径。)
    猜你喜欢
    • 1970-01-01
    • 2019-03-11
    • 2011-07-04
    • 1970-01-01
    • 2020-04-07
    • 1970-01-01
    • 2011-04-08
    • 2015-11-20
    相关资源
    最近更新 更多