Published on

逆引きGit

Authors
  • avatar
    Name
    Kikusan
    Twitter

復元編

git reset --hard HEAD          # 一つ前のコミット状態を復元
git reset --hard HEAD^         # 二つ前のコミット状態を復元(つまり直前のコミットの取消し)
git reset --hard <コミットID>   # そのコミットを復元する
git reset --hard ORIG_HEAD     # リセットする一つ前に戻る(リセットをやめる)
git reset --soft HEAD^         # ファイルは残したままコミットを取り消す
git reset HEAD .               # 直前のaddを取り消す

git revert <コミットID>         # 履歴付き復元

diff編

オプション

  • --stat:どれくらい変更したか
  • --name-only:ファイル名だけ表示
  • -w:空白の変更を無視
git diff           # 最新コミットとadd前を比較
git diff --staged  # インデックスと最新コミットを比較
git diff HEAD^     # 一つ前と最新状態を比較 コミット直後ならgit diff HEAD^..HEAD と同義

# diff 旧 新 
# 例:pull前に今居るブランチと比べる
git diff HEAD..origin/remote_branch

# ブランチを比較
git diff branchA..branchB # リモートならorigin/branch.....

リモートブランチをローカルにチェックアウト

git checkout -b local_branch_name origin/remote_branch_name

強制pull

git fetch origin master
git reset --hard origin/master

異なるhistoryのブランチのマージ

git merge --allow-unrelated-histories branch_name

キャッシュ削除

git rm -r --cached . # ファイル全体キャッシュを削除 .gitignoreが反映されないとき

未コミットの変更を退避

git stash save # 退避
git checkout new-branch
git stash pop # 最後のsaveを取り出し

やらかしたときの奥義

参考: Gitでやらかした時に使える19個の奥義

OSS活動

参考: DataScienceHub

  1. GitHub上のOSSリポジトリ(oss-remote)をfork(my-remote)
  2. my-remoteをclone(my-local)して自分のlocal情報を登録する。
cd mydir
git clone <my-remote-url>
git config user.name '<username>'
git config user.email '<email-address>'

GitHubのSettings>Emailsに書いてある以下をemailにしたほうがいいかもしれない。

【ID】+【ユーザー名】@users.noreply.github.com

※privateリポジトリがcloneで見つからないときは

git clone https://username:password@github.com/org/project.git
  1. oss-remoteをupstreamとして登録する
git remote add upstream <oss-remote-url>
git remote -v  #確認
  1. oss-remoteの最新に合わせる:oss-remote⇒my-local
git checkout master
git fetch upstream
git merge upstream/master
  1. ブランチを分けて作業:my-local⇒my-remote
git checkout -b develop-branch
git add .
git commit -m 'commit message'
git push origin develop branch
  1. fork先でPullrequest作成(PullRequest先のリポジトリを選べる)
  2. 後はコミュニケーション。