最弱エンジニアの付箋紙

システム開発に関して勉強になったことを書きためて、なんとなく身につけるための心のメモ。

Git 初心者に向けた概要をまとめてみた

Gitを使う上で押さえておきたいところをまとめてみました
(自分含め初心者向けのメモ)

Gitとは

資産管理ツールです。 成果物を版数管理するツール
様々な要望や検討が伴うお仕事では、並行した検討にもかかわらず
同一の資料やソースコードに手を入れたいことがしばしば。
するとファイルをコピーして一時的に手を入れる、ということも。
すると・・・

  • 「この資料、どれが最新なんだっけ」
  • 「この対応、実はなかったことに。。」
  • 「君の修正、上書きして消しちゃった!」

なんてことになりかねません。
それを解決するのが資産管理ツールです。

資産管理ツールを使うことで、成果物を一か所に集めて最新の  
ファイルを格納/編集するルールを適用する。

SVNとの違い

成果物を共有する格納場所

1つの格納領域(リポジトリ)に

  1. ひとつだけの格納場所 か
  2. 複数の格納場所 か

SVN…「1.」のみ
Git…「1.」「2.」両方OK

ただしGitは自由度が高いので、
「1.」のように使うか、「2.」のように使うか のルールが必要です。
Gitは複数の成果物格納場所とつながっている(イメージ的表現)ので、
「いま○○の成果物格納場所をみてる」という状態があります。
※「作業ブランチは○○」と表現する

編集の統合(マージ)

マージがし易ければ、複数人での同時開発が捗ります。
 先輩「あ、あれまだ終わってないからまだ着手しちゃダメよ」
 ぼく「ひま」
というのが減ります。

SVN…マージめんどい。
Git…マージ賢い。早い。

Gitだと、同ファイルを編集しても、編集箇所がある程度離れていれば
自動的に高速にマージができます。
SVNだと自動的にマージされず、ファイル単位で手動でマージが必要

覚えておきたい操作

  • git fetch
サーバーのリポジトリ情報を取得する。  
※これやらないと共有した資産に対して手が出せない
  • git branch '[ブランチ名]'
現作業ブランチを元に[ブランチ名]を作成する。
※基本的に、編集中のファイルは無い状態で行う
  • git checkout '[ブランチ名]'
作業ブランチを指定したブランチに変更する。
※基本的に、編集中のファイルは無い状態で行う
  • git status
作業ブランチの編集中ファイルの状態を確認
  • git commit
作業ブランチの変更を、保存する。
※Gitはこの「保存した変更」単位で差分を比較、集約(マージ)する
  • git push origin '[ブランチ名]'
ブランチの変更をサーバーのリポジトリ上に公開する。
※これで変更点をみんなが確認できます。(fetchしてね)
  • git merge origin/[ブランチ名]
作業ブランチに対し、[ブランチ名]との差分をマージする。  
※同ファイル、同行くらいの差がある場合はコンフリクトするので  
 編集→commit→push が必要。
  • git pull
git fetch、(作業ブランチに対する)git merge を行う。
  • git stash
編集中のファイルを、一時的に退避する。
  • git stash pop
退避した編集を反映する。
  • git cherry-pick [コミットID]
作業ブランチに、指定したコミットIDの編集およびコミットを適用する。

(個人的には cherry-pick のすばらしさに感動して Git が好きになりました)