今週は私が技術シェアを担当する番です。いろいろ考えた結果、今週の技術シェアのテーマとして git を選ぶことにしました。理由は二つあります。一つは最近 git を使用している際にいくつかの問題が発生したため、具体的な内容は後述します。もう一つは、毎日 git を使っているものの、いくつかの基本的な概念についてはまだ曖昧な部分があり、今回のシェアを通じて git をさらに理解したいと思っています。
git の原理#

workspace: 作業領域(現在の開発位置)
git pull: リモートリポジトリから最新のコードを作業領域に取得する =>git fetch+git mergegit diff: 変更されたがステージされていないファイルを確認する
index: ステージングエリア
git add: 作業領域での変更内容をステージングエリアに追加する
repository: ローカルリポジトリ
git commit: ステージングエリアの内容をローカルリポジトリにコミットするgit fetchまたはgit clone: リモートリポジトリからコードをローカルリポジトリに取得 / クローンする
remote repository: リモートリポジトリ
git push: ローカルリポジトリの内容をリモートリポジトリにプッシュする
よくある質問#
- git push origin master は具体的に何をしているのか?
ローカルのmasterブランチの内容をoriginにプッシュし、originに同名のmasterブランチを作成します。
完全なコマンド:git push origin master:master => git push <リモートホスト名> <ローカルブランチ名>:<リモートブランチ名>
- git merge と git rebase の違い
例:test ブランチを master ブランチにマージする

git mergeの結果

git rebaseの結果

最近遭遇した問題#
- ローカルプロジェクトがエラーを出し、以前のバージョンに戻りたい => ローカルリポジトリを以前のバージョンに戻す
git reset --hard/soft [戻したいコミットポイント]
- すでにリポジトリにプッシュしたコミットを取り消す => リモートリポジトリを以前のバージョンに戻す
git reset --hard [戻したいコミットポイント]
git push origin HEAD --force