我们使用 git 作为 版本控制工具,极大的提高了效率,但是随着业务的增多和自身对于提交内容原子性的要求,往往会产生很多的分支,这就难免有时候,在发版的时候,某些分支被遗忘提交,造成功能丢失等问题。
因而如果保证分支多而且不忘记合并,是一个我们需要解决的问题。
是的,git有一个这样的功能呢,比如我们想要查看是否有分支没有合并进入develop
git branch --no-merged develop
是的,这能解决问题,但是比如我们迁出了预发布分支(pre_release),有的分支合并到了pre_release(但没有合并到develop), 上面的查找就不太合适了。
所以我们需要的是
于是有了下面的脚本
#!/usr/bin/env ruby
# encoding: utf-8
def getUnmergedBranches(targetBranch)
return `git branch --no-merged #{targetBranch}`.split(/\n+/).map { |e| e.sub '*', '' }.map { |e| e.strip }
end
branchesUnmergedToPreRelease = getUnmergedBranches('origin/pre_release')
puts (getUnmergedBranches('origin/develop') & branchesUnmergedToPreRelease).select {|branch| !branch.start_with? "unmerge_ignore_"}
上面的脚本做的是
origin/develop
的分支集合 Aorigin/pre_release
的分支集合 Bunmerge_ignore_
开头)~:/ ruby unmergedBranches.rb
checkstyle
error_prone
file_chooser_webview
image_loading
jduan_inter_webview_messaging
jduan_webview_client_refactor
migration_to_androidx
upgrade_gradle_1106
upgrade_gradle_3.2.0
upgrade_suppport_28.0.0
video_preload
#!/usr/bin/env ruby
# encoding: utf-8
puts "Please input the branch to unmerge-ignore"
targetBranch = gets.chomp
puts "You want to ignore this branch:#{targetBranch}, Are you sure? (input yes)"
confirm = gets.chomp
if (confirm == "yes")
newBranchName = "unmerge_ignore_#{targetBranch}"
system "git branch -m #{targetBranch} #{newBranchName}"
puts "changed #{targetBranch} into #{newBranchName}"
end
使用上面的脚本,就能够以命令交互的形式忽略某个分支
~:/ ruby ignoreBranchWhenUnmerged.rb
Please input the branch to unmerge-ignore
new_account_sys
You want to ignore this branch:new_account_sys, Are you sure? (input yes)
yes
changed new_account_sys into unmerge_ignore_new_account_sys
以上.