Gitでコミット失敗したとき困りますよね。技術評論社が無料で配布している技術書のカタログ「
電脳会議」でコミットを修正するコマンドが紹介されていました。
それをGitクライアント「SourceTree」でどのように操作するか紹介します。
実施環境
まずリモートリポジトリにプッシュされているか確認する
すでにリモートリポジトリへプッシュしているかどうかで対応方法が以下のように変わります。
- 修正したコミットをすでにリモートリポジトリにプッシュしてしまった
- 修正したコミットをリモートリポジトリにまだプッシュしていない
まずはプッシュされているか調べましょう。
コマンド
$git log --oneline @{u}..HEAD
SourceTree
SourceTreeの場合は黙っていても勝手に表示してくれています。
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhVc8ELIJ3_MpL40hwNAENBAua8WBd1_g_1uLB1dW91zZjt2WLaDsQz-l9aEz4E_UFs-w4hsl5omv4UK9QeP563lizgK2NSM-wnSrV_8LDDbxA7NlaRLEkMvNwmdvrk6-3RKXZr8WufssgO/s640/befor-push2.png) |
未プッシュ数は常に表示されています |
修正したコミットをすでにリモートリポジトリにプッシュしてしまった
この場合、プッシュしてしまったコミットを取り消すコミットを作成して新たにプッシュします。
プッシュしたコミットを取り消す
git rebertを使ってコミットした編集を取り消す新たなコミットを作成します。
コマンド
$git revert HEAD
SourceTree
対象のコミットを選択し、コンテキストメニューより「コミット適用前に戻す」を選択します。
"Revert"コメントが付与された、対象のコミットを取り消すコミットが生成されます。
修正したコミットをリモートリポジトリにまだプッシュしていない
この場合、修正内容により方法が異なります。
コミットメッセージを間違えた
コマンド
$git commit --amend
SourceTree
「リポジトリ」メニューの「対話的なリベース」より行います。
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg4946qTwqZgSh-ZW96UsKYt7k4YCMMBMmWoMo_w1U3gcAj7MmsYtrXDKsywARo0ukiaLkNuOBczD834hlt4UHM1bYKyMDyX-vhZOaNZr4EDnhz63M-n2bHT8U_J6qE_HPwupVfsQD3Kolr/s640/comment-menu2.png) |
メニューバー「リポジトリ」>「対話的なリベース」を選択 |
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjxZ-dnUT1YXxjGvD3si7u3bhUvf1q3UU3-zXaJ1NsQYfYgnUnfKWorX5I2kDGkGfQktd7oXYE7sVT20zl4FVbHTtdvk0TD0iwdLAJekUT1Ce5ZT7z1KfK7LfuAmDSNiVptHgHCjIOLo-7o/s640/comment-list2.png) |
コミット一覧より対象コミットを選んで「メッセージを編集」を押す |
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgzjMnMM9FEpW1Mwq3gFHTcBk_Av32rNBtK2FY3W7UmBnTJuCld4gukRnrnsC3CHqBvNVmWFEGPV9Rm4Un66HtPr8u6jKZBObki8nrmG9i_M26SWiV2D-J18xh7bkggWV2cIvsh0HFe9Nbs/s640/comment-input.png) |
コメントを修正 |
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiZbnx7YIGEJvYIBZhGuINayIlfO9jDHyWmbvPBVH2gvpGhbQ9FFLMGh7r37ZtJ_CYqJktxLZmQOjkYhq79NOka-A7hwM-juK6GdkeMQ35cGcDxsV-n7Ryk8AZ_JAtRpaGvafDgG5FUdhmV/s640/comment-complete2.png) |
完了! |
ファイルが漏れていた
コマンド
$ git add {追加するファイル名}
$ git commit --amend
SourceTree
直接このコマンドに対象する操作は見当たりませんでした。
この後に紹介する「コミットをやりなおす(ファイルの変更は残す)」を実行し、新たなコミットを作成することで対応できます。
コミットをやりなおす(ファイルの変更は残す)
コマンド
$ git reset HEAD^
SourceTree
対象のコミットを選択し、コンテキストメニューより「このコミットまで ****** を元に戻す」より実行します。
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj8MMe1k79X8_vfPjirm6NTl8LHRiffTiIavBTzhAmZfhmzu2AN48Ox07TjnpE8ZlbtRLbunm5sIhqcAkn01w7dPk41igEqZjS896SLTa0v3LCi1aLYfTdFc2WRmXIOkFT3YjJiAwTcbgXI/s640/reset-soft-menu2.png) |
戻したい箇所のコミットを選んで「このコミットまで・・・」を選択 |
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjfGc-ThWWZpjBYr1DVnlx-dJR259422CGy1pBaYhr1GIVUWGpVbnNWvqEL_ziWBUAIkPUsINL9uoewWz_Ya4LDysUYWcyxr-dtApC9pUqAUvXbAmCG0Kv_AfOMAj7HM5LTU3n3bkS5j9E2/s640/reset-soft-submenu2.png) |
「Soft - すべてのローカル変更を保持」を選択 |
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEil3nBReYyJl0a-V3jNRGbCSurcc2DkAOgs0IiY_XvNf2J27V-NTydTIxqmkuQf5gxG_OkLt4slA0WfgcDRC_FdoCaQeNanBpPIeSWF4NLI_txatNc43z_jGOtKVIvREU5xCVyev7YpGeh0/s640/reset-soft-complete2.png) |
完了 |
コミットをやりなおす(ファイルの変更は残さない)
コマンド
$ git reset --hard HEAD^
SourceTree
前述の「コミットをやりなおす(ファイルの変更を残す)」の操作と途中までは同じです。ダイアログメニューより「Hard」を選択します。
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjlvrsy5t93EDUn8lD12MylkRPkHdTdrGLku_lg0CnGjWsxXMRUP0jk5MvoJPp37Mm_AF1Zdc_JLNbA8h2SHo4AwQCgix1yLtg_ehg6puoL6q61-8Dm1jHIK4se-dYIgzqOb2KxmDLCx3n4/s640/reset-hard-submenu2.png) |
コンテキストメニューより「Hard - すべての・・・」を選択する |
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh7Bs2FqyUb0-MmLpdwk3OGeviJ95p8afVi39ATrtLGVWQ9JZ3ye7k5NE_HiGrw9XSNsCNvHFiWNKHh7esxGYj2euksP1f1YJSv8j74GtIjKWVtMKUcCnu25SA9fpDu30lCvBs5b8oyvrs9/s640/reset-hard-dialog2.png) |
警告が表示されるが「OK」を押す |
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjsXaX-PT7a9iZQm9mgiGd6jBBPYQ4MoRLWibmVvfFyC0KSAEiYd-RC0Ql_wKCxe8vLszGKOypXTUHKOEsgaB2yFPEdBwqnoddE5VLc1hOht4bsUS86R4EkKzF7Fm5257soQ-CCNfjZMglI/s640/reset-hard-complete2.png) |
完了 |
以上です。
Gitの運用もできるならキレイに運用したいですよね。これさえ知っておけばコミットミスも怖くありません。
0 件のコメント:
コメントを投稿