一般的なソリューション
パーサーを正しく渡すためのエイリアスを取得するgit
ことは、気が遠くなるような\\\\"
ノイズのセットになる可能性があるため、2 つのエイリアスを作成しました。
# Quote / unquote a sh command, converting it to / from a git alias string
quote-string = "!read -r l; printf \\\"!; printf %s \"$l\" | sed 's/\\([\\\"]\\)/\\\\\\1/g'; printf \" #\\\"\\n\" #"
quote-string-undo = "!read -r l; printf %s \"$l\" | sed 's/\\\\\\([\\\"]\\)/\\1/g'; printf \"\\n\" #"
sh
これにより、入力できるものはすべて+に変換できます。たとえば、次のようになります。
$ echo '\"'
\"
エイリアスに適合する引用符で囲まれた文字列に:
$ git quote-string
echo '\"'
"!echo '\\\"' #"
複数行の文字列を引用するために、より長いスクリプトを作成しました。次のように実行することをお勧めします。
git quote-string |
sponge
OPの特定の問題への回答
git quote-string
OPのコマンドを使用すると、次のようになります。
"!git filter-branch -f --msg-filter \"sed -e \\\"s/\\[ci skip\\]$//g\\\"\" master..HEAD #"
したがって、OP の優先エイリアス名を使用するには、 in の下[alias]
に以下を~/.gitconfig
追加します。
unwip = "!git filter-branch -f --msg-filter \"sed -e \\\"s/\\[ci skip\\]$//g\\\"\" master..HEAD #"
デバッグ
時々、ボンネットの下で何が起こっているかを見るのはいいことです。このエイリアスを試してください:
debug = "!set -x; GIT_TRACE=2 GIT_CURL_VERBOSE=2 GIT_TRACE_PERFORMANCE=2 GIT_TRACE_PACK_ACCESS=2 GIT_TRACE_PACKET=2 GIT_TRACE_PACKFILE=2 GIT_TRACE_SETUP=2 GIT_TRACE_SHALLOW=2 git"
debug
の間に挿入するだけgit
で、OPの質問など、通常続くものは何でも:
git debug unwip
+
git
*/bin/sh
で始まるエイリアスを実行するために使用します。これを回避するには、次のようなコマンド ラインを作成し、これを に渡します。!
bash -c 'echo \\\"'
git quote-string
*
証拠については、「デバッグ」の見出しを参照してください