
公式サイト:https://git-scm.com/
インストール
1人でgitを使う
準備
基本的な作業
この流れの繰り返し。
リリース作業
複数人でgitを使う
準備
- ubuntuサーバーにgitを設定する。
- クローンして、ローカルリポジトリを作成する。
- リモートリポジトリにあるmasterブランチ以外のブランチもローカルリポジトリに設定する。
基本的な作業
リモートリポジトリからクローンして、ローカルリポジトリを準備すれば、後は1人でgitを使う流れと同じ。
他のメンバーと作業内容を共有
- 他のメンバーの作業内容をローカルリポジトリに取り込む。
- ローカル作業をメンバーに展開する。
リリース作業
基本は 1人でgitを使う場合のリリース作業と同じ。
ブランチモデル
困ったときのtips
変更したファイルがたくさんある。ステージするのがたいへん。
- $ git add .
"."(ピリオド)を指定するとそのディレクトリ以下の階層すべての変更ファイルがステージの対象となる。
作業ツリー上に、gitで管理してほしくないファイルが存在している。
- 不要なファイルがまだステージしていなくて、git管理下に置かれていないのであれば、".gitignore" に記述する。
- 一度、git管理下になってしまったのであれば、git管理下から削除してから、".gitignore" に記述する。
さっきコミットしたのに、追加を忘れたファイルがあった。
- 直近コミット限定。コミットを修正する。
コミットしたコミットメッセージがいまいちだった。書き換えたい。
- 直近コミット限定。コミットメッセージを修正する。
- 過去のコミット内容であれば git rebase -i で "reword" を指定して編集する。
間違ってステージしてしまった。
- ステージされているすべてのファイルをもとに戻す場合
$ git reset HEAD - 特定のファイルだけ戻す場合
$ git reset HEAD <対象ファイルパス>
間違ってコミットした。取り消したい。
- 1つ前のコミット状態に戻す。ただし、作業ツリー、ステージングエリア上の変更は戻さない。コミットだけ無しにする。
$ git reset --soft HEAD^
リセット実行したけど、実行前の状態に戻したい。
- 直前のリセット操作を取り消し、前の状態に戻る。
ただし、戻せるのはコミットした状態まで。作業ツリー上の消えたファイルは戻せない。
異なる目的の対応を一気にやってしまった。複数のファイルの変更点がある。分けてコミットしたい。
- $ git add -p
"-p" オプションをつけると、ステージする処理をインタラクティブに進める。
変更ファイルが順に示されるので、コマンド入力でステージする・しないを決定する。コマンドの種類はいくつかあるが、ややこしい操作は無しにして次の操作だけ行えばいい。
[y]ステージする、[n]ステージしない、[q]操作を中止する。
作業ツリー上の内容が中途半端でまだコミットできないのに、同じ作業ツリー上で、急遽、別の作業を行わないといけなくなった。
細目にコミットしたが、履歴を追うのが大変。まとまりある単位でのコミットにしておけば良かった。マージする前に整理したい。
- git rebase -i で "squash" を指定してコミットをまとめる。
ブランチを切り替えるの忘れて、コミットしてしまった。
- まず正しいブランチに切り替える
$ git checkout <正しいブランチ名>
コミットIDを使い、間違ったコミットを指定してチェリーピックする。
$ git cherry-pick &ly;commitID>
間違ってブランチに戻り、不要なコミットをリセットする。
$ git checkout <間違ったブランチ名> && git reset --hard HEAD~
違うブランチを削除してしまった。
- ローカルリポジトリの場合
reflogで過去の作業から、ブランチ削除の前の状態を確認する。
復活させたいブランチ名と確認した番号を使い、以下のコマンドを実行する。
$ git branch <復活させたいブランチ名> HEAD@{確認した番号} - リモートリポジトリの場合
すぐに他のメンバーに確認。リモートリポジトリを触って影響を受けないように連絡と、既に影響を受けてしまった人がいないか確認。
そのうえで復活操作可能と判断できれば復活させる。すぐの操作が難しいとなればメンバー間で今後について相談する。
復活手順:
もしローカルリポジトリにも削除してしまったブランチがなければ、上記手順で復活させる。そのブランチをリモートリポジトリにプッシュする。ただし普通にはプッシュできないので、強制的にプッシュし復活させる。
$ git push -f <リモートリポジトリ> <復活させるブランチ名>
リモートブランチは他のメンバーに影響を与える可能性が高い
焦って git push -f をしてはダメ。
メンバーに確認して、大丈夫だと確認が取れてから操作すること。
焦って git push -f をしてはダメ。
メンバーに確認して、大丈夫だと確認が取れてから操作すること。
プッシュしたコミットが間違っていたので取り消したい。
- 基本的にコミットを無かったことにするのはあきらめる。
リモートブランチは他のメンバーに影響を与える可能性が高いので、コミット履歴を改変しないこと。
git revert でコミットした歴史は残しつつ、内容だけ差し戻す。 - もし他メンバーの誰にも影響が出ないことがわかったなら、例外的処置でリモートリポジトリを書き換える。
まずローカルリポジトリでコミットをリセットする。
$ git reset --hard HEAD^
リセットした内容を強制的にプッシュする。
$ git push -f <リモートリポジトリ> <ブランチ名>
スタッシュした内容を消してしまった。
間違って git stash drop したときや、git stash pop のあとに、うっかり git reset して大事なスタッシュを消してしまった場合。- "drop" や "pop" のスタッシュ操作したときに、
例えば "Dropped refs/stash@{0} (13ce25271878e0763aaaefab44c0b2c52743df51)" と、SHA-1 が示される。これを使って復活させる。
$ git stash apply <SHA-1> - もし、SHA-1 がわからない場合は、
$ git fsck
とすると、"dangling commit"(中間ファイルのようなもの)が列挙される。このどれかが消えたスタッシュ。
上記操作で適用して地道に探してみる。
サーバーの入れ替えがあり、サーバーのアドレスが変わってしまった。
ローカルで1人で作業していたがチーム編成になり、今までの内容をメンバーに展開することになった。
- リモートリポジトリを準備し、ローカルリポジトリに作成したリモートリポジトリを設定して、コミット内容をプッシュする。
gitの基礎
gitをインストール
gitサーバーのセットアップ
git ブランチについて
git 変更を一時的に退避 stash
git ブランチを合流するマージ
git ブランチを付け替える
git コミット履歴を変更する
git 変更をリセットする
git リモートでの操作
git ファイルの追跡
git リリース準備
git 変更をpatchファイルにする
git コンフリクトに対処する
git 失敗したときの復元