Tyl*_*ler 108 git branch conflict git-submodules
我有一个引用多个子模块的git超级项目,我试图锁定其他项目成员的工作流程.
对于这个问题,让我说我的超级项目被调用supery
并且子模块被调用subby
.(然后是我正在尝试做的简化......我实际上并没有使用分支版本,但我认为最简单的问题是布局.)
我的主分支supery
具有作为子模块引用v1.0
的git项目的subby
标记.的分支supery
叫one.one
,改变了子模块的引用指向该标记v1.1
的subby
.
我可以毫不费力地在每个分支中工作,但如果我尝试使用one.one
分支更改来更新分支,master
我会收到一些冲突,而我不知道如何解决它们.
基本上在分支中运行一段git pull . master
时间之后subby
,看起来它会创建其他子模块.
在拉/合并之前,我git submodule
从one.one
分支获得了所需的响应:
$ git checkout master
$ git submodule
qw3rty...321e subby (v1.0)
$ git checkout one.one
$ git submodule
asdfgh...456d subby (v1.1)
Run Code Online (Sandbox Code Playgroud)
但是在拉动之后,它会在我运行时添加额外的子模块git submodule
:
$ git pull . master
Auto-merged schema
CONFLICT (submodule): Merge conflict in subby - needs qu3rty...321e
Automatic merge failed; fix conflicts and then commit the results.
$ git submodule
qw3rty...321e subby (v1.0)
asdfgh...456d subby (v1.1)
zxcvbn...7890 subby (v1.1~1)
Run Code Online (Sandbox Code Playgroud)
如何删除/忽略不需要的子模块引用并提交我的冲突和更改?或者我可以使用我的原始参数来git pull
忽略我的子模块吗?
Tyl*_*ler 78
好吧,它不是技术上管理与子模块的冲突(即:保留这个而不是那个),但我找到了继续工作的方法......我所要做的就是注意我的git status
输出并重置子模块:
git reset HEAD subby
git commit
Run Code Online (Sandbox Code Playgroud)
这会将子模块重置为预拉提交.在这种情况下,这正是我想要的.在其他我需要应用于子模块的更改的情况下,我将处理那些具有标准子模块工作流程(结账主机,下拉所需标签等).
Emm*_*ows 48
我对这个问题的答案有点挣扎,并且在类似的SO帖子中的答案也没有太多运气.所以这对我有用 - 请记住,在我的情况下,子模块由不同的团队维护,因此冲突来自master和我正在研究的项目的本地分支中的不同子模块版本:
git status
- 记下带有冲突的子模块文件夹将子模块重置为当前分支中上次提交的版本:
git reset HEAD path/to/submodule
此时,您有一个无冲突版本的子模块,您现在可以将其更新到子模块的存储库中的最新版本:
cd path/to/submodule git submodule foreach git pull origin SUBMODULE-BRANCH-NAME
现在你可以commit
这样做并重新开始工作.
Jes*_*ett 20
我以前没见过那个确切的错误.但我猜你遇到的麻烦.看起来因为子模块包含不同引用的master
和one.one
分支,当你从git 合并更改时,不知道哪个引用或者应该由分支保存和跟踪.supery
subby
master
v1.0
v1.1
one.one
supery
如果是这种情况,那么您需要选择所需的ref并提交该更改以解决冲突.这正是您使用reset命令所做的.
在项目的不同分支中跟踪子模块的不同版本是一个棘手的方面.但子模块ref与项目的任何其他组件一样.如果两个不同的分支在连续合并之后继续跟踪相同的相应子模块refs,那么git应该能够计算出模式而不会在将来的合并中引发合并冲突.另一方面,如果你频繁切换子模块,你可能不得不忍受大量的冲突解决.
hel*_*tan 15
首先,找到要引用子模块的哈希值.然后运行
~/supery/subby $ git co hashpointerhere
~/supery/subby $ cd ../
~/supery $ git add subby
~/supery $ git commit -m 'updated subby reference'
Run Code Online (Sandbox Code Playgroud)
这对我来说是有用的,可以让我的子模块得到正确的哈希引用,继续我的工作而不会产生任何进一步的冲突.
mar*_*hon 10
我有git rebase -i origin/master
一个分支问题.我想采用主模块的子模块参考,所以我只是做了:
git reset master path/to/submodule
然后
git rebase --continue
这解决了我的问题.
小智 10
从这次讨论中得到了帮助。就我而言
git reset HEAD subby
git commit
Run Code Online (Sandbox Code Playgroud)
为我工作:)
小智 6
以上所有内容对我来说都不起作用...我的子模块位于“未合并路径”下,但我被卡住了...
最终,经过多次尝试,有效的是:从子模块中手动删除合并冲突文件,而不是在主存储库中:
Run Code Online (Sandbox Code Playgroud)git restore --staged submodule_path
(这将其移至“未暂存提交的更改:”)
Run Code Online (Sandbox Code Playgroud)git clean -df
然后
git 子模块更新 --init