主持人注意:鉴于此问题已经发布了67个答案(其中一些已删除),请考虑在发布另一个问题之前是否提供任何新内容.
git pull和之间有什么区别git fetch?
TL;DR:当一个文件已暂存和未暂存更改时,一次提交将提交两个版本,以及对该文件的最新更改。为什么?我认为提交只会提交暂存版本,如下所示: https: //stackoverflow.com/a/19892657/279516。
假设我们的工作目录中有一个文件。(它之前已提交给回购协议。)
$ ls
foo.txt
Run Code Online (Sandbox Code Playgroud)
该文件的内容当前只有一个字符(数字 1):
$ cat foo.txt
1
Run Code Online (Sandbox Code Playgroud)
让我们将文件的内容更改为“12”。现在我们有这个:
$ cat foo.txt
12
Run Code Online (Sandbox Code Playgroud)
我们的工作目录显示了更改(为简洁起见,删除了说明性 git 输出):
$ git status
modified: foo.txt
Run Code Online (Sandbox Code Playgroud)
现在 agit add将该文件添加到暂存索引中。
$ git add foo.txt
Run Code Online (Sandbox Code Playgroud)
您在这里看不到它,但文件名现在是绿色的,表明它已经上演:
$ git status
modified: foo.txt
Run Code Online (Sandbox Code Playgroud)
此时,我们可以提交该文件,它将成为我们本地存储库的一部分。不过,让我们foo.txt先改变一下,看看会发生什么。
$ cat foo.txt
123
Run Code Online (Sandbox Code Playgroud)
如果我们检查,git status我们会看到foo.txt 的两个版本:
$ git status
On branch master
Changes to be committed:
modified: foo.txt
Changes not staged for commit:
modified: foo.txt
Run Code Online (Sandbox Code Playgroud)
第一个foo.txt是绿色的。第二个是红色的。第一个的内容是“12”。第二个是“123”。如果我们现在承诺会发生什么?foo.txt仅应提交分阶段的内容。因此, …