git difftool --tool=vimdiff --no-prompt HEAD~1 HEAD
git 将打开 vim,左侧和右侧有两个临时文件。有没有办法强制打开右边的repo文件,这样我就可以直接修改了?
否:因为您选择了两个特定提交,所以没有要更改的文件。
\n\n这么说似乎有点奇怪。这实际上有点奇怪,直到您意识到提交的这一点:虽然提交确实包含文件,1它们包含的文件被冻结。它们中的任何一个都无法改变。它们是已提交的,并且任何提交的内容都与提交本身一样永久,2并且完全只读。
\n\n当然,当您使用 Git 时,您有可以更改的文件。如果不这样做,就很难使用 Git。但这些不是提交的文件:那些是工作树副本。如果您直接git difftool --tool=vimdiff使用这些文件作为操作的一方面,它已经直接打开这些文件。要做到这一点:
git difftool --tool=vimdiff <options> <commit>\nRun Code Online (Sandbox Code Playgroud)\n\n例如,其中<options>包括您的--no-prompt并且<commit>可能再次出现。HEAD~1
(与 一样git diff,git difftool可以被告知比较两个提交,或者比较一个提交与当前工作树。没有选项可以将提交与当前索引内容进行比较。这个答案的其余部分没有提到索引,但是索引保存每个文件的第三个副本。提交内的文件采用特殊的、只读的、仅限 Git 的格式。工作树中的文件采用有用的格式,以便您可以直接读取或编辑它们。文件索引中的数据位于中间区域,位于HEAD冻结的提交和正常的工作树之间:索引副本已解冻,但仍仅限 Git 且已压缩。Git从索引副本进行新提交,这就是为什么你必须一直跑步git add。)
1从技术上讲,提交与其说包含文件,不如说包含文件。文件使用一系列间接存储:提交指向树对象,该对象给出文件的名称、模式和内容的哈希 ID;然后树中的哈希 ID 指向保存文件内容的Git blob 对象。这允许两个不同的树(可能具有不同的模式或不同的文件集)重新使用现有的冻结文件内容,并允许不同的提交(可能具有不同的作者或时间戳)重新使用现有的冻结树,这些冻结树重新使用现有的冻结文件承诺。这只是 Git 用来节省大量空间的几个技巧之一,尽管每次提交都存储每个文件的完整副本:在幕后,旧文件被大量重复使用。
\n\n2提交通常会永远存在,但是如果每个拥有由某个哈希 ID\xe2\x80\x94 标识的提交\xe2\x80\x94 的人都同意永远停止使用该提交并将其从历史列表中删除,Git 最终将忘记真正的提交。如果有人不同意,他们可以轻松地再次重新引入提交,事实上,这是默认的。因此,一旦提交被传播到其他 Git 存储库,就很难永久删除它们,因为要永久删除它们,您必须从每个拾取它们的 Git 存储库中删除它们。
\n| 归档时间: |
|
| 查看次数: |
650 次 |
| 最近记录: |