linux - 不必记住我要拉和推的分支的最佳别名是什么?
问题描述
在这里非常懒惰,不喜欢打字太多,特别不喜欢记住我在哪个分支上拉和推。我经常犯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
解决方案
至少,使用 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}
branchname
branch.<name>.remote
branch.<name>.merge
有关Git 2.5+快捷方式符号,请参阅“查看未推送的 Git 提交”。@{push}
推荐阅读
- angular - 带有授权的 Angular 5 GET REST Api 返回 stuts 500 内部错误(来自客户端)
- apache-spark - 我们可以将 Spark-SQL-Kafka 偏移量存储在 MySQL 表中而不是 HDFS 或 S3 中吗
- android - Android 的 WorkManager 的同时作业数/最大值
- python - python有嵌套异常保护吗?
- sql-server - sql有什么问题
- angular - Angular 6 RXJS 过滤器等待订阅中的布尔值
- django-models - 最新的 Django 不支持从其他应用程序导入模型。请给我解决方案
- vue.js - Nuxt/Vue 反应体属性
- xaml - Windows UWP 中带有“Enter”键的虚拟键盘小键盘
- java - 是否可以暂停子线程然后回调父线程然后再次恢复子线程