假设这是我在 git status 中查看的内容:
Changes not staged for commit:
modified: Makefile.in
Untracked files:
../node_modules/somepath/inverter_packet.js
Run Code Online (Sandbox Code Playgroud)
我想做的是将 Makefile.in 从“未暂存提交的更改”移动到“未跟踪的文件”。
我知道我可以忽略使用 所做的更改git update-index --assume-unchanged Makefile.in,并使用命令将它们取回--no-assume-unchanged,但我不想让这些文件完全脱离视图,因为我偶尔会编辑/提交它们。
我想从“未暂存”部分中删除文件,但在输入 时仍会看到它git status。
或者,如果我可以(最好是简单地)在输入时停止显示未暂存文件的差异(例如,像我的 Makefile.in 一样)git diff,那也很好。
我想取消暂存当前工作副本中的所有内容,但会自动暂存我将来编辑的所有文件和大块。
例如,我使用的 CocoaPods 版本与我正在从事的项目中的大多数其他人不同。我想升级配置文件的配置以与我的 CocoaPods 兼容,而不会破坏他们的。最简单的方法是不在拉取请求中包含新配置,但这意味着我无法构建。隐藏和弹出将不起作用,因为如果我在编辑配置后隐藏然后应用我的更改,弹出将修复配置但撤消我的更改。
我应该如何解决这个问题?
这个问题与合并问题非常相似,但有一个关键区别:不存在合并冲突。
所以我正在一个功能分支中工作,提交一些更改,然后运行git merge master. 我的目标是在创建 PR 将分支合并回 master 之前使用最新的 master 更新我的功能分支(这是我们选择的工作流程,其想法是首先解决功能分支上的问题)。我得到零合并冲突,并且合并似乎已完成。当我运行时,git log我的功能分支似乎拥有来自 master 的最新提交。但是,当我运行git status一堆我没有触及的文件(但似乎已在 master 中更新)时,突然进入我的“已提交的更改”列表,其中一小部分显示为“未暂存提交的更改”和“未跟踪的文件”。这不是一对一的,在我的最新示例中,我暂存了 45 个文件,但只有 33 个文件未暂存+修改或未跟踪。我没有提交这些文件,因为功能分支似乎已经拥有来自 master 的最新提交。
迄今为止,我只能通过运行git stash(并定期清除我的存储空间)来处理这个问题。有时我get reset HEAD也会跑过去清理。这看起来没问题,因为我有来自 master 的最新提交。然而,我不确定这些是可取的行为还是正确的做法。我是否因为忽略这些暂存文件而错过了 git merge 工作流程的关键部分?这里发生了什么?这种行为的名称是什么?我在我读过的任何指南中都找不到对此的引用。
最后一点可能会有所帮助。我使用的是 Mac,但这是一个 .net + React 项目,所以很多开发人员都在 Windows 上。这可能是 autocrlf 或平台之间其他行结束变化的问题吗?
有时我运行时git add .会添加不应该添加的大文件。如何在未提交的情况下查看添加了哪些文件?以及如何一次“取消添加”这些文件或所有文件,以便我可以修复.gitignore?
当发生冲突时,git status显示如下:
Unmerged paths:
(use "git restore --staged <file>..." to unstage)
(use "git add <file>..." to mark resolution)
both modified: some_file
Run Code Online (Sandbox Code Playgroud)
现在我可以git add some_file按照命令的建议标记解决方案,但这也会阶段化some_file,我可能不想这样做。
如何标记文件以进行解析而不将其添加到索引中?只需两步即可轻松完成:
git add some_file
git restore --staged some_file
Run Code Online (Sandbox Code Playgroud)
但如果可能的话,我该如何一步完成呢?
如果最佳实践不建议这样做,请告诉我。
我有大量修改过的文件,其中有 2/3 的文件是我不太关心的图像,但我仍然想提交它们。对于其余的事情,我需要认真研究这些变化。为了最大限度地减少我需要查看的文件,我只想暂存 .png、.jpg 和 .gif 文件并提交它们(减少背景噪音以便查看牛肉)。
话说回来...
如何仅暂存和提交具有这些文件结尾的文件而不单独添加每个文件?
编辑:
文件被修改
目录结构不扁平
我正在覆盖我高度定制的 WP 主题,并且需要应用一个安全更新
是否有 --staged(又名 --cached)选项用于比较 git stash 中的文件?
在这里,我将最近的提交与暂存文件进行比较(我使用的是显式 @{} 语法,但我知道可以推断出 @{0}):
git diff stash@{0}:spec/blueprints.rb HEAD:spec/blueprints.rb
Run Code Online (Sandbox Code Playgroud)
在这里,我将存储的文件与磁盘上的文件进行比较:
git diff stash@{0}:spec/blueprints.rb spec/blueprints.rb
Run Code Online (Sandbox Code Playgroud)
我如何将当前上演的内容与存储中的内容进行比较?这不起作用:
git diff --staged stash@{0}:spec/blueprints.rb spec/blueprints.rb
Run Code Online (Sandbox Code Playgroud) git diff --staged 允许您查看 HEAD 和暂存更改之间的更改。
如果我要提交暂存的更改,如何查看 HEAD 中存在的完整文件?如何查看其中的特定行子集?
我可以做,git show <some-commit>:path/to/some/file但是我要替换什么<some-commit>才能获得文件的当前暂存版本?
上下文:我正在编写一个预提交钩子,我想对暂存文件进行检查,而不是诉诸于隐藏未暂存的更改。有没有更好的办法?