[Git] git でのブランチを使った基本操作覚書

個人開発でよく使うパターンの git コマンドを整理してみます

環境&対象

以下の環境で動作確認を行なっています。

  • macOS Big Sur 11.1
  • git 2.24.3(Apple Git-128)

前提

Git の上で git flow を使っているので、開発ブランチは develop、リリースブランチは、main です。

基本的に変更を入れるときは ブランチ -> トランク(develop or main) に反映 という手順にしています。

個人的な趣味かもしれませんが、fast-forward コミットは 好きでないので、develop や main に新しいコミットとしてマージしています。

自分しかコミットしないので、大きな Conflict は発生しないのですが、複数ブランチを使っているときは、可能な限りリベースして将来的な Conflict を減らそうとしています。

概要

上記のような前提だと、git はすごく シンプルに使うことになります。以下のようなパターンが大半です。

  • ブランチを作成する (+ブランチ名の変更)
  • ブランチにコミットする(+コメント修正)
  • ブランチをトランクにマージ (+ブランチ削除)
  • 複数のブランチが併存するケースでは、可能な限りリベースする
  • 間違ったブランチで作業してしまい、変更を別ブランチに移動させる

ブランチ作成

何らかの変更を入れるときには、全てブランチを作成して作業します。

急いでいたりすると忘れがちなので、特に理由はなくとも、ブランチを作成し、checkout するようにしています。

その際のブランチ名は適当でも後から簡単に変更できます。

branchA というブランチを作りたければ以下のコマンドです。

ブランチ作成
% git checkout -b branchA

ブランチ名は、以下のコマンドで変更できます。

ブランチ名変更
% git branch -m branchA newBranchA

変更をブランチにコミット

知らない人はいないですよね。

コミット
% git commit -m comment

コミットした後に、コメントを修正したくなったら以下のコマンドで修正できます。

コメント修正
% git commit --amend

ブランチをトランクにマージ

前提にも書きましたが、ファストフォワードが好きでないので、 --no-ff オプションをつけて使っています。

トランクにマージ
% git checkout develop // develop に移動
% git merge --no-ff branchA // ファストフォワードせずにマージ

トランクにマージして確認した後に、作業ブランチを削除してます。

ブランチを削除
% git branch -d branchA // branchA を削除

ブランチをマージした後に、既存別ブランチのベースを変更する

branchA と branchB を同じタイミングで develop からブランチさせて、最初に branchB を develop にマージしたとします。

branchA を (branchB をマージした) develop から再度ブランチさせることで、branchA を (将来的に)develop にマージするタイミングでのコンフリクトを減らすことができると予想できます。

ということで、すでにあるブランチを再度ブランチしなおす(リベースすると呼ばれます)には、以下のコマンドです。

コード
% git rebase develop branchA

変更を別ブランチに移動させる

ブランチを間違えて作業してしまっても コミット前であれば、その変更を移動させることができます。

以下は、branchA でしてしまった作業を branchB へ移動させる操作です。

コード
% git checkout branchA   // branchA で作業
・・・変更・・・

% git stash save         // 現在の変更を save という名前で保存
・・・変更が保存されます・・・

% git checkout branchB   // branchB に移動
% git stash apply save   // save という名前で保存された変更を反映
・・・変更が不整合なく適用されたか確認

% git stash drop save    // save という名前で保存された変更を破棄

SourceTree 等の GUI で操作することも多いですが、コマンドラインを覚えておくといざというときに便利です。

説明は以上です。
不明な点やおかしな点ありましたら、こちらまで。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です