Introduction |
|
xxiii | |
Part I: Understanding Git Concepts |
|
|
|
3 | (16) |
|
|
4 | (1) |
|
Industry-Standard Tooling |
|
|
4 | (1) |
|
|
5 | (6) |
|
|
5 | (1) |
|
|
6 | (1) |
|
|
7 | (1) |
|
|
8 | (2) |
|
|
10 | (1) |
|
Tools That Incorporate Git |
|
|
10 | (1) |
|
|
10 | (1) |
|
Git's Advantages And Challenges |
|
|
11 | (7) |
|
|
11 | (3) |
|
|
14 | (4) |
|
|
18 | (1) |
|
|
19 | (12) |
|
Design Concepts: User-Facing |
|
|
19 | (3) |
|
|
20 | (1) |
|
|
20 | (2) |
|
Design Concepts: Internal |
|
|
22 | (3) |
|
|
22 | (1) |
|
|
23 | (1) |
|
Git's Storage Requirements |
|
|
23 | (2) |
|
Repository Design Considerations |
|
|
25 | (4) |
|
|
25 | (2) |
|
|
27 | (2) |
|
|
29 | (2) |
|
Chapter 3 The Git Promotion Model |
|
|
31 | (12) |
|
|
31 | (10) |
|
|
32 | (7) |
|
The Core Git Commands For Moving Content |
|
|
39 | (2) |
|
|
41 | (2) |
|
About Connected Lab 1: Installing Git |
|
|
42 | (1) |
|
Connected Lab 1 Installing Git |
|
|
43 | (6) |
|
Installing Git For Windows |
|
|
43 | (1) |
|
|
43 | (3) |
|
Installing Git On Mac OS X |
|
|
46 | (1) |
|
|
46 | (3) |
Part II: Using Git |
|
|
Chapter 4 Configuration And Setup |
|
|
49 | (24) |
|
Executing Commands in Git |
|
|
49 | (6) |
|
|
50 | (1) |
|
Porcelain versus Plumbing Commands |
|
|
51 | (2) |
|
|
53 | (1) |
|
|
54 | (1) |
|
|
55 | (9) |
|
|
56 | (1) |
|
|
57 | (3) |
|
|
60 | (1) |
|
|
61 | (2) |
|
|
63 | (1) |
|
|
64 | (1) |
|
Initializing a Repository |
|
|
64 | (2) |
|
|
64 | (1) |
|
|
65 | (1) |
|
|
66 | (5) |
|
|
67 | (1) |
|
Looking Further into a Git Repository |
|
|
67 | (2) |
|
Mapping Config Commands to Configuration Files |
|
|
69 | (1) |
|
Creating Parameterized Aliases |
|
|
70 | (1) |
|
|
71 | (2) |
|
Chapter 5 Getting Productive |
|
|
73 | (26) |
|
|
73 | (3) |
|
The Multiple Repositories Model |
|
|
76 | (1) |
|
Adding Content to Track—Add |
|
|
77 | (9) |
|
|
78 | (8) |
|
Finalizing Changes—Commit |
|
|
86 | (2) |
|
|
87 | (1) |
|
|
88 | (1) |
|
|
88 | (6) |
|
|
88 | (3) |
|
|
91 | (3) |
|
|
94 | (3) |
|
|
95 | (1) |
|
The Full Commit Message Experience |
|
|
95 | (1) |
|
Autocorrect and Auto Execute |
|
|
96 | (1) |
|
|
97 | (2) |
|
About Connected Lab 2: Creating and Exploring a Git Repository and Managing Content |
|
|
97 | (2) |
|
Connected Lab 2 Creating And Exploring A Git Repository And Managing Content |
|
|
99 | (6) |
|
|
99 | (1) |
|
Optional Advanced Deep-Dive into the Repository Structure |
|
|
99 | (1) |
|
|
99 | (6) |
|
Chapter 6 Tracking Changes |
|
|
105 | (22) |
|
|
105 | (6) |
|
Workflow Example with Status |
|
|
106 | (4) |
|
Status Command Short Form |
|
|
110 | (1) |
|
|
111 | (14) |
|
Important Symbolic Names in Git |
|
|
112 | (1) |
|
How to Think about Git's Approach to Diffing |
|
|
112 | (3) |
|
|
115 | (1) |
|
|
116 | (1) |
|
Ignoring Non-critical Changes |
|
|
116 | (2) |
|
|
118 | (3) |
|
|
121 | (3) |
|
|
124 | (1) |
|
|
125 | (2) |
|
About Connected Lab 3: Tracking Content through the File Status Life Cycle |
|
|
125 | (2) |
|
Connected Lab 3 Tracking Content Through The File Status Life Cycle |
|
|
127 | (4) |
|
|
127 | (1) |
|
|
127 | (4) |
|
Chapter 7 Working With Changes Over Time And Using Tags |
|
|
131 | (24) |
|
|
132 | (6) |
|
Common Display and Filtering Options |
|
|
132 | (1) |
|
|
133 | (1) |
|
History by Files and Paths |
|
|
134 | (1) |
|
|
135 | (1) |
|
|
136 | (2) |
|
|
138 | (2) |
|
|
140 | (1) |
|
|
141 | (4) |
|
|
142 | (1) |
|
|
143 | (1) |
|
|
144 | (1) |
|
Undoing Changes in History |
|
|
145 | (6) |
|
Reset-Rolling Back Changes |
|
|
145 | (1) |
|
Completely Resetting the Local Environment |
|
|
146 | (1) |
|
Revert—Canceling Out Changes |
|
|
147 | (4) |
|
|
151 | (3) |
|
|
151 | (2) |
|
|
153 | (1) |
|
|
154 | (1) |
|
About Connected Lab 4: Using Git History, Tags, and Aliases |
|
|
154 | (1) |
|
Connected Lab 4 Using Git History, Aliases, And Tags |
|
|
155 | (4) |
|
|
155 | (1) |
|
|
155 | (4) |
|
Chapter 8 Working With Local Branches |
|
|
159 | (30) |
|
|
159 | (21) |
|
Example from Another Source Management System |
|
|
160 | (1) |
|
The Git Model of Branches |
|
|
160 | (2) |
|
|
162 | (1) |
|
|
163 | (1) |
|
Adding Content to a Branch |
|
|
164 | (1) |
|
One Working Directory—Many Branches |
|
|
164 | (4) |
|
Getting Information about Branches |
|
|
168 | (1) |
|
Deleting or Renaming a Branch |
|
|
169 | (3) |
|
|
172 | (8) |
|
|
180 | (7) |
|
Checking Out Non-branch Commits |
|
|
181 | (5) |
|
Checking Out Individual Files |
|
|
186 | (1) |
|
|
187 | (2) |
|
About Connected Lab 5: Working with Branches |
|
|
188 | (1) |
|
Connected Lab 5 Working With Branches |
|
|
189 | (4) |
|
|
189 | (1) |
|
|
189 | (4) |
|
Chapter 9 Merging Content |
|
|
193 | (50) |
|
|
194 | (16) |
|
|
194 | (1) |
|
|
194 | (1) |
|
|
195 | (4) |
|
Rebasing-Merging with History |
|
|
199 | (4) |
|
|
203 | (2) |
|
Differences between Cherry-Pick and Rebase |
|
|
205 | (1) |
|
|
206 | (4) |
|
|
210 | (13) |
|
|
210 | (1) |
|
Error Messages for Conflicts |
|
|
211 | (1) |
|
|
212 | (1) |
|
Dealing with Conflicts—the Workflow |
|
|
213 | (4) |
|
Resolution Options and Strategies |
|
|
217 | (6) |
|
|
223 | (4) |
|
|
226 | (1) |
|
Making Merge Tools Available to Git |
|
|
226 | (1) |
|
|
227 | (14) |
|
Alternative Style for Conflict Markers |
|
|
227 | (2) |
|
Advanced Rebasing Scenario |
|
|
229 | (5) |
|
|
234 | (7) |
|
|
241 | (2) |
|
About Connected Lab 6: Practicing with Merging |
|
|
242 | (1) |
|
Connected Lab 6 Practicing With Merging |
|
|
243 | (2) |
|
|
243 | (1) |
|
|
243 | (2) |
|
Chapter 10 Supporting Files In Git |
|
|
245 | (18) |
|
|
246 | (10) |
|
What Can You Do with This File? |
|
|
246 | (1) |
|
The Scope of Git Attributes |
|
|
246 | (2) |
|
|
248 | (1) |
|
|
249 | (7) |
|
Getting Attribute Information for Files |
|
|
256 | (1) |
|
|
256 | (5) |
|
|
257 | (1) |
|
|
258 | (2) |
|
Getting Ignore Information for Files |
|
|
260 | (1) |
|
|
261 | (2) |
|
Chapter 11 Doing More With Git |
|
|
263 | (54) |
|
Modifying the Layout of Files and Directories in Your Local Environment |
|
|
263 | (9) |
|
|
264 | (6) |
|
|
270 | (1) |
|
|
271 | (1) |
|
|
272 | (1) |
|
|
272 | (6) |
|
|
273 | (2) |
|
|
275 | (3) |
|
Working with Patches and Archives for Changes |
|
|
278 | (7) |
|
|
278 | (1) |
|
|
279 | (1) |
|
Sharing Patches through E-mail |
|
|
280 | (1) |
|
|
281 | (1) |
|
|
282 | (1) |
|
|
283 | (2) |
|
|
285 | (5) |
|
|
286 | (2) |
|
|
288 | (1) |
|
|
288 | (2) |
|
|
290 | (24) |
|
|
291 | (1) |
|
|
291 | (7) |
|
|
298 | (8) |
|
|
306 | (8) |
|
|
314 | (3) |
|
About Connected Lab 7: Deleting, Renaming, and Stashing |
|
|
315 | (2) |
|
Connected Lab 7 Deleting, Renaming, And Stashing |
|
|
317 | (4) |
|
|
317 | (1) |
|
|
317 | (4) |
|
Chapter 12 Understanding Remotes—branches And Operations |
|
|
321 | (32) |
|
|
322 | (30) |
|
|
324 | (2) |
|
|
326 | (2) |
|
How Git Interacts with the Remote Environment |
|
|
328 | (1) |
|
|
328 | (2) |
|
|
330 | (3) |
|
Viewing Information about Remote Branches |
|
|
333 | (5) |
|
|
338 | (8) |
|
|
346 | (3) |
|
|
349 | (3) |
|
|
352 | (1) |
|
About Connected Lab 8: Setting Up a GitHub Account and Cloning a Repository |
|
|
352 | (1) |
|
Connected Lab 8 Setting Up A Github Account And Cloning A Repository |
|
|
353 | (2) |
|
|
353 | (1) |
|
|
353 | (2) |
|
Chapter 13 Understanding Remotes—workflows For Changes |
|
|
355 | (22) |
|
The Basic Conflict and Merge Resolution Workflow in Git |
|
|
356 | (12) |
|
How the Remote Side Handles Conflicts |
|
|
356 | (12) |
|
|
368 | (7) |
|
Models for Collaboration with Git |
|
|
369 | (5) |
|
|
374 | (1) |
|
|
375 | (2) |
|
About Connected Lab 9: Using the Overall Workflow with a Remote Repository |
|
|
375 | (2) |
|
Connected Lab 9 Using The Overall Workflow With A Remote Repository |
|
|
377 | (4) |
|
|
377 | (1) |
|
|
377 | (4) |
|
Chapter 14 Working With Trees And Modules In Git |
|
|
381 | (32) |
|
|
381 | (5) |
|
|
382 | (3) |
|
Listing Out the Working Trees |
|
|
385 | (1) |
|
|
385 | (1) |
|
|
386 | (19) |
|
Understanding How Submodules Work |
|
|
388 | (1) |
|
|
388 | (1) |
|
Determining Submodule Status |
|
|
389 | (4) |
|
Processing Multiple Submodules |
|
|
393 | (1) |
|
Updating Submodules from Their Remotes |
|
|
394 | (2) |
|
Viewing Submodule Differences |
|
|
396 | (1) |
|
Superproject versus Submodules |
|
|
397 | (2) |
|
The Problem with Submodules |
|
|
399 | (1) |
|
Updating the Submodule References |
|
|
399 | (2) |
|
Updating Submodules When the Superproject Is Updated |
|
|
401 | (1) |
|
Pushing Changes from Submodules |
|
|
402 | (2) |
|
|
404 | (1) |
|
Unregistering a Submodule |
|
|
404 | (1) |
|
|
405 | (6) |
|
Adding a Project as a Subtree |
|
|
407 | (2) |
|
|
409 | (1) |
|
Using the Subtree Split Functionality |
|
|
410 | (1) |
|
Creating a New Project from the Split Content |
|
|
410 | (1) |
|
|
411 | (1) |
|
|
411 | (1) |
|
About Connected Labs 10-12 |
|
|
411 | (2) |
|
About Connected Lab 10: Working with Worktrees |
|
|
412 | (1) |
|
About Connected Lab 11: Working with Submodules |
|
|
412 | (1) |
|
About Connected Lab 12: Working with Subtrees |
|
|
412 | (1) |
|
Connected Lab 10 Working With Worktrees |
|
|
413 | (2) |
|
|
413 | (1) |
|
|
413 | (2) |
|
Connected Lab 11 Working With Submodules |
|
|
415 | (4) |
|
|
415 | (1) |
|
|
415 | (4) |
|
Connected Lab 12 Working With Subtrees |
|
|
419 | (4) |
|
|
419 | (1) |
|
|
419 | (4) |
|
Chapter 15 Extending Git Functionality With Git Hooks |
|
|
423 | (20) |
|
|
424 | (1) |
|
|
425 | (1) |
|
|
425 | (2) |
|
|
425 | (1) |
|
Return Code To Control Workflow |
|
|
426 | (1) |
|
|
426 | (1) |
|
|
427 | (1) |
|
|
427 | (11) |
|
|
427 | (1) |
|
|
427 | (1) |
|
|
428 | (1) |
|
|
428 | (1) |
|
|
429 | (2) |
|
|
431 | (1) |
|
|
432 | (1) |
|
|
433 | (1) |
|
|
434 | (1) |
|
|
434 | (1) |
|
|
434 | (1) |
|
|
435 | (1) |
|
|
436 | (1) |
|
|
436 | (1) |
|
|
437 | (1) |
|
|
438 | (3) |
|
|
438 | (1) |
|
|
438 | (1) |
|
|
438 | (1) |
|
|
439 | (2) |
|
|
441 | (2) |
Index |
|
443 | |