Git重定基址并修复冲突时,文件不会';似乎不再需要修改了

Git重定基址并修复冲突时,文件不会';似乎不再需要修改了,git,git-rebase,git-merge-conflict,Git,Git Rebase,Git Merge Conflict,我正在尝试对master执行一个git-rebase。我有28个折扣。所以,在某些阶段,我会遇到冲突。我进行了调整,然后执行git status,修改后的文件就会出现。但是,当我执行git add{filename}时,有时文件会从modified中消失,并且更改为提交列表 是因为一些git错误,还是因为我无意中使代码与master分支相同 是[消失状态]。。。因为我无意中使代码与master分支相同 虽然“无意”可能是错误的;也许你是故意这么做的,却没有意识到这是你的目的。不过,说“与mast

我正在尝试对master执行一个git-rebase。我有28个折扣。所以,在某些阶段,我会遇到冲突。我进行了调整,然后执行git status,修改后的文件就会出现。但是,当我执行
git add{filename}
时,有时文件会从
modified
中消失,并且
更改为提交
列表

是因为一些
git
错误,还是因为我无意中使代码与
master
分支相同

是[消失状态]。。。因为我无意中使代码与
master
分支相同

虽然“无意”可能是错误的;也许你是故意这么做的,却没有意识到这是你的目的。不过,说“与
master
分支相同”是不对的。作为,这意味着该文件现在与
提交相同

在我们讨论细节之前,让我回到这里:

但是,当我执行
git add{filename}
时,有时文件会从
modified
中消失,并且
更改为提交
列表

让我们看看git status实际上做了什么。首先,让我们定义工作树、索引以及提交,特别是头部提交。然后,让我们看看什么是Git差异。然后我们可以进入
git status
并查看
git-rebase
的过程

为此,请记住,文件树(或仅树)是文件的集合,从顶层目录(或“文件夹”(如果您喜欢该术语)开始,它可能包含其他子目录(“子文件夹”)以及包含文件。树是包含所有内容的顶级目录:它自己的所有文件,加上任何子树及其文件,以及任何子树等等

工作树、索引、提交和
HEAD
你的工作树就是:你工作的树(目录)。它以正常格式保存所有文件,编辑器和计算机的其他部分可以使用这些文件。(它也可以包含不参与Git的文件:这些文件称为未跟踪文件。例如,如果您将源代码构建到目标代码中,或者将Python转换为字节编译的
*.pyc
文件,则这些文件仅保留为工作树,即故意未跟踪。)

索引也称为暂存区,有时缓存只是构建下一次提交的地方。使用
git add
将给定的
从工作树复制到索引中,替换以前存在的文件版本。当您最终运行
git commit
时,git会将索引中的任何内容(包括所有子目录及其文件,以及所有顶级文件)转换为新的commit。1

提交是Git存在的主要原因。每个提交存储一棵树。该树是提交时索引中的内容的快照。每个提交还存储一些元数据。我在这里不完全定义这个术语,而是使用每个提交的实际元数据示例。这些是:

  • 树本身。(快照是一个独立于提交的实体。我们在这里并不真正需要关心这一点,但稍后可能会有问题,我们不妨在中进行适当的描述。)
  • 父提交ID的列表,通常只有一个ID。这是在进行新提交之前进行的提交
  • 作者:姓名、电子邮件地址和时间戳。这就是编写新代码或新文本的人,或者与之前的提交相比,关于这个提交的“新”内容
  • 提交者:与作者的想法相同,只是第二个人,以防编写新提交的人不是运行
    git commit
    的人。例如,通过电子邮件发送的修补程序就是如此
  • 日志消息。这是一个自由格式的文本,无论是谁提交,都可以很好地描述提交的原因
因为每个提交都存储在它之前的提交ID,所以一系列或一系列提交让我们可以查看开发历史:

A <- B <- C   <-- master
如果您不在分支上,则
HEAD
实际上包含一个原始提交ID。在这种情况下,
git commit
将新的提交ID直接写入
HEAD
。(这就是在发生冲突的
git重基
期间发生的情况,这就是我提到它的原因。)但在任何情况下,请参见此处的提交
D
如何指向提交
C
:新快照始终引用上一个快照

同样,
提交始终是当前提交。我们马上就需要这个了,当我们开始调整基础的时候


1这不太准确。如果递归展平一棵树,则会得到索引。这使得将索引转换为树变得很容易(ish),因此Git在这里就是这么做的:它使用
Git write tree
将索引转换为树。这会让Git成为一个丑陋的SHA-1散列ID。Git然后将此哈希ID用于新提交。通过将索引复制到树中,然后将树ID放入提交中,Git最终将索引的内容保存为新提交的快照

2这条规则有一个例外。由于初始空存储库没有提交,因此需要此异常。显然,如果没有提交,就不可能将
HEAD
解析为提交哈希ID。不过,出于我们的目的,我们不需要关心“孤立”或“未出生”分支的这种特殊情况


git diff
,二对三树 虽然
gitdiff
有很多选项和使用模式,但最简单、最直接的
A <- B <- C <- D   <-- master (HEAD)
-the color purple
+the colour purple
-the colour purple
+the color purple
...--D--E--F       <-- master
         \
          G--H--I--J--K   <-- sidebr
             G'  <-- HEAD
            /
...--D--E--F       <-- master
         \
          G--H--I--J--K   <-- sidebr
             G'-H'  <-- HEAD
            /
...--D--E--F       <-- master
         \
          G--H--I--J--K   <-- sidebr
             G'-H'-I'-J'-K'  <-- HEAD
            /
...--D--E--F       <-- master
         \
          G--H--I--J--K   <-- sidebr
             G'-H'-I'-J'-K'  <-- sidebr (HEAD)
            /
...--D--E--F       <-- master
         \
          G--H--I--J--K   [abandoned]