推送后我无法提交

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 存储库中的一个特定提交的哈希 IDgit add 命令,运行 in 超级项目,将根据当前在子模块中签出的提交,将正确的提交哈希 ID 放入超级项目 Git 索引/暂存区域。 (这令人困惑吗?这对我来说是?,即使我写了它。)

这归结为你必须首先:

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

结果是:

子模块中的新提交(然后你应该 git pushit 去的任何地方:记住这样做时子模块通常处于“分离的 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>

【讨论】:

确实如此,它奏效了。非常感谢:)

以上是关于推送后我无法提交的主要内容,如果未能解决你的问题,请参考以下文章

缺少推送通知权利?

Git无意中推送文件

可以克隆我的 Git 存储库但不能提交和推送

无法推送远程 git repo [重复]

谷歌登录后使用 Swift 4 推送视图控制器

如何使用 git reset 在不丢失本地更改的情况下重置未推送的提交