首页 > 解决方案 > 推送后我无法提交

问题描述

将 repo 推送到 github 后我无法提交。我基本上想做的是从一个 github 存储库中克隆一些代码,进行一些更改并将代码推送到另一个 github 存储库。我做了一些本地存储库,克隆了代码,将代码推送到另一个 GH 远程存储库,一切都很好,现在当我对本地存储库进行一些更改并尝试“添加”时。然后 'commit -m' 我收到了这条消息。

在此处输入图像描述

编辑:

在'git add -A'之后:

在此处输入图像描述

有什么想法吗?

标签: gitgithubaddcommitgit-push

解决方案


你有一个子模块

具体来说,您的输出包括以下内容(我必须重新输入,因此可能有拼写错误——如果可以使用纯文本,请尽量不要使用屏幕截图;这样可以避免手动复制粘贴错误):

Changes not staged for commit:
...
    modified:  FakeApiReqresTest (modified content)

括号中的短语(modified content)告诉我们这FakeApiReqresTest不是文件

有问题的子模块是另一个 Git 存储库。这个其他 Git 存储库有一个修改过的工作树,即它的工作树中的内容尚未提交。超级项目存储库只能记录每个超级项目提交在子模块 Git 存储库中的一个特定提交的哈希 ID。git add命令在超级项目中运行将根据当前在子模块中签出的提交,将正确的提交哈希 ID 放入超级项目 Git 索引/暂存区域。(这令人困惑吗?即使我写了它,对我来说也是如此。)

这归结为一个事实,你必须首先:

  • 进入子模块;
  • 查看或检查您在此处所做的文件或更改;
  • 决定是否应该添加和提交或消除它们;
  • 然后酌情添加并提交或根除。

结果是:

  • 子模块中的新提交(然后您应该将其提交git push到任何地方:记住这样做时子模块通常处于“分离的 HEAD”状态,因此您必须处理一个额外的皱纹),或git push
  • 子模块不同工作树

或者甚至两者兼而有之。如果您在执行此操作时最终更改了子模块的工作树,那么在继续之前重新测试整个超级项目通常是明智的。

一旦您子模块中实际提交了正确的提交,并且子模块本身是“干净的”,您现在就可以在超级项目中使用子模块提交到超级项目的索引/工作树了。这可能会通过更新超级项目索引中的gitlink为您提供“暂存更改” 。git statusgit addgit add

用于实现所需结果的示例命令

至少在没有仔细阅读和思考它们的情况下,不要复制粘贴这些内容。 您应该使用哪些命令取决于很多事情。

# enter the submodule
cd FakeApiReqresTest

# inspect this Git repository; add and commit
git status
git diff
git add -u
git diff --cached
git commit
<enter appropriate commit message>

# send new commits upstream before using them in superproject
git push origin HEAD:somebranch

# update the superproject's gitlink
cd ..
git add FakeApiReqresTest

# verify, commit, etc
git status
git submodule status
git diff --cached
git commit
<enter appropriate commit message>

推荐阅读