Git3

コマンド

ブランチをマージする

$ git merge <統合したいブランチ名>

指定したブランチがHEADの指しているブランチに取り込まれる。

ブランチを削除する

$ git branch -d <ブランチ名>

branchコマンドに -d オプションを指定して実行。

並行で作業する

Issue2とissue3それぞれ編集したが、ブランチを切り替えるとファイルの内容が変わっていて、1つのブランチごとにそれに対応したインデックスとワークツリーがあるんだという事が分かった。

Git logの出力結果に括弧書きで出てくるものは、各ブランチの最新の状態を表している様だった。
例えば、(HEAD -> issue3)の記載のあるコミットが、issue3の今の状態で、(main)の記載のあるcommitが今のmainの状態。
issue3).png

rebaseでマージする

Pasted Graphic.png
この状態で、issue3ブランチをチェックアウトしてから

$ git rebase <つなぐ元にするブランチ名>

例)$ git rebase main
競合箇所を修正した後はコミットではなく、rebaseコマンドに --continue オプションを指定して実行。もし、rebase自体を取り消す場合は--abortオプションを指定。
$ git add myfile.txt
$ git rebase --continue
この結果、logは下記の状態になった。
Commit 8d2288452067fecab7845007d82be4e22ec26c89 (main, issue2).png

rebaseではHEADのあるブランチ(issue3)に指定したブランチの内容(青枠のcommit内容)が入り、一本にまとまっただけで、下記の様な状態らしい。

Pasted Graphic 2.png

ので、HEADをmainに移し、iuuse3の内容をmergeする必要がある。

$ git checkout mainし、$ git merge issue3した結果mainの中にissue3の内容が取り込まれ、さらにHEADもそちらに移った。
Date Fri May 13 093904 2022 +0900.png

Pasted Graphic 4.png

リモートリポジトリに関係するコマンド

Pull

git fetch を行った上で git merge を行う。
デフォルトの設定では、 rebase せずに fast-forward 可能な場合は fast-forward を行い、そうでない場合は、 merge commit を生成しようとします。
この時、競合する変更がなければ自動的にマージコミットが作られ、競合があった場合は、それを解決してから自分でコミットする必要がある。

fetch

単にリモートリポジトリの内容を確認したいだけの時はマージをしたくない場合もあります。そのような時はfetchを使用します。
fetchを実行すると、リモートリポジトリの最新の履歴の取得だけを行うことができます。取得したコミットは、名前の無いブランチとして取り込まれます。このブランチはFETCH_HEADという名前でチェックアウトすることができます。

push

ローカルリポジトリからリモートリポジトリにpushするときは、pushしたブランチがfast-forwardマージされるようにしておく必要があります。もし、競合が発生するような場合は、pushが拒否されます。

タグ

軽量タグ

ローカルで一時的に使う使い捨てに使用。
・名前を付けられる

$ git tag <タグの名前>

現在のHEADが指しているコミットにタグを付ける。
パラメーター無しでgit tagを実行すると、タグの一覧を表示できます。
logコマンドに --decorateオプションを付けて実行すると、タグ情報を含めて履歴を表示することができます。

注釈付きタグ

リリースタグに使う。
・名前を付けられる
・コメントを付けられる
・署名を付けられる

$ git tag -am “<コメント>” <タグの名前>

-a オプション 注釈付きタグを追加
-m オプション コメントを与える

タグを削除する

-d オプション<タグの名前>で削除できる。

コミットの書き換え

直前のコミットを修正

amendオプションを指定してコミットを行うと、同じブランチの直前のコミットに対して内容を追加やコメントの修正をすることができます。

ファイルの内容を変更し、git addする

$ git commit --amend

すると、直前のコミットのコミットメッセージがエディタで表示されるので、これを変更する。

過去のコミットを打ち消す

revertでは、指定したコミットの内容を打ち消すコミットを作り出すことができる。
公開済みのcommitは削除出来ないので、revertで内容を打ち消すコミットを作り出す。

$ git revert <打ち消したいコミット>

例)$ git revert HEAD
コミットメッセージ編集画面になったら、Escキーを押してから「ZZ」と入力することで確定される。

コミットを捨てる

resetでは、要らなくなったコミットを捨てることができます。
マージにも使える。

$ git reset --hard HEAD~

オプション
--soft:HEADの位置のみ(commitやmergeする前の状態に戻るだけ)
--mixed:HEADの位置・ステージ
--hard:HEADの位置・ステージ・作業ディレクト

1つ前のコミット・・・HEAD^
2つ前のコミット・・・HEAD^^
8個前・・・HEAD~8
やコミットIDでの指定も出来る。

コミットを抜き取る

cherry-pickは、別のブランチから今いるブランチへ、必要なコミットだけをコピーできる便利なコマンド。

$ git cherry-pick [コミットIDその1]..[コミットIDその2]

コミットせずに作業ディレクトリだけに変更を留めたい場合は、オプション-nを使います。