{"id":37851,"date":"2023-02-08T18:20:08","date_gmt":"2023-05-29T03:13:50","guid":{"rendered":"https:\/\/www.silicloud.com\/zh\/blog\/%e5%85%ac%e5%bc%80git%e7%9a%84%e5%88%ab%e5%90%8d\/"},"modified":"2024-01-15T09:43:23","modified_gmt":"2024-01-15T01:43:23","slug":"%e5%85%ac%e5%bc%80git%e7%9a%84%e5%88%ab%e5%90%8d","status":"publish","type":"post","link":"https:\/\/www.silicloud.com\/zh\/blog\/%e5%85%ac%e5%bc%80git%e7%9a%84%e5%88%ab%e5%90%8d\/","title":{"rendered":"\u516c\u5f00Git\u7684\u522b\u540d"},"content":{"rendered":"<h1>git\u7684\u522b\u540d<\/h1>\n<p>\u5728\u5404\u4e2a\u5730\u65b9\u6536\u96c6\u5230\u7684alias\u63d0\u6848\u8fdb\u884c\u4e86\u4e00\u4e9b\u4fee\u6539\u548c\u6539\u8fdb\u3002<br \/>\n\u7531\u4e8e\u6ca1\u6709\u516c\u5f00\u548c\u7ef4\u62a4\u66f4\u65b0\u7684\u65b9\u6cd5\uff08\u7531\u4e8e\u4f7f\u7528\u79c1\u6709\u4ed3\u5e93\uff09\uff0c\u51b3\u5b9a\u5728\u5408\u9002\u7684\u65f6\u673a\u8fdb\u884c\u516c\u5f00\u3002<\/p>\n<p>\u6b64\u5916\uff0c\u6211\u5df2\u5c06\u5176\u4f5c\u4e3a\u5355\u72ec\u7684\u6587\u4ef6\uff0c\u5e76\u901a\u8fc7.gitconfig\u7684include\u8bbe\u7f6e\u6765\u83b7\u53d6\u3002<\/p>\n<p>\u5982\u679c\u4f7f\u7528peco\u4f5c\u4e3a\u522b\u540d\uff0c\u5e76\u4e14\u6709\u53c2\u6570\u7684\u8bdd\uff0c\u5b83\u4f1a\u4f5c\u4e3a\u7f29\u7565\u8bcd\uff0c\u5426\u5219\u4f1a\u5728peco\u4e2d\u9009\u62e9\u3002<br \/>\n\u540c\u65f6\u4e5f\u652f\u6301fzf\uff08\u56e0\u4e3a\u5728Windows\u4e0a\u6ca1\u6709winpty\u65f6\u7684\u4ea4\u4e92\u64cd\u4f5c\u8f83\u4e3a\u7a33\u5b9a\uff09\u3002<br \/>\n\u53e6\u5916\uff0c\u9009\u62e9\u8fd8\u53ef\u4ee5\u4ec5\u9650\u4e8e\u672c\u5730\u5206\u652f\uff0c\u6216\u8005\u5305\u62ec\u8ddf\u8e2a\u5206\u652f\uff0c\u6216\u8005\u4ece\u65e5\u5fd7\u4e2d\u9009\u62e9\u54c8\u5e0c\u503c\u7b49\u3002<\/p>\n<p>\u6709\u51e0\u4e2a\u9700\u8981\u6539\u8fdb\u7684\u5730\u65b9\uff0c\u4f8b\u5982\u8003\u8651\u5c06elif\u4fee\u6539\u4e3aelse\uff08\u5982\u679c\u6ca1\u6709peco\uff0c\u5219\u59cb\u7ec8\u8fdb\u884c\u7f29\u7565\u64cd\u4f5c\uff09\uff0c\u4f46\u5c1a\u672a\u5f00\u59cb\u5904\u7406\u3002<\/p>\n<h2>\u5225\u540d\u7684\u5b9a\u7fa9<\/h2>\n<pre class=\"post-pre\"><code># -*- coding: utf-8 -*-\r\n# vim:fenc=utf-8 ff=unix ft=gitconfig noexpandtab\r\n\r\n# fzf\/peco support\r\n# need backslash escape? ... currently not use backslash(in branch name)\r\n\r\n[alias]\r\n\t# based on\r\n\t# http:\/\/qiita.com\/su_k\/items\/1cd9597eacc20121a5b0\r\n\t# https:\/\/developers.eure.jp\/tech\/git-alias\/\r\n\taliases = !git config --get-regexp '^alias\\\\.' | sed 's\/alias\\\\.\\\\([^ ]*\\\\) \\\\(.*\\\\)\/\\\\1\\\\\\t =&gt; \\\\2\/'\r\n\tincludes = !git config --get-regexp '^include\\\\.path' | sed 's\/include\\\\.path \\\\(.*\\\\)\/\\\\1\/'\r\n\t# http:\/\/qiita.com\/takayukioda\/items\/4fc142aadb3ee7e081c0\r\n\tme = !git config --get-regexp '^user' | sed -e 's\/^user\\\\.\/\/' | sed -e 's\/ \/|\/' | column -t -s '|'\r\n\tpager-settings = !git config --get-regexp '^pager' | sed -e 's\/^pager\\\\.\/\/' | sed -e 's\/ \/|\/' | column -t -s '|'\r\n\tinfo = \"!f () {\\\r\n\t\tbranch=$(git current-branch);\\\r\n\t\tif [ \\\"${#}\\\" -eq 0 ]; then\\\r\n\t\t\tgit config         branch.${branch}.description 2&gt; \/dev\/null || echo \\\"not description yet\\\";\\\r\n\t\telse\\\r\n\t\t\tif [ \\\"${#}\\\" -eq 1 ] &amp;&amp; [ \\\"${*}\\\" == \\\"\\\" ]; then\\\r\n\t\t\t\tgit config --local --unset branch.${branch}.description;\\\r\n\t\t\telse\\\r\n\t\t\t\tgit config --local         branch.${branch}.description \\\"${*}\\\";\\\r\n\t\t\tfi;\\\r\n\t\tfi;\\\r\n\t};f\"\r\n\t# basic\r\n\t# co = checkout\r\n\t# co = like sw checkout alias\r\n\tsw = \"!f () {\\\r\n\t\tcheckouted=0;\\\r\n\t\tif [ \\\"${#}\\\" -eq 1 -a \\\"${1}\\\" = \\\"-\\\" ]; then\\\r\n\t\t\tgit switch -;\\\r\n\t\t\tcheckouted=1;\\\r\n\t\telif [ \\\"${#}\\\" -eq 1 ]; then\\\r\n\t\t\tmatch_num=$(git branch | sed 's\/^..\/\/' | grep -x \\\"${*}\\\" | wc -l);\\\r\n\t\t\tif [ 1 -eq \\\"${match_num}\\\" ]; then\\\r\n\t\t\t\tgit switch ${*};\\\r\n\t\t\t\tcheckouted=1;\\\r\n\t\t\tfi;\\\r\n\t\tfi;\\\r\n\t\tcommon_opt=\\\"--prompt=switch&gt; --query=${*} --select-1\\\";\\\r\n\t\tif [ 1 -eq \\\"${checkouted}\\\" ]; then\\\r\n\t\t\t:;\\\r\n\t\telif which fzf &gt;\/dev\/null 2&gt;&amp;1; then\\\r\n\t\t\tadd_opt=\\\"--header=local-branch\\\";\\\r\n\t\t\tif which bat &gt;\/dev\/null 2&gt;&amp;1; then\\\r\n\t\t\t\tgit branch --sort=authordate | tr -d ' \\\\*'\\\r\n\t\t\t\t\t| fzf  ${common_opt} ${add_opt} --preview='git show {} | bat -l gitlog --color always --style plain'\\\r\n\t\t\t\t\t| xargs -r -n 1 git switch;\\\r\n\t\t\telse\\\r\n\t\t\t\tgit branch --sort=authordate | tr -d ' \\\\*'\\\r\n\t\t\t\t\t| fzf  ${common_opt} ${add_opt} --preview='git show {} | cat'\\\r\n\t\t\t\t\t| xargs -r -n 1 git switch;\\\r\n\t\t\tfi;\\\r\n\t\telif which peco &gt;\/dev\/null 2&gt;&amp;1; then\\\r\n\t\t\tgit branch --sort=authordate | tr -d ' \\\\*'\\\r\n\t\t\t\t| peco ${common_opt}\\\r\n\t\t\t\t| xargs -r -n 1 git switch;\\\r\n\t\telif [ \\\"${#}\\\" -ge 1 ]; then\\\r\n\t\t\tgit switch ${*};\\\r\n\t\tfi;\\\r\n\t};f\"\r\n\trco = \"!f () {\\\r\n\t\tcheckouted=0;\\\r\n\t\tif [ \\\"${#}\\\" -eq 1 ]; then\\\r\n\t\t\tmatch_num=$(git branch -r | sed 's\/^..\/\/' | grep -x \\\"${*}\\\" | wc -l);\\\r\n\t\t\tif [ 1 -eq \\\"${match_num}\\\" ]; then\\\r\n\t\t\t\tgit checkout ${*};\\\r\n\t\t\t\tcheckouted=1;\\\r\n\t\t\tfi;\\\r\n\t\tfi;\\\r\n\t\tcommon_opt=\\\"--prompt=checkout&gt; --query=${*} --select-1\\\";\\\r\n\t\tif [ 1 -eq \\\"${checkouted}\\\" ]; then\\\r\n\t\t\t:;\\\r\n\t\telif which fzf &gt;\/dev\/null 2&gt;&amp;1; then\\\r\n\t\t\tadd_opt=\\\"--header=remote-branch\\\";\\\r\n\t\t\tif which bat &gt;\/dev\/null 2&gt;&amp;1; then\\\r\n\t\t\t\tgit branch -r --sort=authordate | grep -v 'HEAD' | tr -d ' \\\\*'\\\r\n\t\t\t\t\t| fzf  ${common_opt} ${add_opt} --preview='git show {} | bat -l gitlog --color always --style plain'\\\r\n\t\t\t\t\t| sed -e 's\/\\\\([^\/]*\\\\)\\\\\/\\\\(.*\\\\)\/\\\\2\/g' | xargs -r -n 1 git checkout;\\\r\n\t\t\telse\\\r\n\t\t\t\tgit branch -r --sort=authordate | grep -v 'HEAD' | tr -d ' \\\\*'\\\r\n\t\t\t\t\t| fzf  ${common_opt} ${add_opt} --preview='git show {} | cat'\\\r\n\t\t\t\t\t| sed -e 's\/\\\\([^\/]*\\\\)\\\\\/\\\\(.*\\\\)\/\\\\2\/g' | xargs -r -n 1 git checkout;\\\r\n\t\t\tfi;\\\r\n\t\telif which peco &gt;\/dev\/null 2&gt;&amp;1; then\\\r\n\t\t\t\tgit branch -r --sort=authordate | grep -v 'HEAD' | tr -d ' \\\\*'\\\r\n\t\t\t\t\t| peco ${common_opt}\\\r\n\t\t\t\t\t| sed -e 's\/\\\\([^\/]*\\\\)\\\\\/\\\\(.*\\\\)\/\\\\2\/g' | xargs -r -n 1 git checkout;\\\r\n\t\telif [ \\\"${#}\\\" -ge 1 ]; then\\\r\n\t\t\tgit checkout ${*};\\\r\n\t\tfi;\\\r\n\t};f\"\r\n\t# create branch\r\n\tcbr = switch -c\r\n\t# merge(branch) fzf\/peco selectable\r\n\t# support fuzzy match\r\n\t# old fzf if [ $# -eq 0 -a `which fzf` ]; then\\\r\n\tmb = \"!f () {\\\r\n\t\tmerged=0;\\\r\n\t\tif [ \\\"${#}\\\" -eq 1 ]; then\\\r\n\t\t\tmatch_num=$(git branch | sed 's\/^..\/\/' | grep -x \\\"${*}\\\" | wc -l);\\\r\n\t\t\tif [ 1 -eq \\\"${match_num}\\\" ]; then\\\r\n\t\t\t\tgit merge ${*};\\\r\n\t\t\t\tmerged=1;\\\r\n\t\t\tfi;\\\r\n\t\tfi;\\\r\n\t\tcommon_opt=\\\"--prompt=merge&gt; --query=${*}\\\";\\\r\n\t\tif [ 1 -eq \\\"${merged}\\\" ]; then\\\r\n\t\t\t:;\\\r\n\t\telif which fzf &gt;\/dev\/null 2&gt;&amp;1; then\\\r\n\t\t\tadd_opt=\\\"--header=all-branch\\\";\\\r\n\t\t\tif which bat &gt;\/dev\/null 2&gt;&amp;1; then\\\r\n\t\t\t\tgit branch -a | grep -v '\\\\-&gt;' | sed -e 's\/remotes\\\\\/\/\/g' | tr -d ' \\\\*'\\\r\n\t\t\t\t\t| fzf  ${common_opt} ${add_opt} --preview='git show {} | bat -l gitlog --color always --style plain'\\\r\n\t\t\t\t\t| xargs -r -n 1 git merge;\\\r\n\t\t\telse\\\r\n\t\t\t\tgit branch -a | grep -v '\\\\-&gt;' | sed -e 's\/remotes\\\\\/\/\/g' | tr -d ' \\\\*'\\\r\n\t\t\t\t\t| fzf  ${common_opt} ${add_opt} --preview='git show {} | cat'\\\r\n\t\t\t\t\t| xargs -r -n 1 git merge;\\\r\n\t\t\tfi;\\\r\n\t\telif which peco &gt;\/dev\/null 2&gt;&amp;1; then\\\r\n\t\t\tgit branch -a | grep -v '\\\\-&gt;' | sed -e 's\/remotes\\\\\/\/\/g' | tr -d ' \\\\*'\\\r\n\t\t\t\t| peco ${common_opt}\\\r\n\t\t\t\t| xargs -r -n 1 git merge;\\\r\n\t\telif [ \\\"${#}\\\" -ge 1 ]; then\\\r\n\t\t\tgit merge ${*};\\\r\n\t\tfi;\\\r\n\t};f\"\r\n\t# based on\r\n\t# http:\/\/qiita.com\/ryusukefuda\/items\/98e7e8d6c3b7486a407d\r\n\t# delete branch(es) fzf\/peco selectable\r\n\tdb = \"!f () {\\\r\n\t\tcommon_opt=\\\"--prompt=delete-branch(es)&gt;\\\";\\\r\n\t\tif [ \\\"${#}\\\" -eq 0 ] &amp;&amp; which fzf &gt;\/dev\/null 2&gt;&amp;1; then\\\r\n\t\t\tadd_opt=\\\"-m --header=local-branch\\\";\\\r\n\t\t\tif which bat &gt;\/dev\/null 2&gt;&amp;1; then\\\r\n\t\t\t\tgit branch --sort=authordate | tr -d ' \\\\*'\\\r\n\t\t\t\t| fzf  ${common_opt} ${add_opt} --preview='git show {} | bat -l gitlog --color always --style plain'\\\r\n\t\t\t\t| xargs -r git branch -d;\\\r\n\t\t\telse\\\r\n\t\t\t\tgit branch --sort=authordate | tr -d ' \\\\*'\\\r\n\t\t\t\t| fzf  ${common_opt} ${add_opt} --preview='git show {} | cat'\\\r\n\t\t\t\t| xargs -r git branch -d;\\\r\n\t\t\tfi;\\\r\n\t\telif [ \\\"${#}\\\" -eq 0 ] &amp;&amp; which peco &gt;\/dev\/null 2&gt;&amp;1; then\\\r\n\t\t\tgit branch --sort=authordate | tr -d ' \\\\*'\\\r\n\t\t\t| peco ${common_opt}\\\r\n\t\t\t| xargs -r git branch -d;\\\r\n\t\telif [ \\\"${#}\\\" -ge 1 ]; then\\\r\n\t\t\tgit branch | sed 's\/^..\/\/' | grep \\\"${*}\\\" | xargs git branch -d;\\\r\n\t\tfi;\\\r\n\t};f\"\r\n\t# cherry-pick fzf\/peco selectable\r\n\tcp = \"!f () {\\\r\n\t\tcommon_opt=\\\"--prompt=cherry-pick&gt;\\\";\\\r\n\t\tif [ \\\"${#}\\\" -eq 0 ] &amp;&amp; which fzf &gt;\/dev\/null 2&gt;&amp;1; then\\\r\n\t\t\tadd_opt=\\\"-m --header=commit-log\\\";\\\r\n\t\t\tif which bat &gt;\/dev\/null 2&gt;&amp;1; then\\\r\n\t\t\t\tgit log --branches --oneline\\\r\n\t\t\t\t\t| fzf  ${common_opt} ${add_opt} --preview='echo {} | awk {print $1} | xargs git show | bat -l gitlog --color always --style plain'\\\r\n\t\t\t\t\t| awk '{print $1}' | xargs -r git cherry-pick;\\\r\n\t\t\telse\\\r\n\t\t\t\tgit log --branches --oneline\\\r\n\t\t\t\t\t| fzf  ${common_opt} ${add_opt} --preview='echo {} | awk {print $1} | xargs git show | cat'\\\r\n\t\t\t\t\t| awk '{print $1}' | xargs -r git cherry-pick;\\\r\n\t\t\tfi;\\\r\n\t\telif [ \\\"${#}\\\" -eq 0 ] &amp;&amp; which peco &gt;\/dev\/null 2&gt;&amp;1; then\\\r\n\t\t\tgit log --branches --oneline\\\r\n\t\t\t\t| peco ${common_opt}\\\r\n\t\t\t\t| awk '{print $1}' | xargs -r git cherry-pick;\\\r\n\t\telif [ \\\"${#}\\\" -ge 1 ]; then\\\r\n\t\t\tgit cherry-pick ${*};\\\r\n\t\tfi;\\\r\n\t};f\"\r\n\t# https:\/\/developers.eure.jp\/tech\/git-alias\/\r\n\tdrag = pull --rebase\r\n\t# based on\r\n\t# https:\/\/developers.eure.jp\/tech\/git-alias\/\r\n\trefresh = fetch --prune\r\n\t# basic\r\n\tci = commit\r\n\t# ci interactive\r\n\t# below not work\r\n\t# ci = \"!f () {\\\r\n\t#\t\tif [ $# -eq 0 -a -e `~\/bin\/cii.sh` ]; then\\\r\n\t#\t\t\texport GIT_EDITOR='bash ~\/bin\/cii.sh';\\\r\n\t#\t\t\tgit commit -t ~\/bin\/cii-empty.txt;\\\r\n\t#\t\telif [ $# -ge 1 ]; then\\\r\n\t#\t\t\tgit commit ${*};\\\r\n\t#\t\tfi;\\\r\n\t# };f\"\r\n\t# based on\r\n\t# http:\/\/qiita.com\/tettekete\/items\/7019bf7d1bfa883d8549\r\n\tst = status --short --branch\r\n\tuntracked = status --untracked-files=normal\r\n\t# based on\r\n\t# https:\/\/qiita.com\/usamik26\/items\/38bd5b99349d0ae9c4ca\r\n\tignored = status --ignored\r\n\tbr = branch --sort=authordate\r\n\t# log decorate\r\n\t# https:\/\/developers.eure.jp\/tech\/git-alias\/\r\n\tll        = log --pretty=format:\"%C(yellow)%h%Cred%d\\\\ %Creset%s%Cblue\\\\ [%cn]\" --decorate --numstat\r\n\t# variant\r\n\tlogline   = log --pretty=format:\"%C(yellow)%h%Cred%d\\\\ %Creset%s%Cblue\\\\ [%cn]\" --decorate --branches --no-merges --stat\r\n\tlogstatus = log --pretty=format:\"%C(yellow)%h%Cred%d\\\\ %Creset%s%Cblue\\\\ [%cn]\" --decorate --branches --no-merges --name-status\r\n\t# https:\/\/qiita.com\/hirotsugu_kawa\/items\/41afaafe477b877b5b73\r\n\t# https:\/\/doruby.jp\/users\/yokian\/entries\/git-log---graph%E3%81%A7%E3%83%AD%E3%82%B0%E3%82%92%E8%A6%8B%E3%82%84%E3%81%99%E3%81%8F%E3%81%99%E3%82%8B\r\n\t# tree = log --graph --all --format=format:'%C(bold blue)%h%C(reset) - %C(bold green)(%ar)%C(reset) %C(white)%s%C(reset) %C(bold white)? %an%C(reset)%C(bold yellow)%d%C(reset)' --abbrev-commit --date=relative\r\n\t# tree = log --graph --pretty=format:'%x09%C(auto) %h %Cgreen %ar %Creset%x09by\"%C(cyan ul)%an%Creset\" %x09%C(auto)%s %d'\r\n\t# tree = log --graph --oneline --decorate=full -20 --date=short --format='%C(yellow)%h%C(reset) %C(magenta)[%ad]%C(reset)%C(auto)%d%C(reset) %s %C(cyan)@%an%C(reset)'\r\n\ttree  = log --graph --oneline --date=iso                --pretty=format:'%C(yellow)%h%C(reset) %C(magenta)[%ad]%C(reset)%C(auto)%d%C(reset) %C(cyan)@%an%C(reset) %s'\r\n\t# http:\/\/postd.cc\/human-git-aliases\/\r\n\t# graph = log --graph -10 --branches --remotes --tags --format=format:'%Cgreen%h %Creset? %&lt;(75,trunc)%s (%cN, %ar) %Cred%d' --date-order\r\n\tgraph = log --graph --oneline --date=iso                --pretty=format:'%h %ad | %s%d [%an]'\r\n\t# variant\r\n\thist  = log --graph --oneline --date=short --date-order --pretty=format:'%h %ad | %s%d [%an]'\r\n\t# based on\r\n\t# https:\/\/qiita.com\/skoji\/items\/28f1d6582cf81638cd3f\r\n\t# http:\/\/neos21.hatenablog.com\/entry\/2018\/05\/28\/080000\r\n\t# https:\/\/stackoverflow.com\/questions\/52123651\/how-to-show-whitespace-differences-with-git-word-diff\r\n\twdiff = diff --word-diff-regex='[ ]+|[^ ]+'\r\n\t# wdiff = diff --color-words='[ ]+|[^ ]+'\r\n\r\n\tconflicts = diff --name-only --diff-filter=U\r\n\r\n\t# based on\r\n\t# https:\/\/developers.eure.jp\/tech\/git-alias\/\r\n\tdr = \"!f () {\\\r\n\t\techo \\\"diff from $1^ to $1\\\";\\\r\n\t\tgit diff \\\"$1\\\"^..\\\"$1\\\";\\\r\n\t};f\"\r\n\t# based on\r\n\t# https:\/\/developers.eure.jp\/tech\/git-alias\/\r\n\tfind = \"!git ls-files | grep -i\"\r\n\tls = ls-files\r\n\t# http:\/\/qiita.com\/Yinaura\/items\/cc10fbc83b4d6bb1ef0c\r\n\tbranch-root = merge-base master HEAD\r\n\tremember = !git diff $(git branch-root)\r\n\t# based on\r\n\t# http:\/\/qiita.com\/yaotti\/items\/0d5364eae36ad1bb8e01\r\n\tfix = commit --amend\r\n\tmerged = \"!f () {\\\r\n\t\tgit branch --merged | grep -v master | grep -v '*' | sed 's\/^..\/\/';\\\r\n\t};f\"\r\n\t# http:\/\/postd.cc\/human-git-aliases\/\r\n\tunmerged = branch --no-merged\r\n\t# delete merged branch(es) fzf\/peco selectable\r\n\tmerged-delete = \"!f () {\\\r\n\t\tcommon_opt=\\\"--prompt=delete-branch(es)&gt;\\\";\\\r\n\t\tif [ \\\"${#}\\\" -eq 0 ] &amp;&amp; which fzf &gt;\/dev\/null 2&gt;&amp;1; then\\\r\n\t\t\tadd_opt=\\\"-m --header=merged-branch\\\";\\\r\n\t\t\tif which bat &gt;\/dev\/null 2&gt;&amp;1; then\\\r\n\t\t\t\tgit merged | tr -d ' \\\\*'\\\r\n\t\t\t\t| fzf  ${common_opt} ${add_opt} --preview='git show {} | bat -l gitlog --color always --style plain'\\\r\n\t\t\t\t| xargs -r git branch -d;\\\r\n\t\t\telse\\\r\n\t\t\t\tgit merged | tr -d ' \\\\*'\\\r\n\t\t\t\t| fzf  ${common_opt} ${add_opt} --preview='git show {} | cat'\\\r\n\t\t\t\t| xargs -r git branch -d;\\\r\n\t\t\tfi;\\\r\n\t\telif [ \\\"${#}\\\" -eq 0 ] &amp;&amp; which peco &gt;\/dev\/null 2&gt;&amp;1; then\\\r\n\t\t\t\tgit merged | tr -d ' \\\\*'\\\r\n\t\t\t| peco ${common_opt}\\\r\n\t\t\t| xargs -r git branch -d;\\\r\n\t\telif [ \\\"${#}\\\" -ge 1 ]; then\\\r\n\t\t\tgit branch | sed 's\/^..\/\/' | grep \\\"${*}\\\" | xargs git branch -d;\\\r\n\t\tfi;\\\r\n\t};f\"\r\n\r\n\t# based on\r\n\t# https:\/\/qiita.com\/panti310\/items\/35d4b820029bab4fad3c\r\n\tcurrent-branch = rev-parse --abbrev-ref HEAD\r\n\t# push\/pull single ... limitation remote name fixed problem.\r\n\t# or\r\n\t# https:\/\/qiita.com\/kmszk\/items\/3de61ef75e30dedd6f6e\r\n\t# current-branch = symbolic-ref --short HEAD\r\n\t# with lf\r\n\r\n\t# base on\r\n\t# https:\/\/qiita.com\/upinetree\/items\/0b74b08b64442f0a89b9\r\n\t# use only non-single-branch\r\n\t# currently broken\r\n\t# parent-branch = \"!f () {\\\r\n\t#\t\tgit show-branch | grep '*' | grep -v '$(git current-branch)' | head -1 | awk -F'[]~^[]' '{print $2}'\\\r\n\t# };f\"\r\n\r\n\tpf = push --force-with-lease\r\n\r\n\t# http:\/\/postd.cc\/human-git-aliases\/\r\n\tbranches = branch -a\r\n\ttags = tag\r\n\tstashes = stash list\r\n\tremotes = remote -v\r\n\tunstage = reset -q HEAD --\r\n\tdiscard = checkout --\r\n\tuncommit = reset --mixed HEAD~\r\n\tamend = commit --amend\r\n\t# http:\/\/postd.cc\/git-undo\/\r\n\t# undo\t= \"!f () {\\\r\n\t#\t\tgit reset --hard $(git rev-parse --abbrev-ref HEAD)@{${1-1}};\\\r\n\t# };f\"\r\n\tundo\t= \"!f () {\\\r\n\t\tgit reset --hard $(git current-branch)@{${1-1}};\\\r\n\t};f\"\r\n\r\n\t# http:\/\/qiita.com\/konweb\/items\/621722f67fdd8f86a017\r\n\texclusion-gitignore = \"!f () {\\\r\n\t\tgit rm --cached $(git ls-files --full-name -i --exclude-from=.gitignore)\\\r\n\t};f\"\r\n\r\n\t# https:\/\/itiskj.hatenablog.com\/entry\/2017\/09\/07\/050000\r\n\t# alias fzf\/peco selectable\r\n\talex = \"!f () {\\\r\n\t\tcommon_opt=\\\"--prompt=alias&gt;\\\";\\\r\n\t\tif [ \\\"${#}\\\" -eq 0 ] &amp;&amp; which fzf &gt;\/dev\/null 2&gt;&amp;1; then\\\r\n\t\t\tadd_opt=\\\"-m --header=aliases\\\";\\\r\n\t\t\tgit aliases\\\r\n\t\t\t\t| fzf  ${common_opt} ${add_opt}\\\r\n\t\t\t\t| awk '{print $1}' | cut -f1 -d'=' | xargs -r git;\\\r\n\t\telif [ \\\"${#}\\\" -eq 0 ] &amp;&amp; which peco &gt;\/dev\/null 2&gt;&amp;1; then\\\r\n\t\t\tgit aliases\\\r\n\t\t\t\t| peco ${common_opt}\\\r\n\t\t\t\t| awk '{print $1}' | cut -f1 -d'=' | xargs -r git;\\\r\n\t\telif [ \\\"${#}\\\" -ge 1 ]; then\\\r\n\t\t\tgit aliases;\\\r\n\t\tfi;\\\r\n\t};f\"\r\n\tshallow = \"!f () {\\\r\n\t\tif [ \\\"${#}\\\" -eq 0 ]; then\\\r\n\t\t\tgit fetch --depth=100  &amp;&amp; git prune &amp;&amp; git gc;\\\r\n\t\telse\\\r\n\t\t\tgit fetch --depth=${*} &amp;&amp; git prune &amp;&amp; git gc;\\\r\n\t\tfi;\\\r\n\t};f\"\r\n\r\n\tfixup = commit --fixup HEAD\r\n\tfixing = \"!f () {\\\r\n\t\tGIT_SEQUENCE_EDITOR=':' git rebase -i $(git branch-root);\\\r\n\t};f\"\r\n\r\n\tcoauthoradd = \"!f () {\\\r\n\t\tif [ \\\"${#}\\\" -gt 1 ]; then\\\r\n\t\t\techo \\\"not support argment greater than 1\\\";\\\r\n\t\telse\\\r\n\t\t\toutput=$(git log -1 --pretty='%b');\\\r\n\t\t\ttest -z \\\"${output}\\\";\\\r\n\t\t\thasbody=${?};\\\r\n\t\t\toutput=$(git log -1 --pretty='%(trailers:key=Co-authored-by)');\\\r\n\t\t\ttest -z \\\"${output}\\\";\\\r\n\t\t\thastrailers=${?};\\\r\n\t\t\toutputformat=\\\"%s\\\";\\\r\n\t\t\tnewline=\\\"\\n\\n\\\";\\\r\n\t\t\tif [ \\\"${hasbody}\\\" -eq 1 ]; then\\\r\n\t\t\t\toutputformat=\\\"%s%n%n%b\\\";\\\r\n\t\t\t\tif [ \\\"${hastrailers}\\\" -eq 1 ]; then\\\r\n\t\t\t\t\tnewline=\\\"\\n\\\";\\\r\n\t\t\t\tfi;\\\r\n\t\t\telse\\\r\n\t\t\t\tnewline=\\\"\\n\\n\\\";\\\r\n\t\t\tfi;\\\r\n\t\t\tcommon_opt=\\\"--prompt=author&gt; --query=${*}\\\";\\\r\n\t\t\tif which fzf &gt;\/dev\/null 2&gt;&amp;1; then\\\r\n\t\t\t\tadd_opt=\\\"--header=co-author\\\";\\\r\n\t\t\t\tif which bat &gt;\/dev\/null 2&gt;&amp;1; then\\\r\n\t\t\t\t\tcoauthor=$(git log -1000 --pretty=\\\"%an &lt;%ae&gt;, %ae\\\"\\\r\n\t\t\t\t\t\t| sort -f -k 2 -t , | uniq -i -f 1 | cut -d, -f1\\\r\n\t\t\t\t\t\t| fzf ${common_opt} ${add_opt} --preview='git show | bat -l gitlog --color always --style plain');\\\r\n\t\t\t\telse\\\r\n\t\t\t\t\tcoauthor=$(git log -1000 --pretty=\\\"%an &lt;%ae&gt;, %ae\\\"\\\r\n\t\t\t\t\t\t| sort -f -k 2 -t , | uniq -i -f 1 | cut -d, -f1\\\r\n\t\t\t\t\t\t| fzf ${common_opt} ${add_opt} --preview='git show');\\\r\n\t\t\t\tfi;\\\r\n\t\t\t\tif [ -n \\\"${coauthor}\\\" ]; then\\\r\n\t\t\t\t\tprintf \\\"%s%sCo-authored-by: %s\\\" \\\"$(git log -1 --pretty=${outputformat})\\\" \\\"${newline}\\\" \\\"${coauthor}\\\"\\\r\n\t\t\t\t\t\t| git commit --file - --amend;\\\r\n\t\t\t\tfi;\\\r\n\t\t\telif which peco &gt;\/dev\/null 2&gt;&amp;1; then\\\r\n\t\t\t\tcoauthor=$(git log -1000 --pretty=\\\"%an &lt;%ae&gt;, %ae\\\"\\\r\n\t\t\t\t\t| sort -f -k 2 -t , | uniq -i -f 1 | cut -d, -f1\\\r\n\t\t\t\t\t| peco ${common_opt});\\\r\n\t\t\t\tif [ -n \\\"${coauthor}\\\" ]; then\\\r\n\t\t\t\t\tprintf \\\"%s%sCo-authored-by: %s\\\" \\\"$(git log -1 --pretty=${outputformat})\\\" \\\"${newline}\\\" \\\"${coauthor}\\\"\\\r\n\t\t\t\t\t\t| git commit --file - --amend;\\\r\n\t\t\t\tfi;\\\r\n\t\t\tfi;\\\r\n\t\tfi;\\\r\n\t};f\"\r\n# EOF\r\n<\/code><\/pre>\n<h2>\u6ce8\u91ca<\/h2>\n<p>\u5728\u4e2d\u56fd\uff0c\u72b6\u6001\u6709\u4ee5\u4e0b\u7684\u8bbe\u5b9a\uff0c\u901a\u5e38\u5c06\u672a\u8ddf\u8e2a\uff08untracked\uff09\u5b9a\u4e49\u4e3a\u4e0d\u7ecf\u5e38\u67e5\u770b\u3002<\/p>\n<pre class=\"post-pre\"><code>[status]\r\n        # http:\/\/qiita.com\/tettekete\/items\/7019bf7d1bfa883d8549\r\n        showuntrackedfiles = no\r\n<\/code><\/pre>\n<h2>\u5728\u9019\u7bc7\u6587\u7ae0\u7684\u6700\u5f8c\uff0c\u6211\u60f3\u63d0\u4e00\u4e9b\u5efa\u8b70\u3002<\/h2>\n<p>\u6211\u53ef\u4ee5\u5229\u7528\u8fd9\u7bc7\u6587\u7ae0\u7684\u8981\u70b9\uff0c\u4f46\u65e0\u8bba\u662f\u5728\u672c\u5730\u8fd8\u662f\u5728gist\u4e0a\u90fd\u65e0\u6cd5\u8fdb\u884c\u6587\u4ef6\u7ef4\u62a4\uff0c\u5fc5\u987b\u5728\u6587\u7ae0\u672c\u8eab\u8fdb\u884c\u4fee\u6539\uff0c\u8fd9\u6709\u70b9\u9ebb\u70e6&#8230;<\/p>\n<h2>2. \u7ed3\u5c3e\u8bf4\u660e<\/h2>\n<p>Qiita\u7684gist\u94fe\u63a5\u5df2\u7ecf\u505c\u6b62\u3002<\/p>\n<h2>\u7b2c\u4e09\u7ae0\u5f8c\u8a18<\/h2>\n<p>\u6211\u5df2\u5c06\u5176\u79fb\u690d\u6539\u5199\u5230Zenn\u4e0a\u3002<br \/>\nhttps:\/\/zenn.dev\/tsuyoshicho\/articles\/2020-09-16-git-aliases-revised<\/p>\n","protected":false},"excerpt":{"rendered":"<p>git\u7684\u522b\u540d \u5728\u5404\u4e2a\u5730\u65b9\u6536\u96c6\u5230\u7684alias\u63d0\u6848\u8fdb\u884c\u4e86\u4e00\u4e9b\u4fee\u6539\u548c\u6539\u8fdb\u3002 \u7531\u4e8e\u6ca1\u6709\u516c\u5f00\u548c\u7ef4\u62a4\u66f4\u65b0\u7684\u65b9\u6cd5\uff08\u7531\u4e8e\u4f7f\u7528\u79c1 [&hellip;]<\/p>\n","protected":false},"author":3,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-37851","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v21.5 (Yoast SEO v21.5) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>\u516c\u5f00Git\u7684\u522b\u540d - Blog - Silicon Cloud<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.silicloud.com\/zh\/blog\/\u516c\u5f00git\u7684\u522b\u540d\/\" \/>\n<meta property=\"og:locale\" content=\"zh_CN\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"\u516c\u5f00Git\u7684\u522b\u540d\" \/>\n<meta property=\"og:description\" content=\"git\u7684\u522b\u540d \u5728\u5404\u4e2a\u5730\u65b9\u6536\u96c6\u5230\u7684alias\u63d0\u6848\u8fdb\u884c\u4e86\u4e00\u4e9b\u4fee\u6539\u548c\u6539\u8fdb\u3002 \u7531\u4e8e\u6ca1\u6709\u516c\u5f00\u548c\u7ef4\u62a4\u66f4\u65b0\u7684\u65b9\u6cd5\uff08\u7531\u4e8e\u4f7f\u7528\u79c1 [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.silicloud.com\/zh\/blog\/\u516c\u5f00git\u7684\u522b\u540d\/\" \/>\n<meta property=\"og:site_name\" content=\"Blog - Silicon Cloud\" \/>\n<meta property=\"article:published_time\" content=\"2023-05-29T03:13:50+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-01-15T01:43:23+00:00\" \/>\n<meta name=\"author\" content=\"\u97f5, \u79d1\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"\u4f5c\u8005\" \/>\n\t<meta name=\"twitter:data1\" content=\"\u97f5, \u79d1\" \/>\n\t<meta name=\"twitter:label2\" content=\"\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4\" \/>\n\t<meta name=\"twitter:data2\" content=\"11 \u5206\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e5%85%ac%e5%bc%80git%e7%9a%84%e5%88%ab%e5%90%8d\/\",\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e5%85%ac%e5%bc%80git%e7%9a%84%e5%88%ab%e5%90%8d\/\",\"name\":\"\u516c\u5f00Git\u7684\u522b\u540d - Blog - Silicon Cloud\",\"isPartOf\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#website\"},\"datePublished\":\"2023-05-29T03:13:50+00:00\",\"dateModified\":\"2024-01-15T01:43:23+00:00\",\"author\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/6530331a63adef3b3443a1fab53a0e6e\"},\"breadcrumb\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e5%85%ac%e5%bc%80git%e7%9a%84%e5%88%ab%e5%90%8d\/#breadcrumb\"},\"inLanguage\":\"zh-Hans\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.silicloud.com\/zh\/blog\/%e5%85%ac%e5%bc%80git%e7%9a%84%e5%88%ab%e5%90%8d\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e5%85%ac%e5%bc%80git%e7%9a%84%e5%88%ab%e5%90%8d\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\u9996\u9875\",\"item\":\"https:\/\/www.silicloud.com\/zh\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"\u516c\u5f00Git\u7684\u522b\u540d\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#website\",\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/\",\"name\":\"Blog - Silicon Cloud\",\"description\":\"\",\"inLanguage\":\"zh-Hans\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/6530331a63adef3b3443a1fab53a0e6e\",\"name\":\"\u97f5, \u79d1\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-Hans\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/429ccb39b3fff5188bc17986222cfb0936cbadb8cc933cff04ab5ca01bd30a08?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/429ccb39b3fff5188bc17986222cfb0936cbadb8cc933cff04ab5ca01bd30a08?s=96&d=mm&r=g\",\"caption\":\"\u97f5, \u79d1\"},\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/author\/yunke\/\"},{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-Hans\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e5%85%ac%e5%bc%80git%e7%9a%84%e5%88%ab%e5%90%8d\/#local-main-organization-logo\",\"url\":\"\",\"contentUrl\":\"\",\"caption\":\"Blog - Silicon Cloud\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"\u516c\u5f00Git\u7684\u522b\u540d - Blog - Silicon Cloud","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.silicloud.com\/zh\/blog\/\u516c\u5f00git\u7684\u522b\u540d\/","og_locale":"zh_CN","og_type":"article","og_title":"\u516c\u5f00Git\u7684\u522b\u540d","og_description":"git\u7684\u522b\u540d \u5728\u5404\u4e2a\u5730\u65b9\u6536\u96c6\u5230\u7684alias\u63d0\u6848\u8fdb\u884c\u4e86\u4e00\u4e9b\u4fee\u6539\u548c\u6539\u8fdb\u3002 \u7531\u4e8e\u6ca1\u6709\u516c\u5f00\u548c\u7ef4\u62a4\u66f4\u65b0\u7684\u65b9\u6cd5\uff08\u7531\u4e8e\u4f7f\u7528\u79c1 [&hellip;]","og_url":"https:\/\/www.silicloud.com\/zh\/blog\/\u516c\u5f00git\u7684\u522b\u540d\/","og_site_name":"Blog - Silicon Cloud","article_published_time":"2023-05-29T03:13:50+00:00","article_modified_time":"2024-01-15T01:43:23+00:00","author":"\u97f5, \u79d1","twitter_card":"summary_large_image","twitter_misc":{"\u4f5c\u8005":"\u97f5, \u79d1","\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4":"11 \u5206"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e5%85%ac%e5%bc%80git%e7%9a%84%e5%88%ab%e5%90%8d\/","url":"https:\/\/www.silicloud.com\/zh\/blog\/%e5%85%ac%e5%bc%80git%e7%9a%84%e5%88%ab%e5%90%8d\/","name":"\u516c\u5f00Git\u7684\u522b\u540d - Blog - Silicon Cloud","isPartOf":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/#website"},"datePublished":"2023-05-29T03:13:50+00:00","dateModified":"2024-01-15T01:43:23+00:00","author":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/6530331a63adef3b3443a1fab53a0e6e"},"breadcrumb":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e5%85%ac%e5%bc%80git%e7%9a%84%e5%88%ab%e5%90%8d\/#breadcrumb"},"inLanguage":"zh-Hans","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.silicloud.com\/zh\/blog\/%e5%85%ac%e5%bc%80git%e7%9a%84%e5%88%ab%e5%90%8d\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e5%85%ac%e5%bc%80git%e7%9a%84%e5%88%ab%e5%90%8d\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\u9996\u9875","item":"https:\/\/www.silicloud.com\/zh\/blog\/"},{"@type":"ListItem","position":2,"name":"\u516c\u5f00Git\u7684\u522b\u540d"}]},{"@type":"WebSite","@id":"https:\/\/www.silicloud.com\/zh\/blog\/#website","url":"https:\/\/www.silicloud.com\/zh\/blog\/","name":"Blog - Silicon Cloud","description":"","inLanguage":"zh-Hans"},{"@type":"Person","@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/6530331a63adef3b3443a1fab53a0e6e","name":"\u97f5, \u79d1","image":{"@type":"ImageObject","inLanguage":"zh-Hans","@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/429ccb39b3fff5188bc17986222cfb0936cbadb8cc933cff04ab5ca01bd30a08?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/429ccb39b3fff5188bc17986222cfb0936cbadb8cc933cff04ab5ca01bd30a08?s=96&d=mm&r=g","caption":"\u97f5, \u79d1"},"url":"https:\/\/www.silicloud.com\/zh\/blog\/author\/yunke\/"},{"@type":"ImageObject","inLanguage":"zh-Hans","@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e5%85%ac%e5%bc%80git%e7%9a%84%e5%88%ab%e5%90%8d\/#local-main-organization-logo","url":"","contentUrl":"","caption":"Blog - Silicon Cloud"}]}},"_links":{"self":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/37851","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/comments?post=37851"}],"version-history":[{"count":2,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/37851\/revisions"}],"predecessor-version":[{"id":58315,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/37851\/revisions\/58315"}],"wp:attachment":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/media?parent=37851"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/categories?post=37851"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/tags?post=37851"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}