如果我有一个包含子模块的项目,在子模块中进行更改,然后提交这些更改,主项目将在该子模块上显示“新提交”。
但是,如果我“git pull”并更新我的本地项目,并且在 pull 中子模块提交发生了变化,“git status”也会显示“新提交”。
我很困惑“新提交”可能意味着“您需要提交本地更改”,或者“您已经使用需要更新的新引用进行了更新”。
似乎“新提交”可以告诉你两件完全相反的事情。
是否有更好的方法从顶层了解您是否需要推送更改,而您是否有需要更新的新参考?
我想你看到的是这样的:
\n\n$ git status\nOn branch master\nYour branch is up to date with \'origin/master\'.\n\nChanges not staged for commit:\n (use "git add <file>..." to update what will be committed)\n (use "git checkout -- <file>..." to discard changes in working directory)\n\n modified: sub (new commits)\n\nno changes added to commit (use "git add" and/or "git commit -a")\n
Run Code Online (Sandbox Code Playgroud)\n\n为了理解这一点,您需要知道,当您将子模块放入项目中时,git 不仅会跟踪它的克隆位置,还会跟踪该子模块的最新(或选择的)提交 ID(即其 HEAD)。在签出时,它确保获取子模块的特定版本;如果没有,您在检查旧版本的代码时可能会得到不兼容版本的子模块。
\n\nGit 告诉您子模块的 HEAD 提交 ID 已更改,您可以将该更改提交到父项目。如果您执行 a git diff
,您将看到更改后的提交 ID(您的 ID 当然会不同):
$ git diff\ndiff --git a/sub b/sub\nindex d67371f..07bc855 160000\n--- a/sub\n+++ b/sub\n@@ -1 +1 @@\n-Subproject commit d67371f7485a97dd4d00802619f93a0cb4d2df16\n+Subproject commit 07bc855dd4d958783a686241b911aead1d73ca3c\n
Run Code Online (Sandbox Code Playgroud)\n\n子模块签出的 HEAD 提交 ID为何发生变化并不重要;拉取子模块的新版本(例如,git pull
在子模块目录中)或在子模块目录中本地提交都执行相同的操作 \xe2\x80\x94 通过添加更多提交来更改子模块 HEAD 提交 ID \xe2\x80 \x94 就父项目而言。
归档时间: |
|
查看次数: |
2838 次 |
最近记录: |