【问题标题】:What is the point for git reset accepting paths as an argument when we have git checkout?当我们有 git checkout 时,git reset 接受路径作为参数有什么意义?
【发布时间】:2013-08-07 22:17:39
【问题描述】:

我知道git reset 更新索引,而git checkout 更新工作副本。我不明白的是需要git reset 接受引用和路径参数的用例?在这种情况下,我似乎总是想使用git checkout

当人们问为什么他们不能git reset some-ref --hard -- some/path/to/file 时,这总是会出现。真正的问题是为什么git reset 甚至在我们有git checkout 时接受git reset some-ref -- some/path/to/file

在教别人两者之间的区别之前,从来没有想过这个。

【问题讨论】:

  • 这更像是“我的印象”而不是“答案”(因此作为评论),但是:git 充满了冗余的做事方式,我认为很大程度上是有机增长的结果.这是真正让新手感到困惑的事情之一,有 5982 种方法可以做 X,其中一半以上出于某种原因是坏主意,其余大部分都是笨拙的,而最好的三种方法干净简单,没有选择一个而不是另一个的理由。 :-)
  • 取消暂存更改怎么样? git add somefile.txt, , git reset somefile.txt.
  • @GabrielePetronella 是的,但这个用例不是问题。问题是将某些文件路径的索引重置为先前的提交。

标签: git git-checkout git-reset


【解决方案1】:

通常,如果您将文件添加到索引中,并意识到您想将其从索引中删除,那么您需要这样做:

  • 将文件 index 重置为 HEAD 的引用 (HEAD)(因为 HEAD 引用了尚未暂存的状态:提交)
  • 一个文件

即:

 git reset HEAD -- a/file

这将“取消暂存”文件。

  • git reset 移动 HEAD 而不影响内容(除非您执行 git reset --hard:唯一影响工作树的模式)
  • git checkout 总是修改工作树(和文件内容)

git reset 接受 ref 和路径,因为它具有三种模式(软、混合和硬)。
(另见“Practical uses of git reset --soft?”)
只有--hard模式与git checkout类似。

What's the difference between 'git reset' and 'git checkout'?”中有关同一主题的更多信息。

【讨论】:

  • 是的,我明白将它与 HEAD ref 一起使用的意义,但这是我唯一能想到的。
  • @kayaker243 不,您还可以使用它将文件还原为您想要的任何提交(使用--hard)。或者重做一个合并(--soft,您只需移动 HEAD,而不触及索引或工作树,正如我在Practical uses of git reset --soft? 中提到的那样)。在这两种情况下,您都将使用提交,而不仅仅是“HEAD”。
猜你喜欢
  • 2011-04-08
  • 2017-12-10
  • 2011-09-06
  • 2012-01-11
  • 2011-10-18
  • 2018-04-22
  • 2018-11-23
  • 2021-07-04
相关资源
最近更新 更多