如何使用智能脚本自动执行以下步骤?
develop
是否可以快速转发到origin develop
? git rebase develop
之后以编程方式检测是否存在冲突? grep
和sed
。my_curr_branch_name=$(git branch | grep '\*' | sed 's/^* //');echo "My branch name is $my_curr_branch_name"
git status | grep 'Your branch is behind'
git status | grep 'Your branch is up-to-date'
让我说我在我的git存储库中feature/long-feature-name
分支。
git checkout develop
git fetch
git status
( IF develop
落后于origin
且可快速转发,继续。否则请停止。)
说明:此步骤为我自己执行以查看它是否可以快进。
问题:如何以编程方式检测develop
是否可以快进origin develop
?
git pull
说明:我知道git pull
,因为我知道我可以安全地快进。
git checkout feature/long-feature-name
git rebase develop
( IF 没有任何反对冲突继续。否则,请停止。)git rebase develop
之后以编程方式检测是否存在冲突? git checkout develop
git merge feature/long-feature-name
git push origin
脚本需要知道要返回的功能分支。
git checkout feature/{branch-name}
< / strong>和第8步。在以下条件下,脚本需要智能停止。
develop
不能快速转发。git flow feature finish
我知道git flow feature finish
可以做到这一点,但不是我想要的
我不希望git flow脚本到git merge --no-ff
创建一个合并点。
答案 0 :(得分:1)
这听起来很像你希望有人为你编写脚本(如果你发布了自己的尝试,我认为会有所帮助)。我不会这样做,但我会描述实现你所询问的项目的方法,以及一个缺陷。
要查找某个工作树所在的分支,如果它位于命名分支上,请使用git symbolic-ref
读取HEAD
的值。如果HEAD
不是符号(间接)引用,即当前HEAD
当前已分离并因此直接指向提交,则此操作将失败。如果它没有失败,它将打印(到标准输出)当前分支的全名,例如refs/heads/master
或refs/heads/feature/foo
。
缺陷在第4步:git pull
为git fetch
后跟git merge
(或者,如果指示,则由git rebase
代替)。此提取发生在您的步骤2之后,可能会更改并因此使步骤3中找到的答案无效。出于编写脚本的目的,git pull
总是 1 错误:改为使用两个单独的命令。
我不清楚你在步骤3中想要什么。你当然可以运行git status
,但如果重点是发现快进能力,那就是错误的做法。您可以使用git rev-list --count
(这是git status
所做的一部分)来执行此操作,但运行git merge --ff-only
并检测失败更简单,当且仅当无法执行此操作时才会发生快进。默认情况下,git merge
将使用当前分支的上游设置;如果没有,则不可能合并(没有任何合并),因此快进合并也是不可能的,因此这将失败。
(失败就像在任何表现良好的Unix实用程序中一样,报告为非零退出状态。)
如果在步骤6中发生了rebase冲突,git rebase
命令将以非零状态退出,即将失败,因此可以将冲突检测视为一般故障情况的特定情况。 (由于其他原因,例如缺少磁盘空间,rebase可能会失败,但可能你也想停在这里。)
鉴于上述情况,其余部分应该很容易。
1 (G&amp; S icon here)什么,总是?是的,总是! ......好吧,几乎没有! (好吧,那不太合适。:-))