首页 > 解决方案 > 不必记住我要拉和推的分支的最佳别名是什么?

问题描述

在这里非常懒惰,不喜欢打字太多,特别不喜欢记住我在哪个分支上拉和推。我经常犯git pull从非主分支做的错误,或者更糟糕的是做推送并且目标分支不正确,我留下了未推送或未提交的更改。

我在.bashrc以下别名中创建了帮助:

alias gitr='git status | grep -Po "On branch \K[^ ]+" | xargs git push origin'

因此,gitr在任何 git repo 上执行都会将提交的更改推送到正确的分支。

同样做:

alias gitp='git status | grep -Po "On branch \K[^ ]+" | xargs git pull origin'

将从我当前所在的正确分支中提取最新更改。

最后,这个会将所有本地更改提交为“化妆品”并将它们推送到正确的分支:

alias gitcr='git commit -a -m "Cosmetics" && git status | grep -Po "On branch \K[^ ]+" | xargs git push origin'

有没有办法打印所有中间命令而不打印每个命令?有没有办法让这些命令更健壮?

通过打印中间命令来更新我的意思是显示以下内容以确保它正在运行正确的命令:

git status
git pull origin somebranch

标签: linuxbashgitscripting

解决方案


至少,使用 Git 2.22,您可以使用:

git branch  --show-current 

这样可以避免一些 grep/awk/sed

另外,如果您想push,您需要与当前分支关联的远程跟踪分支的名称(您可以将远程 'bar' 分支关联到本地 'foo' 分支'

也就是说[<branchname>]@{push},例如master@{push}, @{push}

git rev-parse --abbrev-ref --symbolic-full-name @{push}|cut -d / -f 2

再次,如果在分支名称被签出时运行,后缀@{push}会报告分支“我们将推送到的位置” 。git push

注意:git rev-parse --abbrev-ref --symbolic-full-name @{push}|cut -d / -f 1会给你遥控器的名称,这并不总是origin.

不同,[<branchname>]@{upstream}例如。a 的后缀(简称)是指由 指定的分支设置为在(配置为和)之上构建的分支。 即您要从中拉出的分支。master@{upstream}@{u}
@{upstream}branchname<branchname>@{u}branchnamebranch.<name>.remotebranch.<name>.merge

有关Git 2.5+快捷方式符号,请参阅“查看未推送的 Git 提交”。@{push}


推荐阅读