Gitを使いこなそう!知っておくと便利な使い方 ~Tower2・SourceTree~
こんにちは。ICSの渡邊です。
今年7月に高機能Gitクライアントの「Tower2」がリリースされ、また無償のGitクライアントの「SourceTree」も日々バージョンアップされており、Gitのクライアントツールもだいぶ充実し使いやすくなってきました。
以前、弊社野原がSourceTreeに関する記事「こんな使い方知ってましたか?SourceTreeをさらに使いこなすための便利機能」を掲載させて頂いておりますが、この他にもGitには色々な機能が準備されており、使いこなすことで効率よく開発を進めていくことができるようになると思います。
Gitのコマンド自体は色々なサイトに情報が掲載されていますが、GitのコマンドとGUIでの操作がいまいち結びつかない事が多いと思います。そこで本記事ではGitの便利なコマンドを「Tower2」「SourceTree」での使い方を踏まえて、ご紹介していきたいと思います。
コミットの修正・やり直し
コミット後に「コミット漏れのファイルがあった・・」「コメントを間違えたので修正したい」など困ったことはありませんか?
リモートリポジトリにPUSHする前であれば、「git commit --amend」コマンドを使うことで解決することができます。
git commit --amend
Tower2の操作方法
「WorkingCopy」画面にある「Amend」というチェックボックスにチェックを入れることで、コミットの修正ができるようになります。チェックを入れると直前コミットのコメントが表示され、コメントの修正やファイルの追加ができるようになり「Amend」ボタンを押すことで修正が反映されます。
コメントはそのままでファイルの追加だけをしたいという方は「WorkingCopy」画面で「Alt」ボタンを押すと「Commit」ボタンが「Amend」ボタンに切り替わるので、このままファイルを選択し「Amend」ボタンを押すことでファイルの追加が簡単にできます。
SourceTreeの操作方法
「作業コピー」画面にある「コミット オプション」から「最新のコミットを修正」にチェックを入れることで、コミットの修正ができるようになります。チェックを入れると直前コミットのコメントが表示され、コメントの修正やファイルの追加ができるようになり「コミット」ボタンを押すことで修正が反映されます。
コミットの取り消し
Gitにはコミットを取り消すことができる仕組みが用意されています。リモートリポジトリにPUSHする前であれば簡単な操作で取り消すことができます。コミット後に「やっぱりまだコミットはしたくない」「間違ったブランチにコミットしてしまった・・」などの場合は「git reset」コマンドを使いましょう。リモートリポジトリにPUSHしてしまった場合は、コミット履歴は残ってしまいますが、次項の「コミットの打ち消し」を使って元に戻す事ができます。
git reset (--soft | --mixed | --hard)
「git reset」コマンドには3つのオプションがあり、用途に合わせて選ぶことができます。
- soft
選択したコミットまで戻し、すべての変更をインデックスに保持したままにします。細かいコミットをまとめたり、整理したい時などに便利です。 - mixed
選択したコミットまで戻し、インデックスはリセットされ、すべての変更はワーキングツリーに保持した状態になります。デフォルト(オプション指定なし時)のオプションになります。 - hard
選択したコミットまで戻し、すべての変更を破棄します。誤ったコミットを取り消したい時などに便利です。
※実際に作業しているフォルダを「ワーキングツリー」といい、修正したファイルをコミットする前の状態を保持している領域(コミットするためにツール上でファイルを選択した状態)を「インデックス」といいます。
Tower2の操作方法
コミット履歴の一覧からもとに戻りたい位置のコミットを右クリックし「Reset HEAD to “XXXXXXXX”」を選択します。すると、「Keep Changes」するかどうかのチェックボックスが表示されますので、
「mixed」オプションで実行したい場合はチェックを入れたまま、「hard」オプションで実行したい場合はチェックを外して実行してください。
SourceTreeの操作方法
コミット履歴の一覧からもとに戻りたい位置のコミットを右クリックし「このコミットまで XXXXX を戻す」を選択します。すると、「soft」「mixed」「hard」の3つのオプションを選ぶ画面が出てくるので、実行したいモードを選択して実行して下さい。
コミットの打ち消し
コミット取り消したいがリモートリポジトリにPUSHしてしまったという方は「git revert」コマンドを利用することで、特定のコミットの変更を元に戻す事ができます。ただし、「git reset」コマンドと違い、もとに戻す(なかった事にする)訳ではなく、打ち消す(修正を元に戻すコミットを行う)コマンドになります。そのため、リモートリポジトリにPUSHしてしまった後でも、修正をもとに戻すことが可能となります。
git revert
Tower2の操作方法
コミット履歴の一覧から元に戻したいコミットを右クリックし「Revert “XXXXXXXX”」を選択すると、選択したコミットを打ち消す内容がコミットされます。問題がなければPUSHすることでリモートリポジトリに反映できます。
SourceTreeの操作方法
コミット履歴の一覧から元に戻したいコミットを右クリックし「コミット適用前に戻す…」を選択すると、選択したコミットを打ち消す内容がコミットされます。問題がなければPUSHすることでリモートリポジトリに反映できます。
チェリーピック
チェリーピックとは英語で「いいとこ取り」「つまみ食い」という意味がある通り、別ブランチの特定のコミット内容だけを現在のブランチに取り込む機能です。コミット単位で取り込む事ができるため、別ブランチに同じ修正を反映させたいときなどに使用できるとても便利な機能です。
git cherry-pick(-rn)
Tower2の操作方法
コミット履歴の一覧から元に戻したいコミットを右クリックし「Cherry-Pick “XXXXXXXX”」を選択します。チェリーピックした内容をコミットするかのダイアログが表示されるので、直接コミットしたくない場合はチェックボックスにチェックを入れて(-rnオプション)実行します。
SourceTreeの操作方法
コミット履歴の一覧から元に戻したいコミットを右クリックし「チェリーピック」を選択します。SourceTreeでは直接コミットするかのオプションは選べないため、コミットして問題ないかのダイアログが表示されますので、問題なければ実行してください。
おわりに
頻繁に使う操作ではありませんが、これらの操作を覚えておくことで、実際にこういったシチュエーションに陥った場合にも、スムーズに対応できるようになります。また、これらの機能を活用することで無駄なコミットが減り、開発効率の向上にもつながります。
他にも便利な機能は色々ありますので、興味のある方は調べてみてはいかがでしょうか?
※本記事は、Tower2(2.0.8)、SourceTree(2.0.2) を使って作成しています。