- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我有一个文件 foo.py
。我对工作目录做了一些更改,但尚未暂存或提交任何更改。我知道我可以使用 git checkout foo.py
来摆脱这些变化。我还阅读了有关使用 git reset --hard HEAD
的信息,它实质上会重置您的工作目录、暂存区和提交历史记录以匹配最新的提交。
在我的情况下,我的更改仍在工作目录中,是否有任何理由更喜欢使用其中一个?
最佳答案
Is there any reason to prefer using one over the other in my case, where my changes are still in working directory?
不,因为他们会完成同样的事情。
Is there any reason to prefer using [
git checkout -- path/to/file
] over [git reset --hard
] in [general but not in my specific case]?
是的:这只会影响一个文件。如果你的习惯是git reset --hard
撤消对一个文件的更改,并且您对其他 文件也有工作树和/或暂存更改,并且您 git reset --hard
,如果不手动重建这些更改,您可能会很不走运。
注意还有第三个结构:git checkout HEAD path/to/file
.这个和没有HEAD
的区别(用 --
而不是 1)是 用 HEAD
意味着首先将永久的、不可更改的提交中的文件版本复制到索引/暂存区,然后再复制到工作树。带有 --
的那个表示将索引/暂存区中的文件版本复制到工作树中。
1使用--
的原因是为了确保 Git 永远不会将文件名与其他任何东西混淆,比如分支名称。例如,假设您将文件命名为 master
,只是为了固执。那么,git checkout master
是做什么的?意思是?是否应该检查分支 master
,或提取文件 master
? --
在git checkout -- master
让 Git 和人类清楚地知道这意味着“提取文件 master
”。
在任何时候,每个文件都有三个事件副本:
HEAD
中的一个;git status
命令查看所有三个,比较 HEAD
-vs-index 首先——这为 Git 提供“要提交的更改”列表——然后是 index-vs-work-tree 第二。第二个为 Git 提供“未暂存提交的更改”列表。
git add
命令从工作树复制到索引中。
git checkout
命令从 HEAD
复制到索引然后是工作树,或者只是从索引到工作树。所以有点复杂,有多种操作方式:
git checkout -- <em>path/to/file</em>
:从索引复制到工作树。 HEAD
里有什么这里无所谓。 --
通常是可选的,除非文件名看起来像分支名称(例如,名为 master
的文件)或选项(例如,名为 -f
的文件)。
git checkout HEAD -- <em>path/to/file</em>
:来自 HEAD
的副本提交,索引,然后工作树。 HEAD
里有什么覆盖索引中的内容,然后覆盖工作树中的内容。 --
通常是可选的,除非文件名看起来像一个选项(例如 -f
)。
明智的做法是使用 --
永远,就像一个好习惯。
git reset
命令复杂(有多种操作方式)。
(这并不是说 git checkout
很简单:它也有很多操作模式,可能太多了。但我认为 git reset
至少要差一点。)
关于python - git reset --hard HEAD 与 git checkout <file>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46800824/
当我这样做时 git checkout origin/bugfix/NTP-183-datefns git 显示 Note: checking out 'origin/bugfix/NTP-183-d
我刚收到一封来自 Google 的电子邮件,通知我他们将关闭 Google Checkout,我应该改用 Google 电子钱包。这让我感到困惑,因为我在 6 个月前开始使用 Google 数字商品购
SVN 仓库看起来像这样: 最佳/ 最佳 顶部/两个 前/三 ...等等 您不想结帐整个 顶部 文件夹,但您不知道 SVN's sparse checkout feature . 所以你 checko
在稀疏 checkout 场景中,命令 git checkout . 恢复应该忽略的目录。这是设计使然,还是 Git 中的潜在问题?我正在使用 git checkout . 放弃我对我的工作副本所做的
新手问题,我想确保我理解这一点。 当我 git checkout ,这会将整个项目返回到当时的状态,还是仅重新创建在该特定修订版中更改的文件? 例如:如果我的文件夹除了 .git 存储库之外完全是空
我正在使用 Stripe 支付与我的系统集成。但是我不明白这两个库之间的区别。 似乎使用 javascript 生成表单并将 token 传递到我们的服务器端。 这是与 .net 核心一起使用
我正在使用 GitHub Actions 和安装在 Windows 2019 服务器上的自托管代理设置 CI/CD 管道。 我面临的问题是操作 actions/checkout@v2 无法 check
有时是 git checkout命令给出进度反馈: $ git checkout develop Checking out files: 100% (10779/10779), done. Switc
As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be
我有一个我喜欢的 checkout 后 Hook - 大多数时候 - 但有时我知道运行它会浪费时间,或者,因为它会删除并重建我的开发数据库,所以我不'希望它做它的事情。 是否有跳过钩子(Hook)
这个问题在这里已经有了答案: Why do we use double dash in "git checkout -- ."? [duplicate] (1 个回答) 关闭 5 年前。 我总是使用
我尝试 checkin 有关我的开发的 excel 文档。但是我的构建失败了,因为它的文件被我锁定了。但问题是;当我选择解锁文档时,出现以下错误。 > The item $/../../Device
通过 XML API,如何将 Google Checkout 回调序列号与原始订单相关联? 在同一行 - XML API doc 的“选项 B - 提交服务器到服务器结帐 API 请求”部分中的序列号
我想确保没有其他人正在检查源代码,以便我可以制作发布的安装程序。所以,我想看看 1) #1正在 check out 特定文件的用户列表和 2) #2所有 checkout 文件的列表;但我不知道该怎么
我正在使用 Google Checkout 制作购物车。我已经像下面这样集成了 Paypal: " /
tl;dr JGit 的 checkout 抛出异常,而命令行 git checkout 工作正常 我目前正在尝试使用 JGit 从在线 Git 存储库中检查某些修订版,使用 Java(用于工作)。我
在使用“git checkout”时,我对这两个选项感到有点困惑 我总是使用 git checkout -- . 来清除我的工作目录。 但今天当我错误地输入 git checkout - . 时。我没
最近我使用了 Google Checkout a.k.a Google Wallet。我的任务是让它作为付款方式步骤中的选项单页结账。 我的 Mangento 版本是 CE 1.6.2.0 默认情况下
最近我使用了 Google Checkout a.k.a Google Wallet。我的任务是让它作为付款方式步骤中的选项单页结账。 我的 Mangento 版本是 CE 1.6.2.0 默认情况下
git checkout - check out 先前 check out 的提交引用。这些信息存储在哪里,是否有类似的方法来访问任何第 n 个以前 checkout 的提交? 我希望能够查看我已 c
我是一名优秀的程序员,十分优秀!