modest violet

modest violet

開発者としてのあれこれや、日々の雑記など

your future hasn't written yet. no one's has.
by Emmett Lathrop "Doc" Brown

Gitで差をつけろ!初心者向け12の必須コマンド:開発を加速させる極意

はじめに

gitはコマンド入力する方が断然使いやすいと思っています。しかし、初心者にはハードルが高いのも然り。でも習うより慣れろなので、毎日少しずつ覚えていけば一か月後には「Gitマスター」も夢じゃないと思います。そういう私も最初はpushの時はoriginの後は空白なのに、mergeの時はorigin/(スラッシュ)になるとか苦戦しました。Gitは怖い物では無く、皆さんの開発業務を助けてくれるパートナーです。

今回はGit初心者向けのコマンド紹介ですので、リモートリポジトリや初期設定は終わっているが、日々のコマンドがスラスラ出てこない層を対象にしています。好評であれば続編するかもしれません。

リポジトリを取得する

git clone [URL]

自分のPCにリポジトリを取得(クローン)します。

ローカルブランチを作成しつつ切り替える

git checkout -b [任意のブランチ名]  [リモートリポジトリのブランチ名]

ローカルに指定した任意のブランチ名でブランチを作成しつつ、作業ブランチを切り替えます。単にブランチを切り替えたいだけであれば、-bは不要です。

ブランチの一覧を確認する

git branch -a -v

-a はローカルブランチ、リモートブランチを合わせた一覧を取得します。
-v は詳細情報を一緒に取得します。便利なので併せて覚えておくと良いでしょう。

一時的に修正を待避する

git stash

コミットはまだしたくないけれど、一時的にブランチを切り替えないといけない場合があります。その時は一時的にstashで待避する事が可能です。

待避した修正を戻す

git stash pop

git stashで待避させた修正はgit stash popで戻す事が可能です。popを行うと復元させた後、待避させていた先の情報は削除されます。削除せずに残したい場合は、popではなくapplyを指定してください。

履歴を参照する

git log

過去のコミット履歴を参照出来ます。よく使います。ここで表示されるコミットIDをコピペしてマージしたり、チェックアウトしたりすることが頻繁です。

管理対象に追加する

git add [ファイル名]

指定したファイル名をgitの管理対象として追加します。

コミットする

git commit -m "コミットメッセージ"

指定したコミットメッセージでコミットを行います。最初はどのタイミングでコミットをすればいいのか分からないと思います。特にSVNから移ってきた人は戸惑う事が多いようです。*1
最初はビルドが通る状態で少し修正したらコミットでも構わないと考えています。大事なのはいつでもコミットした状態に戻せる安心感を持つことです。どれだけ破壊的な変更を行っても直ぐに直前の状態に戻せるようにする。具体的なイメージはExcelやWordの保存ボタンを押すような感覚でコミットでもいいでしょう。 ※但し、このままマスターブランチにマージすると非難囂々かもしれません。merge --squashで最終的にコミットをまとめる作業がいる可能性があります。それぞれのGit管理に準じてください。

プッシュする

git push origin [ブランチ名]

いよいよリモートリポジトリに保存する時が来ました。注意点はブランチ名が誤っていないかを十分意識してください。

最新の情報に更新する

git fetch

他のユーザーがプッシュした情報を最新に更新します。とはいえ、ヘッダー情報のみの取得で実態までは取得しません。

最新の変更データを取得する

git pull origin [ブランチ名]

指定したブランチ名の変更データをローカルに取得します。

他の変更をマージする

git merge [マージするブランチ]

他のブランチを自分のブランチにマージします。競合が無ければそのまま結合されますが、同じファイルで別々の修正があった場合はコンフリクト(競合)と呼ばれ、手動で修正する必要があります。

さいごに

gitにはまだまだコマンドがあり、VisualStudioを使用すれば上記コマンドの大半はGUIで完結します。VisualStudioや他のGUIツールでの操作を覚えるのも良いですが、一部GUIでは無いコマンドもあるので覚えていて損はないと思います。

とても参考になるサイト

https://zukulog098r.com/git/zukulog098r.com

*1:SVNはコミットがGitで言うところのPushのような存在である為