done with commit
This commit is contained in:
parent
687789b47f
commit
431e2cd4ed
195
basic/index.html
195
basic/index.html
@ -355,6 +355,31 @@ index 2aabb6e..2ae9ba4 100644
|
|||||||
end
|
end
|
||||||
</pre>
|
</pre>
|
||||||
|
|
||||||
|
<h4>
|
||||||
|
git diff --stat
|
||||||
|
<small>show summary of changes instead of a full diff</small>
|
||||||
|
</h4>
|
||||||
|
|
||||||
|
<p>If we don't want the full diff output, but we want more than the
|
||||||
|
<code>git status</code> output, we can use the <code>--stat</code>
|
||||||
|
option, which will give us a summary of changes instead. Here is the
|
||||||
|
same example as above, but using the <code>--stat</code> option instead.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<pre>
|
||||||
|
<b>$ git status -s</b>
|
||||||
|
<span class="green">M</span><span class="red">M</span> hello.rb
|
||||||
|
<b>$ git diff --stat</b>
|
||||||
|
hello.rb | 1 <span class="green">+</span>
|
||||||
|
1 files changed, 1 insertions(+), 0 deletions(-)
|
||||||
|
<b>$ git diff --cached --stat</b>
|
||||||
|
hello.rb | 2 <span class="green">+</span><span class="red">-</span>
|
||||||
|
1 files changed, 1 insertions(+), 1 deletions(-)
|
||||||
|
<b>$ git diff HEAD --stat</b>
|
||||||
|
hello.rb | 3 <span class="green">++</span><span class="red">-</span>
|
||||||
|
1 files changed, 2 insertions(+), 1 deletions(-)
|
||||||
|
</pre>
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
You can also provide a file path at the end of any of these options
|
You can also provide a file path at the end of any of these options
|
||||||
to limit the <code>diff</code> output to a specific file or subdirectory.
|
to limit the <code>diff</code> output to a specific file or subdirectory.
|
||||||
@ -372,5 +397,175 @@ index 2aabb6e..2ae9ba4 100644
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<div class="box">
|
||||||
|
<h2>
|
||||||
|
<span class="docs">
|
||||||
|
<a href="#">docs</a>
|
||||||
|
<a href="#">book</a>
|
||||||
|
</span>
|
||||||
|
<a name="commit">git commit</a>
|
||||||
|
<span class="desc">records a snapshot of the staging area</span>
|
||||||
|
</h2>
|
||||||
|
|
||||||
|
<div class="block">
|
||||||
|
|
||||||
|
<p>Now that you have staged the content you want to snapshot with the
|
||||||
|
<code>git add</code> command, you run <code>git commit</code> to actually
|
||||||
|
record the snapshot. Let's stage and commit all the changes to our
|
||||||
|
<code>hello.rb</code> file. In this first example, we'll use the
|
||||||
|
<code>-m</code> option to provide the commit message on the command line.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<pre>
|
||||||
|
<b>$ git add hello.rb </b>
|
||||||
|
<b>$ git status -s</b>
|
||||||
|
<span class="green">M</span> hello.rb
|
||||||
|
<b>$ git commit -m 'my hola mundo changes'</b>
|
||||||
|
[master 68aa034] my hola mundo changes
|
||||||
|
1 files changed, 2 insertions(+), 1 deletions(-)
|
||||||
|
</pre>
|
||||||
|
|
||||||
|
<p>Now we have recorded the snapshot. If we run <code>git status</code>
|
||||||
|
again, we will see that we have a "clean working directory", which means
|
||||||
|
that we have not made any changes since our last commit - there is no
|
||||||
|
un-snapshotted work in our checkout.</p>
|
||||||
|
|
||||||
|
<pre>
|
||||||
|
<b>$ git status</b>
|
||||||
|
# On branch master
|
||||||
|
nothing to commit (working directory clean)
|
||||||
|
</pre>
|
||||||
|
|
||||||
|
<p>If you leave off the <code>-m</code> option, Git will try to open a
|
||||||
|
text editor for you to write your commit message. In <code>vim</code>,
|
||||||
|
which it will default to if it can find nothing else in your settings,
|
||||||
|
the screen might look something like this:
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<pre>
|
||||||
|
|
||||||
|
# Please enter the commit message for your changes. Lines starting
|
||||||
|
# with '#' will be ignored, and an empty message aborts the commit.
|
||||||
|
# On branch master
|
||||||
|
# Changes to be committed:
|
||||||
|
# (use "git reset HEAD <file>..." to unstage)
|
||||||
|
#
|
||||||
|
# modified: hello.rb
|
||||||
|
#
|
||||||
|
~
|
||||||
|
~
|
||||||
|
".git/COMMIT_EDITMSG" 9L, 257C
|
||||||
|
</pre>
|
||||||
|
|
||||||
|
<p>At this point you add your actual commit message at the top of the
|
||||||
|
document. Any lines starting with '#' will be ignored - Git will put
|
||||||
|
the output of the <code>git status</code> command in there for you as
|
||||||
|
a reminder of what you have modified and staged.</p>
|
||||||
|
|
||||||
|
<p>In general, it's very important to write a good commit message.
|
||||||
|
For open source projects, it's generally a rule to write your message
|
||||||
|
more or less in this format:</p>
|
||||||
|
|
||||||
|
<pre>
|
||||||
|
Short (50 chars or less) summary of changes
|
||||||
|
|
||||||
|
More detailed explanatory text, if necessary. Wrap it to about 72
|
||||||
|
characters or so. In some contexts, the first line is treated as the
|
||||||
|
subject of an email and the rest of the text as the body. The blank
|
||||||
|
line separating the summary from the body is critical (unless you omit
|
||||||
|
the body entirely); some git tools can get confused if you run the
|
||||||
|
two together.
|
||||||
|
|
||||||
|
Further paragraphs come after blank lines.
|
||||||
|
|
||||||
|
- Bullet points are okay, too
|
||||||
|
|
||||||
|
- Typically a hyphen or asterisk is used for the bullet, preceded by a
|
||||||
|
single space, with blank lines in between, but conventions vary
|
||||||
|
here
|
||||||
|
|
||||||
|
# Please enter the commit message for your changes. Lines starting
|
||||||
|
# with '#' will be ignored, and an empty message aborts the commit.
|
||||||
|
# On branch master
|
||||||
|
# Changes to be committed:
|
||||||
|
# (use "git reset HEAD <file>..." to unstage)
|
||||||
|
#
|
||||||
|
# modified: hello.rb
|
||||||
|
#
|
||||||
|
~
|
||||||
|
~
|
||||||
|
~
|
||||||
|
".git/COMMIT_EDITMSG" 25L, 884C written
|
||||||
|
</pre>
|
||||||
|
|
||||||
|
<p class="aside">
|
||||||
|
The commit message is very important. Since much of the power of
|
||||||
|
Git is this flexibility in carefully crafting commits locally and then
|
||||||
|
sharing them later, it is very powerful to be able to write three or
|
||||||
|
four commits of logically seperate changes so that your work may be more
|
||||||
|
easily peer reviewed. Since there is a seperation between committing and
|
||||||
|
pushing those changes, do take the time to make it easier for the people
|
||||||
|
you are working with to see what you've done by putting each logically
|
||||||
|
seperate change in a seperate commit with a nice commit message so it
|
||||||
|
is easier for them to see what you are doing and why.</p>
|
||||||
|
|
||||||
|
<h4>
|
||||||
|
git commit -a
|
||||||
|
<small>automatically stage all tracked, modified files before the commit</small>
|
||||||
|
</h4>
|
||||||
|
|
||||||
|
<p>If you think the <code>git add</code> stage of the workflow is too
|
||||||
|
cumbersome, Git allows you to skip that part with the <code>-a</code>
|
||||||
|
option. This basically tells Git to run <code>git add</code> on any file
|
||||||
|
that is "tracked" - that is, any file that was in your last commit and
|
||||||
|
has been modified. This allows you to do a more Subversion style workflow
|
||||||
|
if you want, simply editing files and then running <code>git commit -a</code>
|
||||||
|
when you want to snapshot everything that has been changed. You still need
|
||||||
|
to run <code>git add</code> to start tracking new files, though, just like
|
||||||
|
Subversion.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<pre>
|
||||||
|
<b>$ vim hello.rb</b>
|
||||||
|
<b>$ git status -s</b>
|
||||||
|
<span class="red">M</span> hello.rb
|
||||||
|
<b>$ git commit -m 'changes to hello file'</b>
|
||||||
|
# On branch master
|
||||||
|
# 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: hello.rb
|
||||||
|
#
|
||||||
|
<span class="hl">no changes added to commit (use "git add" and/or "git commit -a")</span>
|
||||||
|
<b>$ git commit -am 'changes to hello file'</b>
|
||||||
|
[master 78b2670] changes to hello file
|
||||||
|
1 files changed, 2 insertions(+), 1 deletions(-)
|
||||||
|
</pre>
|
||||||
|
|
||||||
|
<p>Notice how if you don't stage any changes and then run
|
||||||
|
<code>git commit</code>, Git will simply give you the output of the
|
||||||
|
<code>git status</code> command, reminding you that nothing is staged.
|
||||||
|
I've highlighted the important part of that message, saying that nothing
|
||||||
|
is added to be committed. If you use <code>-a</code>, it will add and
|
||||||
|
commit everything at once.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>This now lets you complete the entire snapshotting workflow - you
|
||||||
|
make changes to your files, then use <code>git add</code> to stage
|
||||||
|
files you want to change, <code>git status</code> and <code>git diff</code>
|
||||||
|
to see what you've changed, and then finally <code>git commit</code>
|
||||||
|
to actually record the snapshot forever.</p>
|
||||||
|
|
||||||
|
<p class="nutshell">
|
||||||
|
<strong>In a nutshell</strong>,
|
||||||
|
you run <code>git commit</code> to record the snapshot of your staged
|
||||||
|
content. This snapshot can then be compared, shared and reverted to
|
||||||
|
if you need to.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
<p><a href="/basic">On to Branching and Merging »</a></p>
|
<p><a href="/basic">On to Branching and Merging »</a></p>
|
||||||
|
|
||||||
|
@ -57,10 +57,12 @@ pre b { color: #111; }
|
|||||||
.green { color: #383; }
|
.green { color: #383; }
|
||||||
.umber { color: #8A3324; }
|
.umber { color: #8A3324; }
|
||||||
.lblue { color: #55a; }
|
.lblue { color: #55a; }
|
||||||
|
.hl { background: #eea; }
|
||||||
|
|
||||||
.box h4 {
|
.box h4 {
|
||||||
font-family:monospace;
|
font-family:monospace;
|
||||||
margin-top: 20px;
|
margin-top: 20px;
|
||||||
|
color: #833;
|
||||||
}
|
}
|
||||||
.box h4 small {
|
.box h4 small {
|
||||||
color: #888;
|
color: #888;
|
||||||
|
Loading…
Reference in New Issue
Block a user