gpt4 book ai didi

git - 为什么存储表示为 2 次提交?

转载 作者:IT王子 更新时间:2023-10-29 01:30:42 25 4
gpt4 key购买 nike

当存储一些更改时,Git 会创建两个单独的提交,“WIP on branch”和“index on branch”:

$ git log --graph --all 

* commit 98aac13303ca086580c1ec9ccba5fe26c2a8ef3c
|\ Merge: 7d99786 82c5c76
| | Author: Tieme <my@email.com>
| | Date: Wed Nov 19 09:58:35 2014 +0100
| |
| | WIP on development: 7d99786 Last real commit
| |
| * commit 82c5c763357c401135675a39bfabf9b7f6805815
|/ Author: Tieme <my@email.com>
| Date: Wed Nov 19 09:58:35 2014 +0100
|
| index on development: 7d99786 Last real commit
|
|
| * commit 7d9978637a0e1ef92f2432189bdebf2317f0b2f0
| Author: Tieme <my@email.com>
| Date: Tue Nov 18 17:32:33 2014 +0100
|
| Last real commit
|

我查找了 documentation为此,但它并没有使它更清楚:

A stash is represented as a commit whose tree records the state of the working directory, and its first parent is the commit at HEAD when the stash was created. The tree of the second parent records the state of the index when the stash is made, and it is made a child of the HEAD commit. The ancestry graph looks like this:

         .----W
/ /
-----H----I

where H is the HEAD commit, I is a commit that records the state of the index, and W is a commit that records the state of the working tree.

为什么我更改的文件创建了 2 个提交而不是一个?

最佳答案

简答

git stash 区分索引上的更改和工作树中的更改,并为两者创建提交。

长答案

一些背景

使用 git 时,您在工作树(您直接使用的文件)中所做的更改可能与您在索引中所做的更改不同。

仅将有限数量的文件添加到索引,或者使用 git add --patch 甚至在文件中添加单个更改的行都会使您的索引处于与工作树不同的状态。< br/>这是一件好事,因为它使您能够创建专注于一个特定任务/功能的提交。

甚至有可能您对索引进行了更改,而这些更改不再是您的工作树的一部分。您可以通过向索引添加一些更改 (git add)、从文件中手动删除它们然后创建提交 (git commit) 来测试它。
提交仍将包含您首先添加的更改,尽管它们不再存在于您的工作树中。

如果您无法理解工作树和索引之间的区别,您可以查看 this question .

到底发生了什么?

现在开头的陈述应该更有意义了。一个“stash 提交”包含您在工作树(您直接使用的文件)中所做的所有更改,另一个包含您添加到索引中的更改。

默认情况下,git stash popgit stash apply 只会尝试恢复您在工作树中所做的更改,而忽略您在索引中所做的更改。可以通过使用 --index 标志告诉 git stash 尝试恢复你的索引(git stash (pop|apply) --index).

关于git - 为什么存储表示为 2 次提交?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27012878/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com