推送后我无法提交
Posted
技术标签:
【中文标题】推送后我无法提交【英文标题】:I can't commit after push 【发布时间】:2021-12-16 12:55:46 【问题描述】:将 repo 推送到 github 后我无法提交。我基本上想做的是从一个 github 存储库中克隆一些代码,进行一些更改并将代码推送到另一个 github 存储库。我做了一些本地存储库,克隆了代码,将代码推送到另一个 GH 远程存储库,一切都很好,现在当我对本地存储库进行一些更改并尝试“添加”时。然后 'commit -m' 我收到了这条消息。
编辑:
在'git add -A'之后:
有什么想法吗?
【问题讨论】:
试试git add -A
然后告诉我们git status
的输出是什么? git add .
应该添加修改过的文件,所以看起来有点奇怪。
@plalx 截图在编辑后的帖子中。
试试git add -A :/
【参考方案1】:
你有一个子模块。
具体来说,您的输出包括以下内容(我不得不重新输入,因此可能有拼写错误——如果可以使用纯文本,请尽量不要使用屏幕截图;这样可以避免手动复制粘贴错误):
Changes not staged for commit: ... modified: FakeApiReqresTest (modified content)
括号中的短语(modified content)
告诉我们FakeApiReqresTest
不是文件。
有问题的子模块是另一个 Git 存储库。这个其他 Git 存储库有一个修改过的工作树,即 its 工作树中的内容尚未提交。 superproject 存储库只能记录每个超级项目提交的子模块 Git 存储库中的一个特定提交的哈希 ID。 git add
命令,运行 in 超级项目,将根据当前在子模块中签出的提交,将正确的提交哈希 ID 放入超级项目 Git 索引/暂存区域。 (这令人困惑吗?这对我来说是?,即使我写了它。)
这归结为你必须首先:
进入子模块; 查看或检查您在此处所做的文件或更改; 决定是否应该添加和提交或消除它们; 然后酌情添加并提交或根除。结果是:
子模块中的新提交(然后你应该git push
到 it 去的任何地方:记住这样做时子模块通常处于“分离的 HEAD”状态,所以这个git push
有一个额外的皱纹你必须处理),或者
一个不同的工作树为子模块
或者甚至两者兼而有之。如果您在执行此操作时最终更改了子模块的工作树,那么在继续之前重新测试整个超级项目通常是明智的。
一旦你有正确的提交实际上in子模块,并且子模块的git status
本身是“干净的”,你现在准备好git add
子模块提交到超级项目的索引/工作树,在超级项目中使用git add
。这可能会通过更新超级项目索引中的 gitlink 为您提供“为提交而暂存的更改”。
实现预期结果的示例命令
在至少阅读和思考之前不要复制粘贴这些命令。您应该使用哪些命令取决于很多事情。
# 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>
【讨论】:
确实如此,它奏效了。非常感谢:)以上是关于推送后我无法提交的主要内容,如果未能解决你的问题,请参考以下文章