Bash 在命令行上获取git提交ID
当运行git commit--fixup=beefca7e或在提交消息中引用以前的提交时,我必须在一个笨拙的工作流中使用鼠标。我使用bash:Bash 在命令行上获取git提交ID,bash,git,autocomplete,Bash,Git,Autocomplete,当运行git commit--fixup=beefca7e或在提交消息中引用以前的提交时,我必须在一个笨拙的工作流中使用鼠标。我使用bash: 打开新的终端选项卡/窗口/窗格 git日志--oneline--graph 浏览列表以查找相关的提交sha 抓起鼠标,选择sha,将其复制到剪贴板。² 向后移动我正在工作的窗格并将其粘贴到那里 这很有效。但我怀疑这可以做得容易得多 是否有命令行工具、脚本或git插件允许我快速过滤提交并复制所选条目的sha? 我的工作流程是否错误(或幼稚),我是否错过了某
git日志--oneline--graph
- 对于这个名为
,我有一个更复杂的别名git lg
- ²xclip/gnome/clipboard管理器配置为选择时自动复制。否则ctrl-c/cmd-c左右。粘贴是鼠标中键。保存一些命令,但仍不太理想。我宁愿不使用鼠标,也不想省略大多数步骤
gitk
/gitg
具有适用于linux的“快捷方式”:它们自动选择所选提交的sha1,并将其放置在X剪贴板中,您可以通过“中键单击”粘贴sha,而无需任何其他操作
在windows上,如果自动选择sha1,您可以直接ctrl+C
从命令行:您可以使用适当的命令将sha1复制到剪贴板,但根据您的需要,可能会涉及“适当的命令”:
# easy :
git rev-parse HEAD~4 | xclip -selection c
# more involved :
clipsha () {
sha1=$(git log --format="%H" --grep "$1");
git log --oneline -1 $sha1;
echo $sha1 | xclip -selection c;
echo " *** copied sha1 to clipboard"
}
# usage :
clipsha "fixed issue #1234" # will copy the sha1 of first which contains
# the message 'fixed issue #1234'
如果您不想重新发明tig
,请检查我建议重复的问题:您可以在
tig
中添加快捷方式,将“所选提交的sha1”复制到剪贴板
但说实话,我和你(或@torek)一样:我通过从终端上选择sha1来复制/粘贴它们。如果没有合适的工具,那么就创建它)得出以下结论:
#!/bin/bash
first_dialog() {
dialog --output-fd 1 \
--ok-label "Copy SHA" \
--cancel-label "Exit" \
--menu "Select SHA to copy:" 0 0 0 "${list[@]}"
}
#-------------{ Create list for dialog }----------------
while read -r sha desc; do
list+=( "$sha" "$desc" )
done < <(git log --oneline)
first_dialog
或者像这样:
sha="$(~/ower/test)"
$ echo $sha
20799ef
转换为函数:
gsha() {
list=()
while read -r sha desc; do
list+=( "$sha" "$desc" )
done < <(git log --oneline -n${1:-20})
dialog --output-fd 1 \
--ok-label "Copy SHA" \
--cancel-label "Exit" \
--menu "Select SHA to copy:" 0 0 0 "${list[@]}"
}
sha="$(gsha)"
$ echo $sha
20799ef
gsha(){
列表=()
读时-r sha desc;do
列表+=(“$sha”“$desc”)
完成<尝试,您不必键入sha,如果它是最新的提交,其消息提到了strcat
,您可以说:/strcat
或@^{/strcat}
,以了解在提交消息中从何处开始查找strcat
要获得散列,请使用rev parse,如果您经常这样做,请制作一个rp
别名或其他东西,然后:r!git rp:/strcat
将sha放入编辑缓冲区。您可以使用提交相对语法,但请确保您知道您是否以及何时可能需要^2
而不仅仅是头~7
。线性计数仅适用于如果你在提交图的一个线性部分上,你也可以使用提交消息搜索,比如:/foo
。最后,虽然我倾向于使用哈希ID的剪切和粘贴。你试过tig
?@Ivan我试过tig,但在我必须探索历史时,我主要使用tig
和gitg
然而,ig
和gitg没有简单的方法来复制commit sha AFAIK,这意味着我必须使用tig或gitg,而不是常见的git命令来提交、写消息、写修复等。如果没有简单的方法来“获取git sha”Alltogether,我可能会重新考虑这个问题。这是否回答了你的问题?
gsha() {
list=()
while read -r sha desc; do
list+=( "$sha" "$desc" )
done < <(git log --oneline -n${1:-20})
dialog --output-fd 1 \
--ok-label "Copy SHA" \
--cancel-label "Exit" \
--menu "Select SHA to copy:" 0 0 0 "${list[@]}"
}
sha="$(gsha)"
$ echo $sha
20799ef