我有以下bash脚本:
git merge --squash -Xtheirs dev -m "squashing" &&
(./test/testsrc/shell/node-c.sh && echo "compiled successfully") || (git reset --hard; exit 1)
我有两个问题:
我在想,在运行git merge时,无论如何都会更新索引,所以git reset --hard始终是正确的做法。
顺便说一句,我看到的似乎是一些糟糕的Git错误,合并不起作用并产生.js文件被破坏,并且通常甚至不能用" $编译节点-c"。不确定是否有人之前见过这个,但我已经向Git提交了一份错误报告。
答案 0 :(得分:3)
如果合并失败,您将与分支机构处于冲突状态。我对此的想法是,使用String content = data.toString()
.replaceAll("=", "\":\"")
.replaceAll(",", "\",\"")
.replaceAll("}", "\"}")
.replaceAll("{", "{\"");
而不是git merge --abort
,您将更安全,因为:
如果没有某种人工/手动干预,您不希望硬重置分支;即使你重置的东西可能是安全的,你仍然在玩钚。
关于你的Git“bug” - 我真的怀疑Git应该受到责备;它可能是预期合并的副作用,不按计划进行,Git要求你帮助它。
答案 1 :(得分:1)
在您的脚本中,您应该实际执行此操作:
git merge --squash -Xtheirs dev -m "squashing" &&
(./test/testsrc/shell/node-c.sh && echo "compiled successfully") ||
(git reset --hard ORIG_HEAD; exit 1)
当合并通过但node-c.sh
没有,那么你有一个你不想要的合并提交。伪引用ORIG_HEAD
指向最近合并开始时的位置:如果合并失败,则与HEAD
相同,成功时与{HEAD^
相同1}}。