当我在状态中看到git add
时,我正试图了解何时只需git commit
/ submodule update
一个子模块,或(new commits)
。
注意:我可以将/form
子模块的最终版本作为父级的一部分,即我很方便将子模块的当前状态整体整合到父母,如果这有助于了解。
予。查看.gitmodules
以查看我的内容:
/main$ cat .gitmodules
[submodule "xm_css/form"]
path = xm_css/form
url = https://github.com/HighgateCreative/form.css.git
II。检查子模块中的状态:
/main/form$ gs
HEAD detached at 1ce1544
nothing to commit, working directory clean
III。我使用了两种方法中的一种来重新连接HEAD(虽然经过大量阅读后认识到这是不必要的):
/main/form$ git checkout -b temp
Switched to a new branch 'temp'
bradc@highsite-dev:/var/www/cms/xm_css/form$ git checkout master
Switched to branch 'master'
Your branch is ahead of 'origin/master' by 2 commits.
(use "git push" to publish your local commits)
VI。推到原点(现在我意识到,如果我将HEAD分离,这将不是必要的)
/main/form$ git push
Username for 'https://github.com': myemail@gmail.com
Password for 'https://myemail@gmail.com@github.com':
Counting objects: 10, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (6/6), done.
Writing objects: 100% (10/10), 790 bytes | 0 bytes/s, done.
Total 10 (delta 4), reused 0 (delta 0)
To https://github.com/HighgateCreative/form.css.git
1ce1544..272dc7b master -> master
诉双重检查状态
/form$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
nothing to commit, working directory clean
VI。父级(new commits)
期间git status
的外观
/main$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: xm_css/form (new commits)
Ⅶa因子。分析从git diff
开始:
/main$ git diff
diff --git a/xm_css/form b/xm_css/form
index 1ce1544..272dc7b 160000
--- a/xm_css/form
+++ b/xm_css/form
@@ -1 +1 @@
-Subproject commit 1ce1544db293096a740312c4ad5486dd7922085c
+Subproject commit 272dc7baebe70b75da3da00d28ba97b52099ce55
VIIb的。分析继续git log
:
/main/submodule $ git log
commit 272dc7baebe70b75da3da00d28ba97b52099ce55
Author: Brad Cathey
Date: Thu Mar 3 12:00:28 2016 -0600
trying to get buttons to display properly
commit f4141a2ec88de2efb550ec5b14426a54347312b2
Author: Brad Cathey
Date: Thu Mar 3 10:57:56 2016 -0600
adding type=button
commit 1ce1544db293096a740312c4ad5486dd7922085c
Author: John smith
Date: Tue Nov 17 08:39:18 2015 -0600
Set all 'buttons' to display inline-block
VIIc中。子模块git diff --submodule=log
中继续进行分析:
/main$ git diff --submodule=log
Submodule xm_css/form 1ce1544..272dc7b:
> trying to get buttons to display properly
> adding type=button
思考这一切:
一个。 SHA不是按顺序排列的(思考update
)
湾但是上一个>
中的git diff
让我思考commit
,但不完全确定--submodule=log
选项。
思想?
答案 0 :(得分:0)
您在父回购中看到的是 gitlink (a special entry in the index),它记录了子模块的新SHA1。
每次修改和提交(并推送)子模块内容时,您都需要从父存储库添加,提交和推送该子模块的新SHA1(gitlink)。
SHA1不必按顺序排列:它只是反映了您选择用于检出子模块的提交。
git diff --submodule=log
反映了你在子模块中做的新提交(而父repo只知道新的SHA1,而不是内容)
注意,使用Git 2.11(2016年第4季度),您将能够显示父代仓库中子模块内的实际差异。
请参阅commit fd47ae6,commit 8e6df65,commit 602a283,commit 99b43a6,commit 61cfbc0,commit 660e113,commit 8576fde(2016年8月31日) Jacob Keller (jacob-keller
)
请commit cd48dad查看Junio C Hamano (gitster
)(2016年8月31日)
(Junio C Hamano -- gitster
--合并于commit 305d7f1,2016年9月12日)
“git diff --submodule={short,log}
”机制已得到增强,允许“--submodule=diff
”显示绑定到超级项目的子模块提交之间的补丁。
请注意最后一个选项:在子模块中运行git diff --submodule=diff
,该子模块有自己的子模块,但有更改会得到错误:
fatal: bad object.
只有Git 2.13(2017年第二季度)修复了这个错误:
commit 17b254c见Stefan Beller (stefanbeller
)(2017年3月31日)
(Junio C Hamano -- gitster
--合并于commit 1776a71,2017年4月17日)
这种情况发生了,因为我们没有正确初始化环境 差异在子模块中运行 这意味着我们从主进程继承环境,主进程设置环境变量。 (显然我们设置环境变量,当不在子模块中时我们没有设置,即
.git
目录已链接)