$ git init
$ git --version
git version 1.7.1
–globalをつけるとすべてのgitのユーザーになる。
$ git config --global user.name USERNAME
(git config user.name USERNAME)
$ git config --global user.email USERNAME@example.com
(git config user.email USERNAME@example.com)
–globalありでOK。
$ git config --global color.ui true
ときどきwarning: LF will be replaced by CRLF in…と出るときあるので、これもやっておくといいです。
$ git config --global core.autoCRLF false
($ git config core.autoCRLF false)
$ git config --local core.quotepath false
SSHで接続可能なことが前提になります。
$ git remote add origin ssh://user@example.com:22/home/repos/user/repos.git
$ git config --list
git clone ssh://user@example.com:22/home/user/remote.git
リモートリポジトリを指定してcloneしてきます。まるっと落ちてきます。
ブランチ(branch_test)をクローンしてくる場合は、
git clone -b branch_test ssh://user@example.com:22/home/user/remote.git
$ git status
すべてあげちゃうか、更新ファイルを個別にaddするかできます。
$ git add -A
(git add FILENAME)
$ git log
addしたものはcommitの準備段階になるので、間違ってaddしたものはここで削除します。ファイル自体は削除されません。
$ git rm --cache FILENAME
ディレクトリごと削除する場合は、
git rm -r --cache FILENAME
あるいは、HEADでリセットすることもできます。
$ git reset HEAD FILENAME
すべてのaddをキャンセルしたい場合はアスタリスク。
$ git reset HEAD *
$ git commit -m "COMMIT MESSAGE"
コミットのメッセージが長文になってしまうとき、または更新ファイルを詳細に記録したいときは、git commitだけでやります。viがたちあがるので、そこに詳細を書く。
ここでは詳細避けますが、リモートリポジトリからローカルリポジトリに情報をもってくる作業です。
$ git fetch
ローカルリポジトリのマージをします。
$ git merge ORIGIN/MASTER
Gitを作成してはじめてpushをするときにはなぜかオプションが必要です。以降はgit pushだけでいけます。
$ git push -u origin master
(git push -u origin --all)
$ git push
ブランチの比較
git diff BRANCH1 BRANCH1 --name-only
–name-onlyを取ると中身の差分も全部出ます。(正直ファイル多いと見づらいです。)
なんでだか上から7桁でいいみたいです。コミット間のIDで差分抽出してディレクトリ構造を保ったまま差分ファイルを作成してくれます。
git_diff_archive コミット識別子1[新] コミット識別子2[古]となってます。
git archive --format=zip HEAD `git diff --name-only ad8xxxx ec1xxxx` -o archive.zip
ファイルの出力先指定する場合は、–prefixを使います。
git archive --format=zip --prefix=d/localhost/www/ HEAD `git diff --diff-filter=d --name-only ad8xxxx ec1xxxx` -o archive.zip
私の場合ぼんやりしていて開発がめっぽう進んでしまいついてきけなくなることがあって、そういうときはこれを使います。みんなが開発してくれた最新のものになります。
(自分が開発途中の未コミットのものとかあるとマージが大変になってしまうので。。)
git fetch origin
git reset --hard origin/master
ブランチの場合は、
git fetch origin BRANCHNAME
git reset --hard FETCH_HEAD
でよいかと思います。
すでにリポジトリにignoreファイルを追加していると、キャッシュが残っており.gitignoreファイルの内容が反映されない。
git rm -r --cached .
git add .
git commit -m ".gitignore is now working"
git push origin master
いったんキャッシュクリア
git rm -r --cache . .gitignore
いろいろ間違ってコミットしたときにはこれが使えます。よりダサく使うには、現在のファイルを物理的にバックアップを取りましょう。
$ git reset --hard HEAD^
いろいろやってしまって収集がつかないときによく使います。
git reset --hard <コミットID>
面倒くさくなって且つ自分の手元が最新であり且つ誰にも迷惑をかけない自信があるときは、強制push(やや禁断)
通常はきちんとマージしてpushするのがお作法です。
$ git push -f
ただしこのコマンドはデフォルトでは無効になっている筈です。なので、.git/configの設定値を変えてあげます。denyNonFastforwardsをfalseで設定します。
denyNonFastforwards = true
↓
denyNonFastforwards = false
上記強制pushの逆です。自分のリポジトリがむちゃくちゃになって整理つかなくなったら自分の責任で行いましょう。
fetchしてきてから強制的にリモートリポジトリの内容でローカルリポジトリを上書きします。
$ git fetch origin
$ git reset --hard origin/master
git logでハッシュ値を確認したら、双方のハッシュ値で差分を抽出できます。何を更新したのかわからなくなったときに便利です。またfetchとmergeした際に他の人達の更新情報を確認することもできます。
$ git diff 48ea2c27a34014998ea057e7ab45c38f19f63b4d 73a05e055016fd756b5c6cc74a26927a7f61f80b
しかしこれだと相当細かいdiffがとれれしまうので、ファイル名だけ表示させたいときはオプション(–name-only)をつけます。
$ git diff 48ea2c27a34014998ea057e7ab45c38f19f63b4d 73a05e055016fd756b5c6cc74a26927a7f61f80b --name-only
これで差分がわかるのでうれしい。
$ git diff remotes/origin/master
それぞれの開発者がブランチを作成したときfetchした際に新しいブランチができたことを知らせてくれます。
自分の作業とほかの皆様のブランチをマージするときには、ブランチ名を指定してマージします。
git branch BRANCHNAME
ブランチをマージする
$ git fetch
repos@example.com's password:
remote: Counting objects: 1756, done.
remote: Compressing objects: 100% (759/759), done.
remote: Total 1129 (delta 525), reused 681 (delta 210)
Receiving objects: 100% (1129/1129), 1.26 MiB, done.
Resolving deltas: 100% (525/525), completed with 186 local objects.
From ssh://example.com/home/repos/user/repos
* [new branch] mybranch -> origin/mybranch
bfa3e5f..136ebd9 master -> origin/master
$ git merge origin/mybranch
マージしてしまうとブランチは残らないので、git branchをしてもmasterしか残ってないです。
ブランチがいっぱいあると面倒くさいですが、基本同じです。fetch & mergeします。
git branch *ローカルのブランチ確認
git fetch origin [BRANCH NAME] *リモートからfetchしてくる
(git commit -m "xxxxx") *ローカルはコミットしておかないと駄目
git merge FETCH_HEAD
git push origin [BRANCH NAME]