Git中的文件既可以上传也可以不上传?

时间:2014-07-19 07:21:57

标签: git version-control

在处理其他文件时,我编辑了README.md,然后运行了git add README.md。在进行git提交时,我发现README.md都在"要提交的更改中#{1}}和#34;未提交的更改"。

这有意义吗?我可以在.git中查看此文件的权威状态吗?

# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#       modified:   README.md
#       modified:   utils/arrterm
#
# Changes not staged for commit:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#       modified:   README.md

4 个答案:

答案 0 :(得分:16)

这意味着您所做的部分更改将暂停以进行提交,而部分更改则不会。

如果您运行

,可以查看暂存的内容
git diff --staged -- README.md

并通过运行

检查未暂停的内容
git diff -- README.md

大多数版本控制系统通常只存储两种状态之间的变化。 git的工作方式,当你对文件进行多次更改时,你必须添加/标记它们中的每一个,作为一组更改的一部分a.k.a一个提交。当您使用git add时,这将自动完成。

然而,这并不是您将所有个人更改(帅哥)添加到您的&#34;索引&#34;的唯一方法。例如,您可以对同一个文件进行多次更改,并在不同的提交中提交它们,或者只对提交添加特定的更改。例如。明确地为你的&#34;索引&#34;添加一些更改。但不是其他人,你可以使用git add -p只添加一些&#34;帅哥&#34; (组)更改而不是整个更改列表本身。

此处发生的事情是您在登台(README.md)之前对git add 所做的更改将在暂存时显示,并且您在之后所做的任何更改 strong> staging README.md将显示为未上映的。

答案 1 :(得分:7)

  

在.git中我可以查看此文件的权威状态吗?

使用git diff

  • git diff -- yourFile会为您提供尚未上演的更改(尚未添加到索引中)
  • git diff --cached -- yourFile会为您提供已添加到索引中的更改。

请参阅&#34; Changes, not files&#34;:

  

大多数版本控制系统都使用文件。您将文件添加到源控件,系统将跟踪此时的更改。

     

Git专注于对文件的更改,而不是文件本身   git add file命令不会告诉git将文件添加到存储库,而是要记录文件的当前状态,以便稍后提交。

另见&#34; git add -p: The most powerful git feature you're not using yet&#34;


请注意,git status -v -v将很快(Git 2.3.4,2015年第2季度)显示两个差异(分阶段和非分阶段),可能列出同一文件的不同差异。

请参阅&#34; Show both staged & working tree in git diff?&#34;。

答案 2 :(得分:1)

实际上你看到的状态很容易重现:

git init
touch test
git add test     #1
echo 42 > test   #2
git status       #3
在#1中,我们将空的测试文件暂存。 #2更改文件的内容。这些更改不会被暂存(因为您需要使用git add显式更改更改)。 #3中git status的输出完全告诉您。

要查看已暂存的更改,请运行git diff --cached。要查看尚未暂停对工作副本文件的哪些更改,请运行git diff

在你的问题中,所以说你跑了git commit。从您的git status输出看起来好像没有创建提交,可能是因为您没有输入提交消息。检查git commit的输出,git可能告诉你在尝试创建提交时出了什么问题!

答案 3 :(得分:1)

回答“这有意义吗?”

只有了解git不存储存储快照的差异才有意义。

在您描述的示例中,您的更改中有两个版本的README.md。分阶段的版本是您目前满意的版本,如果您选择提交,它将最终成为文件的最新快照。未分级版本是一个潜在的快照,如果您选择暂存,它将取代当前暂存的版本。

请阅读以下链接中的“快照,而不是差异”部分,以便更好地了解git的工作原理:

http://git-scm.com/book/en/Getting-Started-Git-Basics

另请查看以下链接,以进一步说明您已包含在问题中的方案(特别是“暂存已修改的文件”部分):

http://git-scm.com/book/en/Git-Basics-Recording-Changes-to-the-Repository