Git提交问题

26

我刚刚提交了我的工作目录,首先将文件添加到索引中,并使用"$git commit -m 'test'"进行提交。我将标准输出保存到一个文件中,然后查看文件开头的内容时发现它说:

# On branch master  
# Changed but not updated:  
# (use "git add/rm ..." to update what will be commited)  
# (use "git checkout -- ..." to discard changes in working directory)"  

我的问题在于我的工作树没有被提交到仓库,我感觉这与此有关。

谢谢。


Ubuntu服务器,git 1.5.6 - deepblue
1
我建议的第一件事是升级你的Git版本,最新版本是1.6.5.3。我非常确定你引用的那些特定信息已经自1.5.x以来得到了改进。 - Greg Hewgill
啊,抱歉,我手头的版本是1.6.3.3。 - deepblue
我建议升级到Ubuntu存储库版本之外的版本,因为较新的版本似乎使处理空格更加简单:我刚刚在此处添加了PPA:https://launchpad.net/~git-core/+archive/ppa 然后进行了升级。 - Kzqai
我刚从Git的官方下载站点下载了版本,所以应该没问题。不过还是谢谢你,我很感激。 - deepblue
显示剩余2条评论
8个回答

29

简短回答:

git push -u origin master

详细回答:

您很可能正在尝试推送提交到尚未创建的分支,例如在新创建的Github存储库中没有自动创建的README文件。通过调用git push -u origin master,您指定了您需要推送到的远程(通常为git默认值的原点)和分支(主分支,在典型情况下也是默认值)。 根据git文档:

-u, --set-upstream 对于每个已经更新或成功推送的分支,添加上游(跟踪)引用,由无参数的git-pull(1)和其他命令使用。有关更多信息,请参见git-config(1)中的branch..merge。

这意味着在成功运行此命令后,从那时起,您将能够只使用git pushgit pull,它将默认为origin master(有一些例外)。


6
在提交更改之前,您必须先将其添加到索引中:
git add myfile
git commit -m "test"

或者,您可以采用更类似于SVN的风格工作,并提交所有更改的内容:

git commit -a -m "test"

或者您可以只添加和提交单个文件:

git commit myfile -m "test"

我已经完成了所有这些。正如我在对Jed的回答下面的评论中提到的,我移动了很多文件,所以我认为在这种情况下提交-a不起作用,因为文件正在被删除和重新引入...我认为git会将它们视为新文件。 - deepblue
我只能建议您在认为已经添加文件到存储库时实际上并没有这样做;当我在没有先运行git add的情况下运行git commit时,您的消息正是我看到的。 - Will Robertson
有点奇怪。我每次都执行 'git add .',应该没问题的。嗯,不过还是谢谢你指出来。 - deepblue
如果您明确添加所需的文件,它是否有效? git add foo bar baz - Will Robertson
这是一个很大的变化,就像我所说的,我重新组织了整个项目的文件夹结构,因此手动完成太多文件移动/删除操作。 - deepblue

2

在提交之前,你是否执行了git add .操作?

在执行git addgit commit之前,最好先执行git status查看已更改和暂存的内容。

执行git diff可以很方便地查看你即将提交的具体更改。

如果你添加了一个文件并重命名它,git status会显示以下内容。

me@home:~$ git status
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#   new file:   foo.txt
#
# Changed but not updated:
#   (use "git add/rm <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#   deleted:    foo.txt
#
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#   bar.txt

此时,您只需执行git add .然后git status将会提供更多信息,可能指出您仍具有名为foo.txt的新文件和已删除文件。要解决这个问题,您需要在执行git commit之前手动git rm foo.txt

将来,如果您想移动存储库中的文件,应该使用git mv


是的,“git status”很酷。它也报告了我在问题中提出的消息。这些该死的更改就是没有被提交。我花了一整天阅读教程和文档,试图找到一些可以尝试的东西。 - deepblue
1
如果您对提交所做的更改,您需要重新执行 git add。如果您执行 git status,然后执行 git add .,再次执行 git status,您应该会看到一个差异。 - mlibby
并且,“进行任何更改”包括对文件的更改,重命名文件,删除文件,添加文件……任何可能使git混淆的操作。 - mlibby

1
还有一件事需要注意,git add命令会在你运行它的时候将这些文件的内容添加到索引中。如果你在运行git add之后修改了文件,新的更改不会显示在索引中。

在“add”和“commit”调用之间没有进行任何其他工作。 - deepblue

0
如果您移动文件并在之后使用git add,Git仅添加新副本,但不会删除旧副本:
$ git status
# On branch master
nothing to commit (working directory clean)
$ mv from to
$ git add .
$ git status
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#   new file:   to
#
# Changed but not updated:
#   (use "git add/rm <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#   deleted:    from
#
$ git commit -m "..."
$ git status
# On branch master
# Changed but not updated:
#   (use "git add/rm <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#   deleted:    from
#
no changes added to commit (use "git add" and/or "git commit -a")

为了删除旧版本,您还应该使用git rm命令:

$ git rm from
rm 'from'
$ git commit -m "..."
$ git status
# On branch master
nothing to commit (working directory clean)

但我不明白为什么它不允许您提交这些更改。


0

你真的需要阅读文档。

git add yourfile
git commit -m "test"

或者,要提交所有更改的文件--

git commit -a -m "test"

当然,我首先将工作树添加到索引中($git add .),之后运行了($git commit -m 'test' > view_file)。我从上次提交以来重新组织了我的工作树,因此删除了很多旧文件并将它们重新插入到新位置...这就是为什么我将输出保存到文件中,以便我可以查看git说了什么。 - deepblue

0

大家好,我在使用Git时遇到了同样的问题。
我正在Windows 8上运行Cygwin。

  1. 检查您要提交的存储库是否存在。
  2. 检查路径

$ git remote -v # 这是您可以查看路径的方法

$ git remote set-url origin git@github.com:username/repos.git # 这是如何远程设置新路径以将文件推送到正确的存储库。 $ git remote -v # 检查是否设置了正确的路径。

  1. $ git add .

4.

 $ git push origin master

希望这可以帮到你


0
这是我需要的内容: < p > < code > git push -u origin main


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接