我正在尝试编写一个git别名,从提交消息中删除字符串"[ci skip]"(放在消息的末尾),但是我遇到了转义问题.别名从作为参数传递的提交中获取所有提交HEAD.
如果我运行以下命令:
git filter-branch -f --msg-filter "sed -e \"s/\[ci skip\]$//g\"" master..HEAD
Run Code Online (Sandbox Code Playgroud)
它按预期工作.无论如何,如果我创建以下别名:
unwip = !sh -c 'git filter-branch -f --msg-filter \"sed -e \\\"s/\[ci skip\]$//g\\\"\" $0..HEAD'
Run Code Online (Sandbox Code Playgroud)
我运行git unwip master它抱怨错误的配置,但我希望它的行为与以前的commads一样.我怎样才能解决这个问题?
我有时会git commit -amend在我真正想要的时候不小心打字git commit --amend.Git检测到并问我
$ git commit -amend
error: did you mean `--amend` (with two dashes ?)
Run Code Online (Sandbox Code Playgroud)
这很棒.
但是,有时我会写git commit -ammend,然后git会接受这个并将我的拼写错误视为git -a -m "mend",所以它只是提交日志消息"mend".
我正在寻找一种方法来阻止git这样做.我试图定义一个别名,git commit -ammend但现在失败了.您对如何处理此问题有任何建议吗?
我正在开发一个包含submodules. 我在所有子模块(包括父模块)中都有同名的分支(例如master,development..),并且它们都跟踪相应的远程分支。
我想一次在所有子模块中签出相同的分支。换句话说,我想要的是,如果我切换到development父模块中的分支,所有子模块也应该切换到development分支,以便我的工作树与分支保持一致。
手动执行此操作既痛苦又重复。有捷径吗?
我创建了一个 git 命令来显示 HEAD 和最后一次 Git-SVN 提交之间的差异。
Git 是命令
git diff `git log --grep git-svn-id | grep commit | sed "s/commit //g" | head -1` HEAD
Run Code Online (Sandbox Code Playgroud)
我想为它创建一个别名,我这样做了:
git config --global alias.diffsvn 'diff `git log --grep git-svn-id | grep commit | sed "s/commit //g" | head -1` HEAD'
Run Code Online (Sandbox Code Playgroud)
但是当我运行git diffsvn并获得该命令的输出时,我得到了
致命:不明确的参数“git”:未知修订版或路径不在工作树中。使用“--”将路径与修订版分开,如下所示:“git [...] -- [...]”
我怎样才能让这个别名起作用?
我正在一个名为的分支上工作foo,我想根据origin/foo. 在现代版本的 git 中,我可以运行
$ git pull --rebase origin foo
Run Code Online (Sandbox Code Playgroud)
这是一个常见操作的大量输入。此外,因为我有一个旧版本的 git(见这个),我还需要先运行一个 fetch 以便我的本地图看起来不会混乱:
$ git fetch && git pull --rebase origin foo
Run Code Online (Sandbox Code Playgroud)
我怎样才能把它写成一个 git 别名?
在多个工作站上使用 Git 时,对于不同的 Git 存储库,使用相同的别名集会很方便。
因此,为了跨不同工作站和不同存储库同步 Git 别名,我考虑将别名放入 GitHub 上的共享 Git 存储库中,但我现在确定如何做到这一点,或者这是否是最好的方法。
如何在多个工作站之间共享 Git 别名?
注意:“存储在 origin 中的 Git 别名”的答案有一些很好的输入,但它并没有直接解决如何在不同的 Git 存储库之间共享 Git 别名的问题。
我的代码中有以下别名.gitconfig:
[alias]
lg = log --graph --abbrev-commit --decorate --date=relative --format=format:'%C(bold blue)%h%C(reset) - %C(bold green)(%ar)%C(reset) %C(white)%s%C(reset) %C(dim white)- %an%C(reset)%C(bold yellow)%d%C(reset)' --all
log-between = "!f() { git lgl `git merge-base $2 $1`..$2 -- $3 ; }; f"
log-between-p = "!g() { git lgl -p $(git merge-base $2 $1)..$2 -- $3 ; }; g"
diff-between = "!h() { echo $(pwd); git diff $(git merge-base $2 $1) $2 -- $3 ; }; h"
Run Code Online (Sandbox Code Playgroud)
虽然它在大多数情况下工作正常,但是当我想要将第三个参数($3)传递给diff-between 的文件(或路径)的日志时,会出现问题.
问题是该命令(h在此示例中)正在此存储库的根目录中执行(这就是我添加pwd打印以进行检查的原因)并且我传递的是文件名或带有名称的路径但不总是绝对路径. …
我正在尝试创建一个别名来检查主分支并合并我在切换之前所在的分支。现在,我的别名如下所示:
med = "!f() { git checkout master; git merge ${1}; git branch -d ${1}; }; f"
这意味着每次我想使用它时,我都必须使用当前分支的名称来调用它:git med topic。我想要的是避免它,git med不带参数地调用。
我知道我可以这样获取当前分支的名称:git rev-parse --abbrev-ref HEAD,但是当我切换到 master 后,我不能再使用它了。因此,我需要在切换到 master 之前将其保存在变量中。
如何使用 git 别名中的变量?
我在 Windows 上,使用 posh-git。
我试图添加一个复杂的 git 别名,它将在执行命令时回显消息。我想对一些消息进行着色(红色表示错误等)。
[alias]
test = !"f() { echo "\033[31mHello\033[0m World"; }; f"
Run Code Online (Sandbox Code Playgroud)
但是,当我执行别名时,出现错误:
bad config line X in file .gitconfig`
Run Code Online (Sandbox Code Playgroud)
echo "\033[31mHello\033[0m World"在终端中运行相同的命令可以很好地着色。
我一直在写一些带有参数的git别名,这让我非常着迷。我见过有人在运行Shell脚本
[alias]
shAlias = !sh -c \" ... \"
Run Code Online (Sandbox Code Playgroud)
和其他与运行功能
[alias]
fAlias = "!f() { ... ; }; f"
Run Code Online (Sandbox Code Playgroud)
似乎(一旦我掌握了Bash的速度,这还不是我的目标),我想做的任何事情都可以用这两种形式实现。
在什么情况下比其他情况更好?
除了可行性之外,还有加工差异吗?内存使用/速度/等?
git ×10
git-alias ×10
bash ×3
escaping ×1
git-commit ×1
git-config ×1
github ×1
parameters ×1
posh-git ×1
share ×1
shell ×1