GIT操作待解决问题

1、如何强行覆盖已经存在分支,重新拉一次该分支

2、merge出现冲突如何解决

 

3、批量删除分支

 

Not with that syntax. But you can do it like this:

git branch -D 3.2 3.2.1 3.2.2

Basically, git branch will delete multiple branch for you with a single invocation. Unfortunately it doesn't do branch name completion. Although, in bash, you can do:

git branch -D `git branch | grep -E '^3\.2\..*'`

git br |grep 'dev' |xargs git br -d

4、 git checkout -B <branch> 强制新建分支,即便已经存在该分支名,覆盖新建。

5、

高级魔法:

删除远程分支git命令是:git push origin :dev相当于push一个空的分支覆盖远程分支 那么远程能否参考本地删除来做呢?——大体方向是对,不就是获得分支名,传给删除函数执行嘛

   git br -r| grep 'dev' |xargs git push origin :

但执行结果显然和我的预期不符,系统最后执行的命令类似于这样:

  git push origin origin/dev/fix:

显然 xargs 是将参数传到了:的前一位,而不是我们预期的后一位。解决的办法是?

xargs -i {} func  :{}

用 {} 表示传递过来的参数填充的位置 于是我们有了:

git br -r | grep 'dev' | xargs -i {} git push origin :{}

大功告成?——自然没有。系统执行是:git push origin :origin/dev/fix 原来grep出来的结果虽然是我们需要的分支,但它包含了origin,显然git 命令不会那么聪明的识别到 所以我们只能再辛苦点把前面的origin去掉咯。找了蛮久,满足要求的命令有sed 和awk,此处就先试试awk吧

awk

awk可谓上古神器也。其用法,都能写一本书啦……因为语法复杂,花了一点临时学了下。我们的目的很简单删掉origin,下面就看看怎么用牛刀来杀鸡 awk -F '[/]' '/1\/master/ {printf "%s/%s/%s\n", $2,$3,$4}' -F,设定分隔符为/, 匹配所有1/master的分支名(注意转义/),格式化输出origin/1/master/fix 分割后$1就代表origin,$3代表master 以此类推。所以在printf中格式化输出

好绕了那么多圈,现在终于可以把所有的拼在一起,然后痛快删掉远程那二十多个分支了

git br -r |awk -F '[/]' '/1\/master/ {printf "%s/%s/%s\n", $2,$3,$4}' |xargs -I {} git push origin :{}
 

 

posted @ 2015-05-27 13:56  cc_2  Views(150)  Comments(0)    收藏  举报