推送后我无法提交
I can't commit after push
将回购推送到 github 后我无法提交。我基本上想做的是从一个 github 存储库克隆一些代码,进行一些更改并将代码推送到另一个 github 存储库。我制作了一些本地存储库,克隆了代码,将代码推送到另一个 GH 远程存储库,一切正常,现在当我对本地存储库进行一些更改时,我正在尝试 'add .' 然后 'commit -m' 我收到了这条消息。
编辑:
'git add -A'之后:
有什么想法吗?
您有一个 子模块。
具体来说,您的输出包括以下内容(我不得不重新输入,所以这可能有拼写错误——如果纯文本可以,请尽量不要使用屏幕截图;这可以避免手动复制粘贴错误):
Changes not staged for commit:
...
modified: FakeApiReqresTest (modified content)
括号中的短语 (modified content)
告诉我们 FakeApiReqresTest
不是 文件。
有问题的子模块是另一个Git 存储库。这个另一个 Git 存储库有一个修改过的工作树,即 its 工作树中的内容尚未提交。 超级项目 存储库只能记录子模块 Git 存储库 中每个超级项目提交的 一个特定提交的哈希 ID。 git add
命令,运行 in 超级项目,会将正确的提交哈希 ID 放入超级项目 Git 索引/暂存区,基于当前在子模块中签出的提交。 (这令人困惑吗?即使我 写了 它对我来说也是如此。)
归根结底,您必须首先:
- 进入子模块;
- 查看或检查您在此处所做的文件或更改;
- 决定是否应该添加和提交,或根除它们;
- 然后根据需要添加并提交或删除。
结果是:
- a 子模块中的新提交(然后你应该
git push
到 它 去的任何地方:记住这样做的时候子模块通常处于“分离的 HEAD”状态,所以这个 git push
有一个你必须处理的额外问题),或者
- 一个不同的工作树用于子模块
或者两者兼而有之。如果您在执行此操作时最终更改了子模块的工作树,通常明智的做法是在继续之前重新测试整个超级项目。
一旦你正确提交实际上在子模块中,并且子模块的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>
将回购推送到 github 后我无法提交。我基本上想做的是从一个 github 存储库克隆一些代码,进行一些更改并将代码推送到另一个 github 存储库。我制作了一些本地存储库,克隆了代码,将代码推送到另一个 GH 远程存储库,一切正常,现在当我对本地存储库进行一些更改时,我正在尝试 'add .' 然后 'commit -m' 我收到了这条消息。
编辑:
'git add -A'之后:
有什么想法吗?
您有一个 子模块。
具体来说,您的输出包括以下内容(我不得不重新输入,所以这可能有拼写错误——如果纯文本可以,请尽量不要使用屏幕截图;这可以避免手动复制粘贴错误):
Changes not staged for commit: ... modified: FakeApiReqresTest (modified content)
括号中的短语 (modified content)
告诉我们 FakeApiReqresTest
不是 文件。
有问题的子模块是另一个Git 存储库。这个另一个 Git 存储库有一个修改过的工作树,即 its 工作树中的内容尚未提交。 超级项目 存储库只能记录子模块 Git 存储库 中每个超级项目提交的 一个特定提交的哈希 ID。 git add
命令,运行 in 超级项目,会将正确的提交哈希 ID 放入超级项目 Git 索引/暂存区,基于当前在子模块中签出的提交。 (这令人困惑吗?即使我 写了 它对我来说也是如此。)
归根结底,您必须首先:
- 进入子模块;
- 查看或检查您在此处所做的文件或更改;
- 决定是否应该添加和提交,或根除它们;
- 然后根据需要添加并提交或删除。
结果是:
- a 子模块中的新提交(然后你应该
git push
到 它 去的任何地方:记住这样做的时候子模块通常处于“分离的 HEAD”状态,所以这个git push
有一个你必须处理的额外问题),或者 - 一个不同的工作树用于子模块
或者两者兼而有之。如果您在执行此操作时最终更改了子模块的工作树,通常明智的做法是在继续之前重新测试整个超级项目。
一旦你正确提交实际上在子模块中,并且子模块的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>