@@ -104,7 +104,7 @@ SHA-1 の衝突を見るにはどうしたらいいのか、ひとつの例を
104
104
$ git log -g master
105
105
commit 734713bc047d87bf7eac9674765ae793478c50d3
106
106
Reflog: master@{0} (Scott Chacon <[email protected] >)
107
- Reflog message: commit: fixed refs handling, added gc auto, updated
107
+ Reflog message: commit: fixed refs handling, added gc auto, updated
108
108
Author: Scott Chacon <[email protected] >
109
109
Date: Fri Jan 2 18:32:33 2009 -0800
110
110
@@ -127,10 +127,10 @@ SHA-1 の衝突を見るにはどうしたらいいのか、ひとつの例を
127
127
$ git log --pretty=format:'%h %s' --graph
128
128
* 734713b fixed refs handling, added gc auto, updated tests
129
129
* d921970 Merge commit 'phedders/rdocs'
130
- |\
130
+ |\
131
131
| * 35cfb2b Some rdoc changes
132
132
* | 1c002dd added some blame and merge stuff
133
- |/
133
+ |/
134
134
* 1c36188 ignore *.gem
135
135
* 9b29157 add open3_detach to gemspec file list
136
136
@@ -188,7 +188,7 @@ SHA-1 の衝突を見るにはどうしたらいいのか、ひとつの例を
188
188
189
189
範囲指定の方法としてもっとも一般的なのが、ダブルドット構文です。これは、ひとつのコミットからはたどれるけれどもうひとつのコミットからはたどれないというコミットの範囲を Git に調べさせるものです。図 6-1 のようなコミット履歴を例に考えましょう。
190
190
191
- Insert 18333fig0601.png
191
+ Insert 18333fig0601.png
192
192
図 6-1. 範囲指定選択用の歴史の例
193
193
194
194
experiment ブランチの内容のうち、まだ master ブランチにマージされていないものを調べることになりました。対象となるコミットのログを見るには、Git に ` master..experiment ` と指示します。これは "experiment からはたどれるけれど、master からはたどれないすべてのコミット" という意味です。説明を短く簡潔にするため、実際のログの出力のかわりに上の図の中でコミットオブジェクトをあらわす文字を使うことにします。
@@ -259,7 +259,7 @@ Git には、コマンドラインでの作業をしやすくするためのス
259
259
*** Commands ***
260
260
1: status 2: update 3: revert 4: add untracked
261
261
5: patch 6: diff 7: quit 8: help
262
- What now>
262
+ What now>
263
263
264
264
このコマンドは、ステージングエリアに関する情報を違った観点で表示します。` git status ` で得られる情報と基本的には同じですが、より簡潔で有益なものとなっています。ステージした変更が左側、そしてステージしていない変更が右側に表示されます。
265
265
@@ -287,7 +287,7 @@ TODO と index.html をステージするには、その番号を入力します
287
287
288
288
ファイル名の横に ` * ` がついていれば、そのファイルがステージ対象として選択されたことを意味します。` Update>> ` プロンプトで何も入力せずに Enter を押すと、選択されたすべてのファイルを Git がステージします。
289
289
290
- Update>>
290
+ Update>>
291
291
updated 2 paths
292
292
293
293
*** Commands ***
@@ -369,7 +369,7 @@ Git では、ファイルの特定の箇所だけをステージして他の部
369
369
end
370
370
371
371
def blame(path)
372
- Stage this hunk [y,n,a,d,/,j,J,g,e,?]?
372
+ Stage this hunk [y,n,a,d,/,j,J,g,e,?]?
373
373
374
374
ここでは多くの選択肢があります。何ができるのかを見るには ` ? ` を入力しましょう。
375
375
@@ -664,7 +664,7 @@ Git を使って作業をしていると、何らかの理由でコミットの
664
664
edit 310154e updated README formatting and added blame
665
665
pick a5f4a0d added cat-file
666
666
667
- そして、スクリプトからコマンドラインに戻ってきたらそのコミットをリセットし、リセットされた変更を複数のコミットに分割します。 変更を保存してエディタを終了すると、Git はリストの最初のコミットの親まで処理を巻き戻します。そして最初のコミット (` f7f3f6d ` ) と二番目のコミット (` 310154e ` ) を適用してからコンソールに戻ります。コミットをリセットするには ` git reset HEAD^ ` を実行します。これはコミット自体を取り消し、変更されたファイルはステージしていない状態にします。ここで、必要なファイルをステージしてコミットしていきます。すべての処理が終われば、 ` git rebase --continue ` を実行します。
667
+ 変更を保存してエディタを終了すると、Git はリストの最初のコミットの親まで処理を巻き戻します。そして最初のコミット (` f7f3f6d ` ) と二番目のコミット (` 310154e ` ) を適用してからコンソールに戻ります。コミットをリセットするには ` git reset HEAD^ ` を実行します。これはコミット自体を取り消し、変更されたファイルはステージしていない状態にします。ここまでくれば、取り消された変更点から必要なものだけを選択してコミットすることができます。一連のコミットが終わったら、以下のように ` git rebase --continue ` を実行しましょう。
668
668
669
669
$ git reset HEAD^
670
670
$ git add README
@@ -695,7 +695,7 @@ Git はスクリプトの最後のコミット (`a5f4a0d`) を適用し、歴史
695
695
Rewrite 6b9b3cf04e7c5686a9cb838c3f36a8cb6a0fc2bd (21/21)
696
696
Ref 'refs/heads/master' was rewritten
697
697
698
- ` --tree-filter ` オプションは、プロジェクトの各チェックアウトに対して指定したコマンドを実行し、結果を再コミットします。この場合は、すべてのスナップショットから passwords.txt というファイルを削除します。間違えてコミットしてしまったエディタのバックアップファイルを削除するには、` git filter-branch --tree-filter ' rm -f *~' HEAD ` のように実行します。
698
+ ` --tree-filter ` オプションは、プロジェクトの各チェックアウトに対して指定したコマンドを実行し、結果を再コミットします。この場合は、すべてのスナップショットから passwords.txt というファイルを削除します。間違えてコミットしてしまったエディタのバックアップファイルを削除するには、` git filter-branch --tree-filter " rm -f *~" HEAD ` のように実行します。
699
699
700
700
Git がツリーを書き換えてコミットし、ブランチのポインタを末尾に移動させる様子がごらんいただけるでしょう。この作業は、まずはテスト用ブランチで実行してから結果をよく吟味し、それから master ブランチに適用することをおすすめします。` filter-branch ` をすべてのブランチで実行するには、このコマンドに ` --all ` を渡します。
701
701
@@ -733,15 +733,15 @@ Git には、プロジェクトで発生した問題をデバッグするため
733
733
734
734
コードのバグを追跡しているときに「それが、いつどんな理由で追加されたのか」が知りたくなることがあるでしょう。そんな場合にもっとも便利なのが、ファイルの注記です。これは、ファイルの各行について、その行を最後に更新したのがどのコミットかを表示します。もしコードの中の特定のメソッドにバグがあることを見つけたら、そのファイルを ` git blame ` しましょう。そうすれば、そのメソッドの各行がいつ誰によって更新されたのかがわかります。この例では、` -L ` オプションを使って 12 行目から 22 行目までに出力を限定しています。
735
735
736
- $ git blame -L 12,22 simplegit.rb
736
+ $ git blame -L 12,22 simplegit.rb
737
737
^4832fe2 (Scott Chacon 2008-03-15 10:31:28 -0700 12) def show(tree = 'master')
738
738
^4832fe2 (Scott Chacon 2008-03-15 10:31:28 -0700 13) command("git show #{tree}")
739
739
^4832fe2 (Scott Chacon 2008-03-15 10:31:28 -0700 14) end
740
740
^4832fe2 (Scott Chacon 2008-03-15 10:31:28 -0700 15)
741
741
9f6560e4 (Scott Chacon 2008-03-17 21:52:20 -0700 16) def log(tree = 'master')
742
742
79eaf55d (Scott Chacon 2008-04-06 10:15:08 -0700 17) command("git log #{tree}")
743
743
9f6560e4 (Scott Chacon 2008-03-17 21:52:20 -0700 18) end
744
- 9f6560e4 (Scott Chacon 2008-03-17 21:52:20 -0700 19)
744
+ 9f6560e4 (Scott Chacon 2008-03-17 21:52:20 -0700 19)
745
745
42cf2861 (Magnus Chacon 2008-04-13 10:45:01 -0700 20) def blame(path)
746
746
42cf2861 (Magnus Chacon 2008-04-13 10:45:01 -0700 21) command("git blame #{path}")
747
747
42cf2861 (Magnus Chacon 2008-04-13 10:45:01 -0700 22) end
@@ -750,8 +750,8 @@ Git には、プロジェクトで発生した問題をデバッグするため
750
750
751
751
Git のすばらしいところのひとつに、ファイルのリネームを明示的には追跡しないということがあります。スナップショットだけを記録し、もしリネームされていたのなら暗黙のうちにそれを検出します。この機能の興味深いところは、ファイルのリネームだけでなくコードの移動についても検出できるということです。` git blame ` に ` -C ` を渡すと Git はそのファイルを解析し、別のところからコピーされたコード片がないかどうかを探します。最近私は ` GITServerHandler.m ` というファイルをリファクタリングで複数のファイルに分割しました。そのうちのひとつが ` GITPackUpload.m ` です。ここで ` -C ` オプションをつけて ` GITPackUpload.m ` を調べると、コードのどの部分をどのファイルからコピーしたのかを知ることができます。
752
752
753
- $ git blame -C -L 141,153 GITPackUpload.m
754
- f344f58d GITServerHandler.m (Scott 2009-01-04 141)
753
+ $ git blame -C -L 141,153 GITPackUpload.m
754
+ f344f58d GITServerHandler.m (Scott 2009-01-04 141)
755
755
f344f58d GITServerHandler.m (Scott 2009-01-04 142) - (void) gatherObjectShasFromC
756
756
f344f58d GITServerHandler.m (Scott 2009-01-04 143) {
757
757
70befddd GITServerHandler.m (Scott 2009-03-22 144) //NSLog(@"GATHER COMMI
@@ -848,7 +848,7 @@ Rack ライブラリ (Ruby のウェブサーバーゲートウェイインタ
848
848
849
849
まず気づくのが ` .gitmodules ` ファイルです。この設定ファイルには、プロジェクトの URL とそれを取り込んだローカルサブディレクトリの対応が格納されています。
850
850
851
- $ cat .gitmodules
851
+ $ cat .gitmodules
852
852
[submodule "rack"]
853
853
path = rack
854
854
url = git://github.com/chneukirchen/rack.git
@@ -988,7 +988,7 @@ rack エントリのモードが 160000 となったことに注目しましょ
988
988
989
989
時には、大規模なプロジェクトのサブディレクトリから今自分がいるチームに応じた組み合わせを取得したくなることもあるでしょう。これは、CVS や Subversion から移行した場合によくあることでしょう。モジュールを定義したりサブディレクトリのコレクションを定義していたりといったかつてのワークフローをそのまま維持したいというような状況です。
990
990
991
- Git でこれと同じことをするためのよい方法は、それぞれのサブフォルダを別々の Git リポジトリにして、それらのサブモジュールとして含む親プロジェクトとなる Git リポジトリを作ることです。この方式の利点は、親プロジェクトのタグやブランチを活用してプロジェクト間の関係をより細やかに定義できることです。
991
+ Git でこれと同じことをするためのよい方法は、それぞれのサブディレクトリを別々の Git リポジトリにして、それらのサブモジュールとして含む親プロジェクトとなる Git リポジトリを作ることです。この方式の利点は、親プロジェクトのタグやブランチを活用してプロジェクト間の関係をより細やかに定義できることです。
992
992
993
993
### サブモジュールでの問題 ###
994
994
0 commit comments