问题标签 [git-index]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
1228 浏览

git - Git:什么是索引

在此处输入图像描述

从这张图片中,提交是指向根树的指针,根树是指向其他树和 blob 的指针。但是什么是正确的索引视图?

问题:

  • 它是具有文件夹结构的类似树状结构还是只是 blob 的平面视图?

  • 如果索引是树状的,那么提交和索引之间有很大区别吗?

  • 索引看起来更像是完整快照还是差异?

0 投票
2 回答
2674 浏览

git - 尽管“文件末尾没有换行符”警告,如何在 git gui 中逐行分段

我使用git gui来选择要为提交暂存的行。这通常像一个魅力。我知道在命令行上执行相同操作的选项。

每当文件最初在文件末尾没有新行时,git gui会识别这一点并在编辑器中附加一条警告消息,如屏幕截图所示。

吉特桂

问题

缺少换行符导致的问题是不能再暂存和提交单独的行。当我右键单击以选择特定行并Stage line for commit从上下文菜单中选择时,会弹出一条错误消息。

错误:致命:第 11 行的损坏的 parch。

该问题并非特定于操作系统,可以在 Windows、MacOSX 和 Linux 上重现。我知道如果我在文件中添加一个新行并在继续选择单独的行之前提交这个版本,我可以避免这个问题。

重现问题的步骤

  1. 初始化一个新的存储库。
  2. 创建一个包含三行内容的文件,每行都带有单词“Hallo”。不要在文件末尾添加新行。
  3. 添加并提交文件。
  4. 编辑同一个文件,将单词放在三行之间。
  5. 打开git gui并尝试逐行进行更改。

要求

我想知道 Git 是否有一些配置可以让我规避这个问题。一些自动操作,例如添加所需新行的钩子也可以。

错误报告

我向 Git 邮件列表发送了一个错误报告。您可以在此处关注并参与讨论。

0 投票
1 回答
203 浏览

git - Git:仅更改索引中文件的posix权限

我可以设置(或在使用时取消设置-x)执行位,但是如何设置索引中文件的完整权限(例如744)?

0 投票
2 回答
100453 浏览

git - Git - “假设不变”和“跳过工作树”之间的区别

我对不想提交到存储库的文件进行了本地更改。它是用于在服务器上构建应用程序的配置文件,但我想使用不同的设置在本地构建。自然,当我将“git status”作为要暂存的内容时,该文件总是会显示出来。我想隐藏这个特定的更改而不是提交它。我不会对文件进行任何其他更改。

澄清一下,使用 .gitignore 不是我想要的,因为这只会阻止添加新文件。我想忽略对存储库中已有文件的更改。

经过一番挖掘,我看到了 2 个选项:assume-unchangedskip-worktree. 以前的问题在这里谈到了它们,但并没有真正解释它们的区别。

这两个命令有何不同?为什么有人会使用其中一个?

0 投票
3 回答
58 浏览

git - 您可以在 git diff 期间暂存文件(或至少是文件的一部分)吗?

在暂存文件之前,我喜欢执行 agit diff以检查一切是否正常。当我垂直遍历一个差异时,我会记下每个“可以”用于暂存的文件。如果它是一个特别长的差异,我发现很难跟踪哪些是好的,所以我倾向于每隔一段时间退出差异并尽我所能。这有点乏味。

有没有办法改进这个工作流程?显然,一开始就不应该让他们的差异变得很大,但有时事情不会像那样进行(例如,更改跨多个文件调用的方法的方法签名)。

例如,是否可以将所有内容从当前活动的git diff“会话”的“顶部”到您所在的差异中的当前点?这样我就可以在不退出差异和失去思路的情况下继续进行演示。

0 投票
1 回答
1322 浏览

git - git Bug 阻止合并

如何git bisect处理 git bug 或恢复我的 git 索引。首先出现错误消息,然后尝试以下修复失败

使用 GIT_MERGE_VERBOSITY=5 我运行git merge origin master并得到......

  • git reset --hard不起作用(后续合并仍然失败)。
  • 在任一方向(master -> mybranch 或 mybranch -> weather)合并都会导致相同的 BUG。
  • 有问题的文件在工作目录中不存在,但 master ( edb/migrations.broken/) 中的相关空目录在 master 结帐时被删除rm -f,并且git committed (但显然 git 记录索引中没有任何更改)修复
  • 不高兴git update-index --force-remove --unmerged --really-refresh --again --remove
0 投票
0 回答
102 浏览

git - git:列出跳过工作树文件的非弃用方式?

互联网建议git ls-files -v查找标记为跳过工作树的文件。

-vflag of 的文档git-ls-files说它类似于-t“半弃用”的 flag。

是否有一种不推荐使用(和/或可编写脚本)的方式来查找跳过工作树文件?

0 投票
3 回答
123 浏览

git - 从工作树中的混乱更改中进行干净的提交

有时我最终会得到一个有很多更改的工作树,主要是在匆忙编码之后 - 更改如此之多,可以容纳 20 次提交,分布在 2 或 3 个分支中。为了清理工作树并很好地提交所有内容,我遵循了这个令人不快的工作流程:

  1. 用于git add -p检查工作树中的所有块,而不将任何内容保存到索引中(即对每个块回答“不,不要暂存这个”)。同时,我尝试在心理上将这些帅哥分组为提交,并记下一些我应该用我看到的帅哥构建的提交的笔记(在文本文件中)。

  2. 在我将每个大块分配给一个提交之后(在我的笔记中),然后我重新开始git add -p,并且只对进入第一个提交的大块回答“是的,暂存这个”。在检查了所有的帅哥并挑选了我想要的之后,我实际上做了提交。

  3. 只要有大块留在第 2 步重复git add -p。这意味着对于我在笔记中的每一次提交,我都会仔细检查所有内容。

这显然是一次处理许多变化的一种非常愚蠢的方式。有没有一种好方法可以从许多更改开始,将它们整理出来,然后在它们的正确分支中以一组不错的提交结束?

也许有一种方法可以在多个索引中同时增量构建多个提交。或者也许我应该将所有更改提交到一个大提交中,然后以某种方式将其拆分为多个?或者也许有一种方法可以(ab)使用git stash来帮助将更改组合在一起?

0 投票
11 回答
183891 浏览

git - Undo git update-index --assume-unchanged

I have run the following command to ignore watching/tracking a particular directory/file:

How can I undo this, so that <file> is watched/tracked again?

0 投票
1 回答
234 浏览

git - 如何从 git 索引中删除修改后的文件并在一个步骤中丢弃修改?

我最近对错误的分支进行了一次草率的大提交。我决定希望将提交的更改放在不同的分支上,并可能将大提交拆分为几个较小的提交。我git cherry-pick -n按照这个答案执行了一个。这导致了我当前分支中的一系列阶段性更改。我知道我不需要这些改变之一。所以我想知道:有没有办法从索引中删除修改过的文件并在一个步骤中丢失更改?我见过的大多数解决方案都需要 agit reset后跟git checkout -- path/to/file.