我创建了一个私人GitHub仓库,说https://github.com/myuser/myprivrepo,并选择让它为我生成.gitignore
和README.md
。然后我在本地克隆了这个repo并添加了一堆文件。我还修改了我的.gitignore
以及GitHub为我生成的README.md
。
git commit -a -m "Initial commit with basic project structure."
然后这个:
git push
它要求我进行身份验证,我做了,并且"推送"似乎很成功。所以我回到我的GitHub仓库,在刷新页面后,我仍然只看到我的两个GitHub生成的文件(.gitignore
和README.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 ;.不确定这是否意味着什么。
答案 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