push
ローカルからリモートに反映させるとき(初回)。
- git環境用意:
git init - リモートリポジトリの場所登録:
git remote add 任意リポジトリ名(たいていはorigin) リモートリポジトリアドレス - git管理対象のadd:
git add . - commit:
git commit -m "コミットメッセージ" - リモートに反映:
git push リポジトリ名 ブランチ名
fetch
リモートの状態をローカルに反映させるとき
- git fetch
- git merge リポジトリ名/ブランチ名
branch
- ブランチの一覧:
git branch -a - ブランチを作る:
git branch ブランチ名 - ブランチの変更:
git checkout ブランチ名
log
ローカルにあるgitのコミット履歴をみる
git log --oneline
IDとコミットメッセージがでてくる。
clone
ふつうに
git clone リモートリポジトリアドレス
作業巻き戻し
なんかのファイルいじってる最中に別アカでファイルいじってpushしてしまったのでpullできないみたいな。いったん前のコミットの状態に戻す。
- 自分の作業履歴取り消し:
git checkout HEAD ファイル名 - 自分の作業履歴取り消し(全体的に):
git reset --hard HEAD
いじってたらpullできなくなった
pullしようとしたらローカルに変化が起きてるから無理みたいになって、↑みたいに作業の巻き戻しはしたくないとき。
- 一時退避コマンド:
git stash [save "comment"] - 退避したのでpullできる:
git pull - 退避リスト参照:
git stash list->stash@{N}:みたいなかんじで退避したもののラベルが出てくる。Nは数字で0からインクリ - 退避リストのうち反映させたいやつを反映させる:
git stash pop stash@{N}
履歴削除
秘密鍵とかおいてしまった(rmしても履歴上は残る)ときのコミットを消して歴史改変する
まず対象のコミットがどれかを特定する
git log [--name-status]
このオプションつけるとそのコミットで何がaddされたとかが見れる。めっちゃあって邪魔で、GitHubとかのサービスでどのコミットなのか特定できるならオプションなくてよし。で、やると、
commit 1234abcd1234abcf1234abcd
Author: name <hoge@hoge.com>
Date: Wed Aug 23 14:00:00 2017 +0900
commit message
みたいなもののリストが返ってくるので、下記コマンドで消したいコミットよりも昔のコミットのIDを指定する
git rebase 1234abcd1234abcf1234abcd
なんかエディタ開くので消したいコミットのIDの行を消して保存する。そのあとgit logしてみると消えてる~!
→でもgithubのcommitの履歴に残ってるんだけどどうしたらいいんだ・・
以下特殊なケース対応
git addで怒られるとき
C:\Users\username\PATH>git add .
warning: LF will be replaced by CRLF in fileName.fileExtension.
The file will have its original line endings in your working directory.
なんかwinでgitのバージョン適当に上げたりしてちゃんと項目に目を通していなくてこうなることが(参考:気をつけて!Git for Windowsにおける改行コード)。単体で都度治すならgit config core.autocrlf trueでよいが、全体で設定したほうがよい
git config --global core.autocrlf input
ファイルの中の変更の一部だけをgit addしたいんじゃよ
あるファイルに対して複数の編集を加えているときで、例えば「いやこれはローカルのメモやでw」とか「一気に変更してしまったがコミットの単位分けたいやで」みたいなときに使う。
git add -p [file]- これすると、変更箇所の塊と共に入力を求められるので、その変更箇所をadd対象にしたければ
yでリターン、したくなければnでリターン - 提示された変更箇所の塊の中をもっと細かく制御したいときは
eリターンするとviが立ち上がるので、add対象にしたくない行を消す -
git statusしたりgit diff [file] [--cached]とかして差分を確認する - あとは普通にcommit -> pushで大丈夫
githubでプルリク周り
forkする
- WEBUIで触りたい他所のリポジトリをフォーク
- フォークしてきたリポジトリをローカルにclone
- fork元リポジトリの更新に追従したいので下記設定
git remote add [任意ブランチ名(例:fork)] [fork元リポジトリアドレス]-
git fetch forkして、ローカルで任意ブランチにcheckoutした状態でgit merge origin fork/masterでfork元の更新をローカルのforkリポジトリに反映、リモートのforkリポジトリに反映させるためにgit push origin [反映させたいブランチ名]
プルリクする
- forkしてきたローカルのリポジトリで作業、リモートに反映
- WEBUIでforkリポジトリの画面から「New Pull Request」的なボタンを選択、修正メッセージ等を書いてリクエスト送ってマージ承認されるの待ち。