为什么git不让我推送更改?

时间:2019-08-26 03:09:23

标签: git github

我在Mac High Sierra上使用Git。我注意到我的目录进行了一些更改...

localhost:currency_calculator davea$ 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)
  (commit or discard the untracked or modified content in submodules)

    modified:   currency-calculator (modified content, untracked content)

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

所以我尝试使用以下命令来提交那些更改

localhost:currency_calculator davea$ git add .
localhost:currency_calculator davea$ git commit -m 'Added directory.'
On branch master
Changes not staged for commit:
    modified:   currency-calculator (modified content, untracked content)

no changes added to commit

但是由于某种原因,以上操作无效,并且我无法将所做的更改推送到我的主遥控器上。

localhost:currency_calculator davea$ git push origin master
Everything up-to-date

我还需要做什么?

1 个答案:

答案 0 :(得分:3)

您有一个子模块:

    modified:   currency-calculator (modified content, untracked content)

注释“已修改的内容”和“未跟踪的内容”是您的Git向子模块Git询问其 git status的结果,然后汇总其内容(存在未提交的文件)和未跟踪的文件)放在一行中。

您必须:

  1. 将更新的文件提交到子模块中。也就是说,输入子模块(cd currency-calculator)并执行在Git存储库中执行的所有常规操作以添加和提交文件。

    如果需要提交未跟踪的文件,请确保添加它们。请注意,子模块存储库可能位于“分离的HEAD”上,因此在提交该子模块之前,您可能需要将其HEAD重新附加到某个分支名称,如有必要,可能创建一个分支。 / p>

  2. 将所有此类提交提交到充当该Git存储库作为子模块的服务器(以便其他人可以获取它们)。

    这就是为什么要在步骤1中将子模块放在分支上的原因:推送分支比从分离的HEAD推送要容易得多。 (在这里可以使用独立的HEAD,但我将不赘述。)

    步骤2可以推迟一点;见下文。

  3. 现在所需的提交在子模块中本地存在,更新索引中 gitlink 中的哈希ID,然后提交结果。

    在这种情况下,您可以这样做:

    git add currency-calculator
    git commit
    

    在超级项目存储库的适当部分。

  4. 在超级项目中使用git push将使用本地子模块中的哈希ID的新提交传递到超级项目的origin Git。

    完成此操作后,克隆超级项目存储库然后运行git submodule update --init的任何人都将必须能够访问在步骤3中所做的提交中保存的子模块提交哈希ID。为此,该提交哈希ID将需要位于您在步骤2中运行git push的存储库中。因此,当某人< em> else 使用您在步骤3中所做的超级项目提交。

请注意,此舞蹈至少涉及四个 Git存储库:

  • 您的超级项目;
  • 您的超级项目的origin Git;
  • 您的子模块;
  • 您的子模块的origin Git。

每个Git存储库都可以通过git commitgit push来获取新的提交,因此总共要运行四个这样的命令:两个git commit和两个{{1} }。