我正在尝试创建一个使用多个Git命令和位置参数的别名.每个都有Stackoverflow页面,两者都显得非常明显,但我遇到了麻烦.
例如,我想切换到分支foo并执行状态.所以在我看来.gitconfig,我有:
[alias]
chs = !sh -c 'git checkout $0 && git status'
Run Code Online (Sandbox Code Playgroud)
这不起作用.而这样的事情会起作用.
chs = !sh -c 'git checkout $0'
echoes = !sh -c 'echo hi && echo bye'
Run Code Online (Sandbox Code Playgroud)
任何见解将不胜感激.
我希望命令git co与输入相同git checkout.
普通的Bash别名(alias co='checkout')不起作用.
我可以将参数传递给Git命令的别名吗?
我在Git配置中有一些别名,如下所示:
rb1 = rebase -i HEAD~1
rb2 = rebase -i HEAD~2
rb3 = rebase -i HEAD~3
rb4 = rebase -i HEAD~4
....
Run Code Online (Sandbox Code Playgroud)
是否可以制作rb别名,以便git rb <x>适用于任何<x>?
我试过这个别名:
rb = rebase -i HEAD~
Run Code Online (Sandbox Code Playgroud)
但后来例如git rb 8不起作用.
我经常修改功能分支,然后强制将它们推送到服务器.
git push --force origin feature-mongodb-support
Run Code Online (Sandbox Code Playgroud)
有没有捷径git push --force origin <current branch>?
从这段摘录中可以看出,有一个"!" 在git命令之前.重点是什么?
[alias]
commitx = !git add . && git commit
Run Code Online (Sandbox Code Playgroud)
我理解别名和命令本身正在做什么,但不是"!"的意思.在git命令之前.
我正在尝试编写一个别名来同时删除本地和远程分支,但我无法弄清楚为什么语法不起作用.在~/.gitconfig,我尝试了以下别名,但每个产生相同的结果,这是意外的:
[alias]
nuke = !sh -c 'git branch -D $1 && git push origin :$1'
Run Code Online (Sandbox Code Playgroud)
和
[alias]
nuke = !git branch -D $1 && git push origin :$1
Run Code Online (Sandbox Code Playgroud)
两者都产生:
$> git branch
* master
mybranch
$> git nuke mybranch
Everything up-to-date
$> git branch
* master
mybranch
Run Code Online (Sandbox Code Playgroud)
切换命令的顺序会产生不同的结果,但也不完全是我正在寻找的:
[alias]
nuke = !git push origin :$1 && git branch -D $1
...
$> git branch
* master
mybranch
$> git nuke mybranch
Everything up-to-date
Deleted branch mybranch (was d719895) …Run Code Online (Sandbox Code Playgroud) 我已经成功地为各种 Git 别名配置了 Bash 完成。例如:
$ git config alias.subject
!git --no-pager show --quiet --pretty='%s'
$ function _git_subject() { _git_show; }
$ git subject my<TAB>
$ git subject my-branch
Run Code Online (Sandbox Code Playgroud)
但是,我有一个 Git 别名,我不知道如何为其设置 Bash 完成。问题是我希望别名能够像顶级 Git 命令本身一样完成。别名是这样的:
$ git config alias.alias
alias = !"f() { if [[ \"$#\" != 1 ]]; then >&2 echo \"Usage: git alias COMMAND\"; return 1; fi; git config alias.\"$1\"; }; f"
# Example
$ git alias s
status
Run Code Online (Sandbox Code Playgroud)
我试过使用_git, __git_main, 和__git_wrap__git_main …
我有一个 Git 别名update,我想为其配备分支名称完成功能。别名定义如下:
[alias]
update = "!f() { git push . origin/$1:$1; }; f"
Run Code Online (Sandbox Code Playgroud)
(它使用其上游版本更新本地跟踪分支,而无需检查该分支。不过,对于特定问题并不重要。)
我希望该命令为其$1参数补全现有的分支名称。我知道我可以定义一个调用_git-update来控制完成的函数,但是我缺少一些使其工作的部分:
_git-update ()
{
***some-function-here*** "$(__git_branch_names)"
}
Run Code Online (Sandbox Code Playgroud)
我正在使用安装在 OS X 上的完成brew install zsh-completions,这是在https://github.com/zsh-users/zsh-completions设置的。
(这个问题直接类似于/sf/answers/2891556601/,但针对 Zsh 而不是 Bash。)
我设置了这样的git别名:
git config --global alias.popmerge '!git stash pop && git merge master'
Run Code Online (Sandbox Code Playgroud)
然后我叫它,像这样:
git popmerge
Run Code Online (Sandbox Code Playgroud)
执行" git stash pop ",但忽略" git merge master ".
如果我在" git popmerge " 之后运行" git merge master " ...它会按预期运行,执行合并.
我有其他具有长序列命令的别名......它们运行完美无缺.似乎" git stash pop "中的某些内容会使别名进程停止 ...是否有可能避免这种行为?怎么样?
谢谢.
我知道可以使用&&(and) 语句为同一别名运行多个命令。然而,对于长组合,它会失去可读性。例如:
save = !git status && git add -A && git commit -m \"$1\" && git push --force && git log && :
Run Code Online (Sandbox Code Playgroud)
有没有多行的写法?
{}例如,也许用它包裹它?