Gitで初心者から準初心者になるときに覚える操作(Sourcetree使用)
1人でGitをバックアップ程度に使っていた時はコミット・プッシュ・プル・クローンくらいができれば良かったのですが、
チーム開発に参加した頃、変なことにならないか心配で思いきったことができませんでした。
「ブランチ切るのが精一杯で、切ったはいいが使いこなしてるわけではない」…という人が、
「コミットさえしておけばとりあえず何か失敗してもどうにでもなる」という次元に辿り着くために必要なSourcetreeの操作をまとめました。
- コマンド派の人にはあまり役に立たないまとめですが、「こんなことができる」という点では共通していると思います。
- 「プッシュ後にミスったリモートのブランチをどうにかする」みたいな内容ではなく、ローカルであれこれする操作がメインの記事です。
最終コミットの状態にリセット
コミット前のファイルを、最終コミットの状態に戻すことができます。
<ケース>
いろいろとファイルをいじったが、最終コミットの状態に戻したい。
<やり方>
ファイルを右クリックして「リセット」を選択する
※複数ファイルを選択してリセットすることもできます。
※当然ですが、コミット前のものをリセットするので、リセット前のものは戻らないと思ってやりましょう。
一つ前のコミットに追加する / 一つ前のコミットメッセージを変更する
<ケース>
- コミット後に「この修正も前のコミットに含めたかった」というものが出てきた時。
- 「さっきのコミットメッセージやっぱり編集したい」という時。
<前提>
プッシュ前であること
<やり方>
コミットをクリックしたら、コミットメッセージの右上にある「コミットオプション」>「直前のコミットを上書き」にチェックを入れる。
一個前のコミットメッセージが出てくるので、変更したい場合は変更してコミットする。
メインブランチの変更を取り込む
自分が作業しているブランチとは別にメインブランチが更新されたら、自分のブランチにも反映させておかないと後々プルリクエストを出したあとにマージが面倒になります。
プルリクエスト前にメインブランチの変更を取り込んでおき、ローカルでコンフリクトを解決することができます。
また、プルリクエストを出した後にメインブランチが更新された場合も同じです。
github上でコンフリクトが起きたら、ローカルの作業ブランチにメインブランチを取り込んで解決→プッシュ という流れで解決できます。
<ケース>
- プルリクエスト前に、メインブランチとの差をなくしておきたい。
- プルリクエスト後にコンフリクトが起きたのでローカルで解決したい
<やり方>
- 作業ブランチをチェックアウトしている状態で「プル」をクリックする。
- 「プルするリモートのブランチ」でメインブランチを選択して「OK」をクリックする。
※デフォルトではマージになりますが、一度もプッシュしていないブランチの場合はオプションで「リベース」にしてもOKです。 - コンフリクトが起きたら、コンフリクトを解決してコミットする。
チェリーピック
別のブランチのコミットを、自分のブランチに取り込むことができます。
<ケース>
他のブランチで新たにボタンのコンポーネントが追加されたので、そのコンポーネントだけ今の作業ブランチに取り込みたい
<やり方>
取り込みたいコミットを右クリックして「チェリーピック」を選択する。
※対象のコミットに、更新したくないファイルが混ざっていた場合は、
チェリーピック→コミット前にいらないファイルはリセット→コミット
という流れで対応できます。
ブランチの名称変更
ブランチの名称を変更することができます。プッシュ前にはよく使う場面があります。
<ケース>
- ブランチ名がわかりにくいので変更したい
- ブランチ名のタイポを修正したい
<やり方>
ブランチを右クリックして「名前を変更」を選択する。
ブランチの削除
<ケース>
マージしたブランチを削除したい
<やり方>
ブランチを右クリックして「削除」を選択する。
ブランチの「作成」「名称変更」「削除」ができるようになったら、
ローカルに適当なブランチを作る → リモートに上がってる他の人のブランチをプルしてきて中身を見る
みたいなことができるようになります。
地味だけどブランチのありがたみを感じることができます。
過去のコミットまでまるっと消す
<ケース>
余計なコミットを積み上げてしまったので、過去のコミットまでまるっと消したい
<やり方>
- 過去の戻したい先のコミットを右クリックし、「<ブランチ名>をこのコミットまでを戻す」をクリック
- 下記で、Hardを選ぶと問答無用で綺麗に消える。Mixedを選ぶと「コミット前」に戻るので、前述の「最終コミットの状態にリセット」のようにリセットすれば消える(こっちの方が安全ではある)。
※ちなみに、過去1個目のコミットを修正するだけなら、前述した「コミットオプション」>「直前のコミットを上書き」を使えば次のコミットで上書き可能です。
※個人的には、経験を積むにつれこれをやる機会は減ってきました。間違ったものも残していく度胸がついたのかもしれません。(本当にノイズになりそうなものだけ消す)