Git推动没有看到我所有的变化

时间:2015-03-20 09:24:56

标签: git github gitignore

我创建了一个私人GitHub仓库,说https://github.com/myuser/myprivrepo,并选择让它为我生成.gitignoreREADME.md。然后我在本地克隆了这个repo并添加了一堆文件。我还修改了我的.gitignore以及GitHub为我生成的README.md

然后我做了这个:

git commit -a -m "Initial commit with basic project structure."

然后这个:

git push

它要求我进行身份验证,我做了,并且"推送"似乎很成功。所以我回到我的GitHub仓库,在刷新页面后,我仍然只看到我的两个GitHub生成的文件(.gitignoreREADME.md),但是它们已经更新了我的更改,甚至显示正确更新的时间戳和提交消息(" 基本项目结构的初始提交。")旁边。

因此推动两个GitHub生成的文件被更改,但忽略了我的所有其他更改。这是我的.gitignore

*.class
.mtj.tmp/
*.jar
*.war
*.ear
hs_err_pid*
.metadata
.gradle/
bin/
tmp/
*.tmp
*.bak
*.swp
*~.nib
local.properties
.settings/
.loadpath
.project
.externalToolBuilders/
*.launch
.cproject
.classpath
.buildpath
.target
.texlipse

我添加但GitHub上没有的文件的示例是build.gradle,它不应该被忽略文件中的任何内容匹配。想法?

注意:当我右键单击我的本地repo根目录并转到Git Gui时,我发现GitHub上缺少的所有文件都在本地显示为"不分阶段&#34 ;.不确定这是否意味着什么。

2 个答案:

答案 0 :(得分:1)

git commit -a不会添加以前未跟踪的文件。您可以使用git add .在提交之前添加所有内容。那时不再需要-a

Quoting the commit manual(强调我的):

  

-a
  --all

     

告诉命令自动暂存已修改和删除的文件,但是你没有告诉Git的新文件不受影响

答案 1 :(得分:1)

看来GitHub很好。执行git commit -a时,git已经跟踪的所有文件都已提交,在您的情况下,这些文件只是GitHub生成的文件。除非您git add <file>git commit <file>,否则不会提交新文件。要检查git正在跟踪哪些文件,请使用git ls-tree -r master --name-only。在提交之前做git status可能也很有用:

$ git status
On branch master
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)

        ### Files which will be committed with git commit -a appear here

Untracked files:
  (use "git add <file>..." to include in what will be committed)

        ### Files which will NOT be committed with git commit -a appear here

no changes added to commit (use "git add" and/or "git commit -a")

要解决当前问题,您可以执行以下操作:

$ # uncommit last commit
$ git reset HEAD~1 --soft
$ # add missing file
$ git add build.gradle
$ # recommit
$ git commit -a -m "Initial commit with basic project structure."
$ # force the push, as git will complain about overwriting a commit
$ git push --force