当我想获取git diff文件时,我发现有人使用
git diff-index --cached --diff-filter=AM --name-only HEAD
Run Code Online (Sandbox Code Playgroud)
如果我使用
git diff --cached --diff-filter=AM --name-only HEAD
Run Code Online (Sandbox Code Playgroud)
可以得到相同的结果.那么git diff和之间的区别是git diff-index什么?当你必须使用git diff-index但不是git diff吗?
上下文:我希望能够通过我的git提交消息和提交进行搜索而无需经历令人费解的复杂git grep命令,因此我决定看看如何存储git commit消息.
我看了一下.git文件夹,它看起来像是存储的提交
.git/objects
Run Code Online (Sandbox Code Playgroud)
.git对象文件夹包含一堆名称为a6和9b的文件夹.这些文件夹中的每个文件夹都包含一个名称类似于提交的文件2f29598814b07fea915514cfc4d05129967bf7.当我在文本编辑器中打开其中一个文件时,我会感到胡言乱语.
在这个git commit日志中,文件夹9b包含一个commit sha
aed8a9f773efb2f498f19c31f8603b6cb2a4bc
Run Code Online (Sandbox Code Playgroud)
为什么,并且是否存在多个提交sha将存储在文件9b中的情况?
有没有办法将这个乱码转换成纯文本,以便我可以在文本编辑器中混淆提交?
我喜欢直接修改配置文件(比如.gitignore和.git/config)而不是记住任意命令,但我不知道Git在哪里存储传递给"git update-index --assume-unchanged"文件的文件引用".
如果你知道,请告诉我!
我有一个状态的本地仓库禁止我提交,藏匿,结账到另一个分支,甚至放弃更改.所以我只是卡住了.
据我记忆,我会试着描述一下这些情况给我带来了什么.
请坐下
不久之前,在远处的另一台计算机......根据以下内容在项目中另一个开发标准化的crlf:https://help.github.com/articles/dealing-with-line-endings
在那一刻(你知道,光速......)我在本地做了一些改变,提交和拉动.
当我拉Git说:
error: Your local changes to the following files would be overwritten by merge:
wp-config.php
Run Code Online (Sandbox Code Playgroud)
wp-config.php之前已从索引中删除,git update-index --assume-unchanged wp-config.php因为它的模板配置文件适用于每个本地环境.
基础"模板"可以改变.没什么好惊讶的.这就是我的计划:
wp-config.phpstash 我自己的配置发生变化pull origin masterstash apply 我的配置回来了在第3步出现问题git pull origin master仍然是上面的错误,好像存储无效.
git status说wp-config.php没有进行改变的提交.在藏匿之后,这让我感到惊讶.
自从我把我的变化藏起来后,我跑了git checkout -- wp-config.php......但没有任何效果!文件仍未进行提交.
由于我变得疯了,我创建了一个新的分支my-config,添加并提交wp-config.php到它,然后切换回master,删除wp-config.php(使用git rm),并合并origin/master ...成功!
所以现在主人是最新的和干净的,我计划在没有Git帮助的情况下恢复我自己的配置(手动编辑文件).
因为我想知道发生了什么,我切换到my-config分支,并尝试了一个非常简单的操作:
git stash
git stash apply
Run Code Online (Sandbox Code Playgroud)
你猜怎么着?stash apply …
我正在学习Git,如果我有一个代表Git repo的数学结构的描述,那将会很棒.例如:它是一个有向无环图; 它的节点代表提交; 它的节点有标签(每个节点最多一个标签,没有标签使用两次)代表分支等(我知道这个描述不正确,我只是想解释我在寻找什么.)
是否可以修改默认git-merge-one-file程序以在不触及工作树的情况下执行索引中的所有操作,使其完全不修改?
更新和细节
所以我现在明白,如果不使用工作树,就不会发生文件级合并(合并对文件中的行而不是整个文件).(与整个文件的合并不同.)所以我将不得不使用工作树.
另一个细节:我可以使用该解决方案仅在合并可以自动完成而无需手动解决的情况下工作.如果合并不是自动的,它只是显示错误消息是没关系的.(当然,保持一切都干净.)
另一个细节:我没有git-merge-one-file直接使用,我在这个脚本中使用它:https://gist.github.com/cool-RR/6575042
我试着按照@torek的建议并使用临时工作树(正如你在脚本中看到的那样),因为这似乎是迄今为止最好的方向.问题是,我得到这些错误:
git checkout-index: my_file is not in the cache
error: my_file: cannot add to the index - missing --add option?
Run Code Online (Sandbox Code Playgroud)
我搜索了这些错误消息,但找不到任何有用的信息.
知道该怎么办?
它是否显示来自本地存储库、临时存储库、远程存储库或其他地方的文件?
我经常看到“git ls-files”中存在的文件。该文件已从远程存储库中删除。之后我尝试做一个 git pull 。但是,该文件仍显示在此命令列表中。它不应该出现在这里,因为它也不存在于远程存储库中。
怎么可能在尝试压缩/修复线性分支时仍然需要手动合并?repo已从Subversion转换而来.每个冲突都是"自动挑选失败"或"由于空提交消息而中止提交".后者我能理解,但是一个--fixup-empty或者什么东西会有用.
典型输出:
user@machine:/path (master|REBASE-i)$ git add * && git rebase --continue
[detached HEAD c536940] fixup!
Author: John Doe <John.doe@example.com>
2 files changed, 57 insertions(+), 4 deletions(-)
Automatic cherry-pick failed. After resolving the conflicts,
mark the corrected paths with 'git add <paths>', and
run 'git rebase --continue'
Could not apply 8854a54... >6d5f180 foo
user@machine:/path (master|REBASE-i)$ git st
# Not currently on any branch.
# Unmerged paths:
# (use "git reset HEAD <file>..." to unstage)
# (use "git …Run Code Online (Sandbox Code Playgroud) 我的下列理解git add file和git checkout -- file(但我不知道这是否是正确的).
每当我们使用文本编辑器编辑文件时,我们都会在工作目录中进行编辑.每次我们都可以staging area通过执行将文件移动到所谓的git add file_name.如果我们再次编辑文件(之后git add),我们更改工作目录中的文件,这样,在工作目录中,我们使文件处于"新"状态,而staging area文件处于"旧"状态.
当我们git add再次使用时,我们将暂存区域中的文件带到"新"状态(工作目录中的状态).
如果我们这样做git checkout -- file_name,我假设我们从暂存区域获取一个文件并使用它来覆盖工作目录中的文件.通过这种方式,我们可以将工作目录中的文件置于"旧"状态.这是对的吗?
我还不清楚的是,如果我们从暂存区域复制或移动文件.换句话说,确实git checkout -- file改变了文件的状态staging area.我们可以说,在git checkout -- file暂存区域中的文件将文件状态更改为暂存区域中的先前状态后?
当我使用时,git show-index我得到这样的东西:
12 3efc399e3f684061ef13c5b7dfde66342ef23033 (44b2e14e)
218 53f4215e537f351457713ad4f18d6e5d5dedf333 (480e84f1)
422 b532ec8e8e38c52002e953c878010391245eaa84 (bbaa1b63)
625 bb4359ded039eefe9fab5c99f196c67ba1a9493e (68e4b84f)
Run Code Online (Sandbox Code Playgroud)
根据手册页,前两个值是packfile中的偏移量和每个对象的sha1.但括号中的第三个值是什么?我找不到任何相关的东西.
git ×10
git-add ×1
git-checkout ×1
git-index ×1
git-rebase ×1
git-stash ×1
graph ×1
newline ×1