|
57 | 57 | </p>
|
58 | 58 |
|
59 | 59 | <pre>
|
60 |
| -$ git status -s |
61 |
| -?? README |
62 |
| -?? hello.rb |
| 60 | +<b>$ git status -s</b> |
| 61 | +<span class="red">??</span> README |
| 62 | +<span class="red">??</span> hello.rb |
63 | 63 | </pre>
|
64 | 64 |
|
65 | 65 | So right now we have two untracked files. We can now add them.
|
66 | 66 |
|
67 | 67 | <pre>
|
68 |
| -$ git add README hello.rb |
| 68 | +<b>$ git add README hello.rb</b> |
69 | 69 | </pre>
|
70 | 70 |
|
71 | 71 | Now if we run <code>git status</code> again, we'll see that they've been
|
72 | 72 | added.
|
73 | 73 |
|
74 | 74 | <pre>
|
75 |
| -$ git status -s |
76 |
| -A README |
77 |
| -A hello.rb |
| 75 | +<b>$ git status -s</b> |
| 76 | +<span class="green">A</span> README |
| 77 | +<span class="green">A</span> hello.rb |
78 | 78 | </pre>
|
79 | 79 |
|
80 | 80 | <p>OK, so now if we edit one of these files and run <code>git status</code>
|
81 | 81 | again, we will see something odd.</p>
|
82 | 82 | <pre>
|
83 |
| -$ vim README |
84 |
| -$ git status -s |
85 |
| -AM README |
86 |
| -A hello.rb |
| 83 | +<b>$ vim README</b> |
| 84 | +<b>$ git status -s</b> |
| 85 | +<span class="green">A</span><span class="red">M</span> README |
| 86 | +<span class="green">A</span> hello.rb |
87 | 87 | </pre>
|
88 | 88 |
|
89 | 89 | <p>The 'AM' status means that the file has been modified on disk since we
|
@@ -184,16 +184,191 @@ <h2>
|
184 | 184 | <span class="green">M</span><span class="red">M</span> README
|
185 | 185 | <span class="red">D</span> hello.rb
|
186 | 186 | </pre>
|
| 187 | + |
187 | 188 | <p class="nutshell">
|
188 | 189 | <strong>In a nutshell</strong>,
|
189 | 190 | you run <code>git status</code> to see if anything has been modified
|
190 | 191 | and/or staged since your last commit so you can decide if you want to
|
191 | 192 | commit a new snapshot and what will be recorded in it.
|
192 | 193 | </p>
|
193 | 194 |
|
| 195 | + </div> |
| 196 | +</div> |
| 197 | + |
| 198 | +<div class="box"> |
| 199 | + <h2> |
| 200 | + <span class="docs"> |
| 201 | + <a href="#">docs</a> |
| 202 | + <a href="#">book</a> |
| 203 | + </span> |
| 204 | + <a name="diff">git diff</a> |
| 205 | + <span class="desc">shows diff of what is staged and what is modified but unstaged</span> |
| 206 | + </h2> |
| 207 | + |
| 208 | + <div class="block"> |
| 209 | + <p>There are two main uses of the <code>git diff</code> command. One use we |
| 210 | + will describe here, the other we will describe later in the |
| 211 | + <a href="/inspection">"Inspection and Comparison"</a> |
| 212 | + section. The way we're going to use it here is to describe the |
| 213 | + changes that are staged or modified on disk but unstaged.</p> |
| 214 | + |
| 215 | + <h4> |
| 216 | + git diff |
| 217 | + <small>show diff of unstaged changes</small> |
| 218 | + </h4> |
| 219 | + |
| 220 | + <p>Without any extra arguments, a simple <code>git diff</code> will display |
| 221 | + in unified diff format (a patch) what code or content you've changed in your |
| 222 | + project since the last commit that are not yet staged for the next commit |
| 223 | + snapshot. |
| 224 | + </p> |
| 225 | + |
| 226 | +<pre> |
| 227 | +<b>$ vim hello.rb</b> |
| 228 | +<b>$ git status -s</b> |
| 229 | + <span class="red">M</span> hello.rb |
| 230 | +<b>$ git diff</b> |
| 231 | +<span class="umber">diff --git a/hello.rb b/hello.rb |
| 232 | +index d62ac43..8d15d50 100644 |
| 233 | +--- a/hello.rb |
| 234 | ++++ b/hello.rb</span> |
| 235 | +<span class="lblue">@@ -1,7 +1,7 @@</span> |
| 236 | + class HelloWorld |
| 237 | + |
| 238 | + def self.hello |
| 239 | +<span class="red">- puts "hello world"</span> |
| 240 | +<span class="green">+ puts "hola mundo"</span> |
| 241 | + end |
| 242 | + |
| 243 | + end |
| 244 | +</pre> |
| 245 | + |
| 246 | + <p>So where <code>git status</code> will show you what files have changed |
| 247 | + and/or been staged since your last commit, <code>git diff</code> will |
| 248 | + show you what those changes actually are, line by line. It's generally |
| 249 | + a good follow-up command to <code>git status</code> |
| 250 | + </p> |
| 251 | + |
| 252 | + <h4> |
| 253 | + git diff --cached |
| 254 | + <small>show diff of staged changes</small> |
| 255 | + </h4> |
| 256 | + |
| 257 | + <p>The <code>git diff --cached</code> command will show you what contents |
| 258 | + have been staged. That is, this will show you the changes that will |
| 259 | + currently go into the next commit snapshot. So, if you were to stage |
| 260 | + the change to <code>hello.rb</code> in the example above, |
| 261 | + <code>git diff</code> by itself won't show you any output because it will |
| 262 | + only show you what is <i>not yet</i> staged. |
| 263 | + </p> |
| 264 | + |
| 265 | +<pre> |
| 266 | +<b>$ git status -s</b> |
| 267 | + <span class="red">M</span> hello.rb |
| 268 | +<b>$ git add hello.rb </b> |
| 269 | +<b>$ git status -s</b> |
| 270 | +<span class="green">M</span> hello.rb |
| 271 | +<b>$ git diff</b> |
| 272 | +<b>$ </b> |
| 273 | +</pre> |
| 274 | + |
| 275 | + <p>If you want to see the staged changes, you can run |
| 276 | + <code>git diff --cached</code> instead.</p> |
| 277 | + |
| 278 | +<pre> |
| 279 | +<b>$ git status -s</b> |
| 280 | +<span class="green">M</span> hello.rb |
| 281 | +<b>$ git diff</b> |
| 282 | +<b>$ </b> |
| 283 | +<b>$ git diff --cached</b> |
| 284 | +<span class="umber">diff --git a/hello.rb b/hello.rb |
| 285 | +index d62ac43..8d15d50 100644 |
| 286 | +--- a/hello.rb |
| 287 | ++++ b/hello.rb</span> |
| 288 | +<span class="lblue">@@ -1,7 +1,7 @@</span> |
| 289 | + class HelloWorld |
| 290 | + |
| 291 | + def self.hello |
| 292 | +<span class="red">- puts "hello world"</span> |
| 293 | +<span class="green">+ puts "hola mundo"</span> |
| 294 | + end |
| 295 | + |
| 296 | + end |
| 297 | +</pre> |
| 298 | + |
| 299 | + <h4> |
| 300 | + git diff HEAD |
| 301 | + <small>show diff of all staged or unstaged changes</small> |
| 302 | + </h4> |
| 303 | + |
| 304 | + <p>If you want to see both staged and unstaged changes together, you |
| 305 | + can run <code>git diff HEAD</code> - this basically means you want to |
| 306 | + see the difference between your working directory and the last commit, |
| 307 | + ignoring the staging area. If we make another change to our |
| 308 | + <code>hello.rb</code> file then we'll have some changes staged and some |
| 309 | + changes unstaged. Here are what all three <code>diff</code> commands |
| 310 | + will show you:</p> |
| 311 | +<pre> |
| 312 | +<b>$ vim hello.rb </b> |
| 313 | +<b>$ git diff</b> |
| 314 | +<span class="umber">diff --git a/hello.rb b/hello.rb |
| 315 | +index 4f40006..2ae9ba4 100644 |
| 316 | +--- a/hello.rb |
| 317 | ++++ b/hello.rb</span> |
| 318 | +<span class="lblue">@@ -1,7 +1,7 @@</span> |
| 319 | + class HelloWorld |
| 320 | + |
| 321 | +<span class="green">+ # says hello</span> |
| 322 | + def self.hello |
| 323 | + puts "hola mundo" |
| 324 | + end |
| 325 | + |
| 326 | + end |
| 327 | +<b>$ git diff --cached</b> |
| 328 | +<span class="umber">diff --git a/hello.rb b/hello.rb |
| 329 | +index 2aabb6e..4f40006 100644 |
| 330 | +--- a/hello.rb |
| 331 | ++++ b/hello.rb</span> |
| 332 | +<span class="lblue">@@ -1,7 +1,7 @@</span> |
| 333 | + class HelloWorld |
| 334 | + |
| 335 | + def self.hello |
| 336 | +<span class="red">- puts "hello world"</span> |
| 337 | +<span class="green">+ puts "hola mundo"</span> |
| 338 | + end |
| 339 | + |
| 340 | + end |
| 341 | +<b>$ git diff HEAD</b> |
| 342 | +<span class="umber">diff --git a/hello.rb b/hello.rb |
| 343 | +index 2aabb6e..2ae9ba4 100644 |
| 344 | +--- a/hello.rb |
| 345 | ++++ b/hello.rb</span> |
| 346 | +<span class="lblue">@@ -1,7 +1,8 @@</span> |
| 347 | + class HelloWorld |
| 348 | + |
| 349 | +<span class="green">+ # says hello</span> |
| 350 | + def self.hello |
| 351 | +<span class="red">- puts "hello world"</span> |
| 352 | +<span class="green">+ puts "hola mundo"</span> |
| 353 | + end |
| 354 | + |
| 355 | + end |
| 356 | +</pre> |
| 357 | + |
| 358 | + <p> |
| 359 | + You can also provide a file path at the end of any of these options |
| 360 | + to limit the <code>diff</code> output to a specific file or subdirectory. |
| 361 | + </p> |
| 362 | + |
194 | 363 |
|
| 364 | + <p class="nutshell"> |
| 365 | + <strong>In a nutshell</strong>, |
| 366 | + you run <code>git diff</code> to see details of the <code>git status</code> |
| 367 | + command - <i>how</i> files have been modified or staged on a line by line |
| 368 | + basis. |
195 | 369 | </p>
|
196 | 370 |
|
| 371 | + |
197 | 372 | </div>
|
198 | 373 | </div>
|
199 | 374 |
|
|
0 commit comments