新規作成したファイル
作業ディレクトリにできた中間ファイルを clean します。
[ 再スキャン ] を押します。
下記のいずれかの操作によってコミット予定に入れます。
無くなったファイル
変更されたファイル
[ 変更をコミット予定に入れる ]
[ 変更をコミット予定に入れる ]
[ コミット | コミット予定する ]
アイコンの意味
コミット予定に入れる操作
コミット
作業ディレクトリの内容を修正して、区切りができたら、新しいコミットを作成します。
コミットを作成すると、いつでもそのコミットに戻ることができるようになります。
コミットを作成すると、自動的に現在のブランチは、新しいコミットを指すようになります。
矢印は、ポインタを表す。 コミット同士のポインタは、前のコミットを指す
ブランチ
コミット
ブランチ
現在のブランチ
黄色い丸が、現在のブランチが指すコミット。
緑は、ブランチ名。
コミット
関連
暫定的にコミットした内容は、後から修正することができます。
変更されたファイルの差分を確認するには、コミットしなくても、[ リポジトリ | すべて
のブランチの履歴を見る ] で、左上の「ステージされていないコミット前のローカルな
変更」を選び、右下に表示されるファイル名を右クリック [ 外部diffツール ] を選びます。
すると、[ 編集 | オプション | 外部diffツール ] で設定した diff ツールが開き、差分を確認
できます。
「コミットメッセージ」 に、前のコミットからの修正内容を記述します。
もし、暫定的なコミットであれば、暫定であることを表現してください。
コミットすると、現在のブランチは、新しいコミットに移動します。
必要なら、サーバーのリポジトリにプッシュ(アップロード)してください。
[ コミット ] ボタンを押すと、コミットは完了します。
安定版になったら、タグをつけてください。
Git のリポジトリには、タイムスタンプが保存されません。
cd 作業ディレクトリのパス
git status #// 修正ファイルを一覧
git diff #// 修正ファイルの内容を確認
git add . #// 新規追加ファイルをすべて登録
git commit -a -m "コミットメッセージ" #// 追加/修正ファイルをコミット
git status #// 修正ファイルを一覧
git add . #// 追加されたファイルをすべてリポジトリに追加する
git commit -a --amend #// 前回のコミットに修正する(Ctrl+X でエディタ終了)
新しいコミットを作る
最新のコミットを修正する
タイムスタンプは Git のリポジトリに記録されません。
タイムスタンプを扱う他のプログラムを使うときは注意してください。 たとえば、タイムスタンプを
比較してコピーやバックアップするツールでは、コピーが行われなかったり、古いバージョンで
上書きされたりすることがあります。 ドキュメント・ファイルの作成日時を調べるときに、いつも
のようにタイムスタンプを見て報告すると、気づかないうちに誤った情報を流すことになります。
コミットするときに、TimeStampRec ツールを使って、すべてのファイルのタイムスタンプを記録
しておけば、チェックアウトしたときに、タイムスタンプを復活させることができます。
TimeStampRec ツール:
.gitignore
src
obj
warning.txt
# comment
src/warinig.txt
src/obj/
*.obj
main.c
.gitignore により、コミットには入りません
ワイルドカード(*, ?)も使えます。
サブフォルダーにあるワイルドカードにマッチする
ファイルも、コミットに入りません
コミットに入らないファイルが無いときに、正しく動くかどうかを確認するには、
コミットに入らないファイルは、GitGUI のファイル一覧や、git status コマンドの
実行結果にも表示されません。
.gitignore を新規作成するとき
rm -rf .git
git init
git add .
git commit -m 'first commit' #// ' ' の中は、コミットメッセージ
cd 作業ディレクトリのパス
git config --global user.name "Your Name"
git config --global user.email you@example.com
git init
git add .
git commit -m 'temporary for gitignore'
作業ディレクトリのパス
リポジトリを新規作成して一時的にコミットをします。
make clean と make を行います。
git status
git status で更新されたファイルを一覧し、そのファイル名や拡張子を .gitignore
に登録します。
Changed but not updated に表示されるものは無視してかまいません。
first commit
.git フォルダーを削除して、リポジトリを作り直します。
参考
git mv file_old.c file_new.c
ファイルやフォルダーを移動したことをリポジトリに通知して、実際に移動も行います。
実際に移動した後で、リポジトリに通知するときは、rm と add を使います。
mv file_old.c file_new.c
git rm file_old.c
git add file_new.c
移動したことは、git status で確認できます。
$ git status
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# renamed: file_old.c -> file_new.c
参考
git log -p -C
コミットした後は、git log に -C オプションを付けないと、移動したことを検出しません。
--follow オプションもあるらしい?
Git GUI を使っているときは、圧縮するべきか自動的に提案してくれますが、
Git Bash では、それがありません。 時々、下記のコマンドを使って圧縮してください。
git gc
git checkout HEAD^ folder/file.c
git diff folder/file.c
folder/file.c ファイルの、前回のコミットからの差分を確認:
folder/file.c ファイルの内容を、前回のコミットに戻す:
$ git status
# Changed but not updated:
# (use "git add <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# modified: include/config/kernel.release
ファイルがすでにリポジトリに入っているときは、.gitignore に登録されていても、修正が
あるというメッセージが表示されます。
git rm --cached コマンドを使って、リポジトリからファイルを除外すれば、表示されなく
なります。
$ git rm --cached "include/config/kernel.release"
rm 'include/config/kernel.release'
$ git status
その他
一度コミットしたとしても、直前のコミットであれば、コミットの内容を修正することができます。
[ コミット | 最新コミットを修正 ]。
コミットメッセージの右に、現在の状態が表示されています。
Git GUI の手順
この状態で、コミットすると、直前のコミットの内容が修正されます。
新しいコミットは作られません。
以上の作業において、作業ディレクトリの内容が、直前のコミットの内容に自動的に
置き換わることはありません。
関連
git commit --amend
Git Bash の手順
git commit --amend -m "新しいコメント"
また、誤って枝分かれしてしまった場合など、現在のコミットを削除して1つ前のコミットに
戻すことができます。
ただし、一度サーバーにプッシュしたコミットは削除できません。
ワーク・フォルダーの内容を変更した後で、その変更を戻したいときは、リセットします。
git branch
(git checkout *****)
Git Bash の手順
必要なら、ワーク・フォルダー(.git フォルダー以外)のバックアップをとってから、
リセットしてください。
ワーク・フォルダーの内容を変更しているときは、一度暫定的にコミットしてください。
Git Bash で次のコマンドを実行します。
もう一度リセットすると、もう1つ前のコミットに戻ります。
メモ
Git GUI の [ コミット | 変更を元に戻す ] では、変更されたファイルは元に戻りますが、
追加や削除されたファイルは戻りません。
git branch は、現在の(削除しようとしている)ブランチ
を確認するコマンドです。 現在のブランチを変えるとき
は、**** にブランチ名を指定してください。
コミットを削除したら、現在のブランチを戻してください。
git reset --hard HEAD^
コミットを削除します。削除の確認が無いので注意
HEAD の後に ^ があると、1つ前のコミットになります。
方法B
方法A
Git Bash で次のコマンドを実行します。
git reset --hard HEAD
HEAD の後に ^ を付けないようにしてください。
ステージされていない変更をリセットするには、次のようにします。
その他
すべてのテストが通ったときなどの安定版にタグを付けることで、不安定な最新版から、
安定した前のバージョンへ戻すときに、適切な安定したバージョンを探すことが簡単に
なります。
開発中とは別の機能を新しい開発者に担当させるときや、暫定リリースしたいとき、
リリースしたものを緊急に修正するときなどに使えます。
← 安定版
← 最新版
作業ディレクトリの内容を修正している途中なら、暫定的にコミットします。
安定版のコミットメッセージ部分(上記 ver0.3)を右クリックして [ 新規ブランチ生成 ]。
新しく生成したブランチ(下記 hotfix)を右クリック [ このブランチをチェックアウト ]。
[ リポジトリ | すべてのブランチの履歴を見る ]
Git GUI の手順
現在のブランチが hotfix になっているので、そのまま作業ディレクトリにあるソース
を修正してコミットすると、下記のようになります。
参考
関連
←この安定版(ver0.3)を修正する
以上で、修正を行うブランチ(上記 hotfix)を作ることができ、現在のブランチは、
hotfix になりました。
必要であれば、コミットした内容を最新版にマージしてください。
←この hotfix ブランチの内容を修正する
別の機能の修正をするときは、不安定な最新版ではなく、少し前の安定版に対して
修正します。 このとき、新規ブランチを生成して、そのブランチの内容を修正します。
←この安定版(ver0.3)から修正する
←開発中だった最新版
←安定版を修正したもの
←暫定的なコミット
このときのコミットメッセージは作業内容と、中断自体を表すもの(例:stop)にします。
Git Bash の手順
作業ディレクトリの内容を修正している途中なら、暫定的にコミットします。
このときのコミットメッセージは作業内容と、中断自体を表すもの(例:stop)にします。
安定版の コミット、または、ブランチを、チェックアウトします。
ブランチを削除するとき:
git branch #// ブランチを一覧表示する
git branch -d ブランチ名 #// ブランチを削除する
以上で、現在のブランチは、修正を行う(新しい)ブランチをになりました。
git log #// コミットを一覧します
git branch "new_branch" "bda4bc0b2...." #// make branch
git checkout "new_branch" #// 現在のブランチを変更する
参考
git stash ?
安定版のコミットのコミットメッセージ部分(下記 ver0.3)を右クリックして、
[ タグ生成 ] で、安定版のバージョンを表す名前を入力します。
[ リポジトリ | すべてのブランチの履歴を見る ]
Git GUI の手順
タグ生成
関連
続けてコミットすると、現在のブランチ(太字)だけ、次のコミットに移動します。
コミット
参考
古いコミットに後からタグを付けることもできます。
以上で、安定版にタグを付けることができました。
← 安定版にタグ「beta」を付ける
← 最新版
重要なバージョン(コミット)にタグを付けて目立つようにします。
git tag -d タグ名
タグの削除は、Git GUI ではできません。 Git Bash で下記のようにしてください。
タグ名は、上記の場合 「beta」 を指定します。
安定版はバックアップするとよいでしょう。
git tag first bda4bc0b2....
Git Bash の手順
コミットした直後に上記のコマンドを実行すると、そのコミット(=現在のHEAD)
に対してタグが付きます。
コミットの指定方法について
参考
ハッシュ値が bda4… のコミットに first という名前のタグを付けます。
#// コミット直後に
git tag "first" HEAD #// make tag
現在のブランチを最新版にします。 サーバーと同期します。
[ マージ | ローカルマージ ] で、マージ対象(安定版を修正したもの)のブランチを指定します。
コンフリクトしていたら、作業ディレクトリに入っているファイルに、差分情報が追加されます。
ファイルの中を、<<<< で検索して確認してください。
差分情報の改行文字は LF になります。
1つのファイルの編集が完了したら、[ コミット | コミット予定する ]。
Git GUI の手順
コンフリクト(同じ箇所を違う内容で修正)していないときは、すぐにマージが完了します。
作業ディレクトリに入っているファイルを、マージ対象の内容に合わせます。
[ ツール ] メニューで、作業ディレクトリに入っているファイルを、登録済みのツールで
編集できます。
マージ対象の内容と完全に一致したら、右上のファイルの内容の表示部分は、何も表示されなくなります。
一度編集したら、現在のブランチの更新内容だけになります。
このとき、マージ対象とコンフリクトのチェックは行われません。
以上で、マージは完了です。
もし、更に、hotfix を修正してコミットしたら、次のようになります。
関連
した内容や、
CONFLICT (content): Merge conflict in ...
エラーメッセージ
した内容を、最新版などに反映する
ことを、マージすると言います。
すべてのファイルの編集が済んだら、[ コミット ] を押します。
Git Bash の手順
cd "作業ディレクトリのパス"
git checkout "master" #// master ブランチをチェックアウト
git merge "hotfix" #// hotfix とマージ
git tag "first" HEAD #// make tag (必要なら)
master ブランチの HEAD に、hotfix ブランチの HEAD をマージするとき:
merge コマンドに成功すると、新たなコミットが作成されます。
コンフリクト(同じ箇所を違う内容で修正)していたとき、エラーになり、上記(Git GUI の手順)
のように、差分情報がソース・ファイルに埋め込まれます。
差分情報を編集して完成したら、コミットしてください。