SourceTreeでインタラクティブなリベースができないときに疑ってみるといいこと
今回は私がSourceTreeでインタラクティブなリベースを行うときにハマり、その時の原因と対策について書きたいと思います。
SourceTreeでインタラクティブなリベースができないときに疑ってみるといいこと
次のようなGitの履歴を持つレポジトリをSourceTreeでリベースを行おうとした時です。
SourceTree上でインタラクティブなリベース(対話形式でリベース)して上記4つのコミットを1つのコミットにしようとしていました。
しかし、4つのコミットをSquashして1つのコミットにし、ローカルではうまくいくのですがプッシュしようとすると、次のエラーが発生してプッシュできませんでした。
1 2 3 4 5 6 7 8 9 10 |
git --no-optional-locks -c color.branch=false -c color.diff=false -c color.status=false -c diff.mnemonicprefix=false -c core.quotepath=false -c credential.helper=sourcetree push -v --tags origin refs/heads/master:refs/heads/master Pushing to https://github.com/Chico27/github-test14.git To https://github.com/Chico27/github-test14.git ! [rejected] master -> master (non-fast-forward) error: failed to push some refs to 'https://github.com/Chico27/github-test14.git' hint: Updates were rejected because the tip of your current branch is behind hint: its remote counterpart. Integrate the remote changes (e.g. hint: 'git pull ...') before pushing again. hint: See the 'Note about fast-forwards' in 'git push --help' for details. Completed with errors, see above |
実務でエラーが起き、その時はWindowsを使っていました。
今再現しているのはMacです。
上記のMacで起きるエラーではよく分かりませんが、WindowsでSourceTreeを使った時は「Comment Error」みたいなエラーが出てきてpushができませんでした。
原因と対策
上記エラーの原因としては、Squashして一つのコミットにまとめようとした時、コメントの最初に"#"がついていることです。
これがなぜ悪いのかというと、SourceTree上ではなくGit bash上でリベースを行おうとしたときに分かります。
Git bash上で同じ操作を行おうとすると、次のようなrebaseファイルを編集することになりますね。
そして次のようなコメントの編集画面になると思います。
ここで気づくことがあると思います。
それは、コメントとして"#"が使われていることです。
つまり、rebaseしたときコメントの先頭に"#"がついてしまうとそれがコメントとして認識されてしまい、コメットメッセージがnullとして送信されてしまうためpush時にエラーが起きてしまうのです。
よって回避策としては、コメントの先頭の"#"をとってあげればいいことになります。
redmine上のチケットと結びつける時はコメントの先頭に"#"をつけてコミットメッセージをつけることが風習だったり習慣になっているかもしれませんが、rebaseを行うときなど特別な操作を行うときには注意が必要です。
SouceTree上ではできないままですが、"#"に注意してターミナルを起動してコマンドでrebaseを行ってやるとうまくいきます。
終わりに
今回はSourceTreeでインタアクティブなリベースができないときに疑ってみるといいことについてご紹介いたしました。
ディスカッション
コメント一覧
まだ、コメントがありません