git - nora75/tah2_map GitHub Wiki

git

gitとはバージョン管理システムの事。
何故バージョン管理するかと言うと、間違えてしまった時とかに前のバージョンに戻したり、その状態を見たりできると便利じゃんっていう事で利用すると思ってもらえれば。

git の基本

ファイルの変更をコミットしたいならaddしてからcommit

変更のあるファイルだけaddする

  • git add -u(unstaged)

git reset

  • git reset --hard:HEADの位置・インデックス・ワーキングツリー全て 全てのファイルを特定のcommit時に戻したいときに使う
  • git reset --mixed(or オプション無し):HEADの位置・インデックス
  • git reset --soft:HEADの位置のみ

git checkout

  • git checkout {branch name} ブランチに切り変える
  • git checkout -b {branch name} [{remote}] ブランチに切り変えると同時に作成も行う
    remoteの指定をした場合はremoteのブランチから作成する
  • git checkout {commit} {file} ... 指定ファイルを指定コミット時の状態に戻す
  • git checkout {file} ローカルでごちゃごちゃ弄ったけど元に戻したい! そんな時には以下コマンド。
  • git checkout . 特定のファイルではなく、全て元に戻したい場合

git branch

  • git branch -a remote/local全てのブランチの表示
  • git branch [-l] local全てのブランチの表示
  • git branch -d ブランチの削除
  • git branch -D ブランチの強制削除

git merge

マージ先にcheckoutで移動してからマージする

  • git merge {branch/remote} {branch/remote} merge right hand to left hand

git push

  • git push [{remote}] remoteへ現在のブランチをプッシュ
  • git push -u {remote} remoteのブランチを削除

git stash

  • git stash list 一覧の表示
  • git stash save [message] 現在の状態を保存
  • git stash apply 指定スタッシュの適応
  • git stash pop 指定スタッシュの適応と共に削除
  • git stash clear 全スタッシュを削除

git rm

  • ファイルも消えるよ。
    git rm hoge
    
  • ファイルは消さないで。
    git rm --cached hoge
    
  • 再帰的にね。
    git rm -r hoge/
    

git revert

  • git revert {commit} pushを取り消し
    複数を取り消したい場合は -n を付ける。
    git revert -n {commit}
    

コンフリクト(競合)

マージをする際に、リモートのファイルの情報と、ローカルでコンフリクトする事がある。
その場合の対処方法を記す。
マージの時に以下のようなメッセージが表示されたらコンフリクトしている。

Auto-merging hello.txt
CONFLICT (content): Merge conflict in hello.txt
Automatic merge failed; fix conflicts and then commit the result.

何故起きるのか

ローカルとリモートで同じ場所が変更されていて、両方異っている場合どちらの変更を適用すればいいのか判断出来ないため、手動で対応しなければならない。

解消方法

  • 該当ファイルを直接編集して解消 add , commitを忘れずに。
  • checkoutを利用して解消 git checkoutコマンドを使用すると、どちらか一方の変更点のみを適用することができる。
    git checkoutコマンドで使用するオプションは、--oursと--theirsの2つ。
    どちらか片方にcheckoutする事でどちらかの変更を反映させ、解消が可能になる。
    また、下記に書いてあるようにdiffを用いて確認してからcheckoutするとよい。
  • マージ先(ourバージョン)
  • マージされる側(theirバージョン)

diff

diffコマンドで以下を用いる事で

  • マージの起点(base)
  • マージ対象(ourバージョン)
  • マージされる側(theirバージョン)

マージを取り消したい

マージ後(ただし、マージ完了をコミットしていない状態で)マージ前の状態に戻したい場合は

git reset --hard HEAD

マージ後(マージ完了をコミットした状態で)マージ前に戻したい時は以下のようにする

git reset --hard ORIG_HEAD

日本語をgit status等で表示させる

下記コマンドを実行すれば表示されるようになる。
globalにしたければglobalに。

git config --local core.quotepath false

git submodule

サブモジュールの追加

git submodule add https://~ submodule-dir

サブモジュールの更新

  1. サブモジュールを更新する
  2. 自分のgitリポジトリでコミット、(プッシュする)

下記では、my-repoを自分のリポジトリのホーム、submodule-dirをサブモジュールリポジトリのホームディレクトリとしている。

cd submodule-dir
git pull origin master
cd my-repo
git commit -m "Update Submodule"
git push origin master

参考