1
0

Changed 您 to 你

do not use the honorific version of `you' in chinese.
indeed that was weird...
This commit is contained in:
dotnil
2012-11-29 19:29:33 +08:00
parent 0fd9c64462
commit b7cefc43bf
6 changed files with 141 additions and 141 deletions

View File

@@ -10,11 +10,11 @@ layout: zh_reference
分支与合并
</h2>
<div class="block">
<p>分支是我最喜欢的 Git 特性之一。如果用过其他版本控制系统,把所知的分支给忘记,倒可能更有帮助些 —— 事实上,以我们使用分支的方式,把 Git 的分支看作 <i>上下文</i> 反而更合适。当检出分支时,可以在两三个不同的分支之间来回切换。
<p>分支是我最喜欢的 Git 特性之一。如果用过其他版本控制系统,把所知的分支给忘记,倒可能更有帮助些 —— 事实上,以我们使用分支的方式,把 Git 的分支看作 <i>上下文</i> 反而更合适。当检出分支时,可以在两三个不同的分支之间来回切换。
</p>
<p class="nutshell">
<b>一言以蔽之</b>可以执行 <code>git branch (branchname)</code> 来创建分支,使用 <code>git checkout (branchname)</code> 命令切换到该分支,在该分支的上下文环境中,提交快照等,之后可以很容易地来回切换。当切换分支的时候Git 会用该分支的最后提交的快照替换的工作目录的内容,所以多个分支不需要多个目录。使用 <code>git merge</code> 来合并分支。可以多次合并到统一分支,也可以选择在合并之后直接删除被并入的分支。
<b>一言以蔽之</b>可以执行 <code>git branch (branchname)</code> 来创建分支,使用 <code>git checkout (branchname)</code> 命令切换到该分支,在该分支的上下文环境中,提交快照等,之后可以很容易地来回切换。当切换分支的时候Git 会用该分支的最后提交的快照替换的工作目录的内容,所以多个分支不需要多个目录。使用 <code>git merge</code> 来合并分支。可以多次合并到统一分支,也可以选择在合并之后直接删除被并入的分支。
</p>
</div>
@@ -42,7 +42,7 @@ layout: zh_reference
</h2>
<div class="block">
<p><code>git branch</code> 命令是 Git 中的通用分支管理工具,可以通过它完成多项任务。我们先说会用到的最多的命令 —— 列出分支、创建分支和删除分支。我们还会介绍用来切换分支的 <code>git checkout</code> 命令。
<p><code>git branch</code> 命令是 Git 中的通用分支管理工具,可以通过它完成多项任务。我们先说会用到的最多的命令 —— 列出分支、创建分支和删除分支。我们还会介绍用来切换分支的 <code>git checkout</code> 命令。
</p>
<h4>
@@ -50,7 +50,7 @@ layout: zh_reference
<small>列出可用的分支</small>
</h4>
<p>没有参数是,<code>git branch</code> 会列出在本地的分支。所在的分支的行首会有个星号作标记。如果开启了<a href="http://progit.org/book/ch7-1.html#colors_in_git">彩色模式</a>,当前分支会用绿色显示。
<p>没有参数是,<code>git branch</code> 会列出在本地的分支。所在的分支的行首会有个星号作标记。如果开启了<a href="http://progit.org/book/ch7-1.html#colors_in_git">彩色模式</a>,当前分支会用绿色显示。
</p>
<pre>
@@ -58,7 +58,7 @@ $ git branch
* <span class="green">master</span>
</pre>
<p>此例的意思就是我们有一个叫做“master”的分支并且该分支是当前分支。当执行 <code>git init</code> 的时候,缺省情况下 Git 就会为创建“master”分支。但是这名字一点特殊意味都没有 —— 事实上并不非得要一个叫做“master”的分支。不过由于它是缺省分支名的缘故绝大部分项目都有这个分支。
<p>此例的意思就是我们有一个叫做“master”的分支并且该分支是当前分支。当执行 <code>git init</code> 的时候,缺省情况下 Git 就会为创建“master”分支。但是这名字一点特殊意味都没有 —— 事实上并不非得要一个叫做“master”的分支。不过由于它是缺省分支名的缘故绝大部分项目都有这个分支。
</p>
<h4>
@@ -75,7 +75,7 @@ $ git branch
testing
</pre>
<p>现在我们可以看到,有了一个新分支。当以此方式在上次提交更新之后创建了新分支如果后来又有更新提交然后又切换到了“testing”分支Git 将还原的工作目录到创建分支时候的样子 —— 可以把它看作一个记录当前进度的书签。让我们实际运用看看 —— 我们用 <code>git checkout (branch)</code> 切换到我们要修改的分支。
<p>现在我们可以看到,有了一个新分支。当以此方式在上次提交更新之后创建了新分支如果后来又有更新提交然后又切换到了“testing”分支Git 将还原的工作目录到创建分支时候的样子 —— 可以把它看作一个记录当前进度的书签。让我们实际运用看看 —— 我们用 <code>git checkout (branch)</code> 切换到我们要修改的分支。
</p>
<pre>
@@ -115,7 +115,7 @@ README hello.rb more.txt test.txt
</h4>
<p>
通常情况下,会更希望立即切换到新分支从而在该分支中操作然后当此分支的开发日趋稳定时将它合并到稳定版本的分支例如“master”中去。执行 <code>git branch newbranch; git checkout newbranch</code> 也很简单,不过 Git 还为提供了快捷方式:<code>git checkout -b newbranch</code>
通常情况下,会更希望立即切换到新分支从而在该分支中操作然后当此分支的开发日趋稳定时将它合并到稳定版本的分支例如“master”中去。执行 <code>git branch newbranch; git checkout newbranch</code> 也很简单,不过 Git 还为提供了快捷方式:<code>git checkout -b newbranch</code>
</p>
<pre>
@@ -142,11 +142,11 @@ Switched to branch 'master'
README hello.rb more.txt test.txt
</pre>
<p>所见,我们创建了一个分支,在该分支的上下文中移除了一些文件,然后切换回我们的主分支,那些文件又回来了。使用分支将工作切分开来,从而让我们能够在不同上下文中做事,并来回切换。
<p>所见,我们创建了一个分支,在该分支的上下文中移除了一些文件,然后切换回我们的主分支,那些文件又回来了。使用分支将工作切分开来,从而让我们能够在不同上下文中做事,并来回切换。
</p>
<p>
创建新分支,在其中完成一部分工作,完成之后将它合并到主分支并删除。会觉得这很方便,因为这么做很快很容易。如此,当觉得这部分工作并不靠谱,舍弃它很容易。并且,如果必须回到稳定分支做些事情,也可以很方便地这个独立分支的工作先丢在一边,完成要事之后再切换回来。
创建新分支,在其中完成一部分工作,完成之后将它合并到主分支并删除。会觉得这很方便,因为这么做很快很容易。如此,当觉得这部分工作并不靠谱,舍弃它很容易。并且,如果必须回到稳定分支做些事情,也可以很方便地这个独立分支的工作先丢在一边,完成要事之后再切换回来。
</p>
<h4>
@@ -180,11 +180,11 @@ Deleted branch testing (was 78b2670).
<a target="new" href="http://progit.org/book/ch3-2.html#basic_merging">book</a>
</span>
<a name="merge">git merge</a>
<span class="desc">将分支合并到的当前分支</span>
<span class="desc">将分支合并到的当前分支</span>
</h2>
<div class="block">
<p>一旦某分支有了独立内容,终究会希望将它合并回到的主分支。可以使用 <code>git merge</code> 命令将任何分支合并到当前分支中去。我们那上例中的“removals”分支为例。假设我们创建了一个分支移除了一些文件并将它提交到该分支其实该分支是与我们的主分支也就是“master”独立开来的。要想将这些移除操作包含在主分支中可以将“removals”分支合并回去。
<p>一旦某分支有了独立内容,终究会希望将它合并回到的主分支。可以使用 <code>git merge</code> 命令将任何分支合并到当前分支中去。我们那上例中的“removals”分支为例。假设我们创建了一个分支移除了一些文件并将它提交到该分支其实该分支是与我们的主分支也就是“master”独立开来的。要想将这些移除操作包含在主分支中可以将“removals”分支合并回去。
</p>
<pre>
@@ -209,7 +209,7 @@ Fast-forward
更多复杂合并
</h4>
<p>当然合并并不仅仅是简单的文件添加、移除的操作Git 也会合并修改 —— 事实上,它很会合并修改。举例,我们看看在某分支中编辑某个文件,然后在另一个分支中把它的名字改掉再做些修改,最后将这俩分支合并起来。觉得会变成一坨 shi我们试试看。
<p>当然合并并不仅仅是简单的文件添加、移除的操作Git 也会合并修改 —— 事实上,它很会合并修改。举例,我们看看在某分支中编辑某个文件,然后在另一个分支中把它的名字改掉再做些修改,最后将这俩分支合并起来。觉得会变成一坨 shi我们试试看。
</p>
<pre>
@@ -342,7 +342,7 @@ This project has examples of hello world in
nearly every programming language.
</pre>
<p>可以看到Git 在产生合并冲突的地方插入了标准的与 Subversion 很像的合并冲突标记。轮到我们去解决这些冲突了。在这里我们就手动把它解决。如果要 Git 打开一个图形化的合并工具,可以看看 <a href="http://www.kernel.org/pub/software/scm/git/docs/git-mergetool.html">git 合并工具</a>(比如 kdiff3、emerge、p4merge 等)。
<p>可以看到Git 在产生合并冲突的地方插入了标准的与 Subversion 很像的合并冲突标记。轮到我们去解决这些冲突了。在这里我们就手动把它解决。如果要 Git 打开一个图形化的合并工具,可以看看 <a href="http://www.kernel.org/pub/software/scm/git/docs/git-mergetool.html">git 合并工具</a>(比如 kdiff3、emerge、p4merge 等)。
</p>
<pre>
@@ -360,7 +360,7 @@ index 9103e27,69cad1a..0000000
This project has examples of hello world in
</pre>
<p>在 Git 中,处理合并冲突的时候有个很酷的提示。如果执行 <code>git diff</code>,就像我演示的这样,它会告诉冲突的两方,和是如何解决的。现在是时候把它标记为已解决了。在 Git 中,我们可以用 <code>git add</code> —— 要告诉 Git 文件冲突已经解决,必须把它写入缓存区。
<p>在 Git 中,处理合并冲突的时候有个很酷的提示。如果执行 <code>git diff</code>,就像我演示的这样,它会告诉冲突的两方,和是如何解决的。现在是时候把它标记为已解决了。在 Git 中,我们可以用 <code>git add</code> —— 要告诉 Git 文件冲突已经解决,必须把它写入缓存区。
</p>
<pre>
@@ -396,14 +396,14 @@ M README
<div class="block">
<p>
到目前为止我们已经提交快照到项目中在不同的各自分离的上下文中切换但假如我们忘了自己是如何到目前这一步的那该怎么办或者假如我们想知道此分支与彼分支到底有啥区别Git 提供了一个告诉您使您达成当前快照的所有提交消息的工具,叫做 <code>git log</code>
到目前为止我们已经提交快照到项目中在不同的各自分离的上下文中切换但假如我们忘了自己是如何到目前这一步的那该怎么办或者假如我们想知道此分支与彼分支到底有啥区别Git 提供了一个告诉你使你达成当前快照的所有提交消息的工具,叫做 <code>git log</code>
</p>
<p>
要理解日志log命令需要了解当执行 <code>git commit</code> 以存储一个快照的时候都有啥信息被保存了。除了文件详单、提交消息和提交者的信息Git 还保存了的此次提交所基于的快照。也就是,假如克隆了一个项目,是在什么快照的基础上做的修改而得到新保存的快照的?这有益于为项目进程提供上下文,使 Git 能够弄明白谁做了什么改动。如果 Git 有的快照所基于的快照的话,它就能自动判断都改变了什么。而新提交所基于的提交,被称作新提交的“父亲”。
要理解日志log命令需要了解当执行 <code>git commit</code> 以存储一个快照的时候都有啥信息被保存了。除了文件详单、提交消息和提交者的信息Git 还保存了的此次提交所基于的快照。也就是,假如克隆了一个项目,是在什么快照的基础上做的修改而得到新保存的快照的?这有益于为项目进程提供上下文,使 Git 能够弄明白谁做了什么改动。如果 Git 有的快照所基于的快照的话,它就能自动判断都改变了什么。而新提交所基于的提交,被称作新提交的“父亲”。
</p>
<p>某分支的按时间排序的“父亲”列表,当在该分支时,可以执行 <code>git log</code> 以查看。例如,如果我们在本章中操作的 Hello World 项目中执行 <code>git log</code>,我们可以看到已提交的消息。
<p>某分支的按时间排序的“父亲”列表,当在该分支时,可以执行 <code>git log</code> 以查看。例如,如果我们在本章中操作的 Hello World 项目中执行 <code>git log</code>,我们可以看到已提交的消息。
<pre>
<b>$ git log</b>
@@ -474,7 +474,7 @@ b7ae93b added from ruby
* 17f4acf first commit
</pre>
<p>现在我们可以更清楚明了地看到何时工作分叉、又何时归并。这对查看发生了什么、应用了什么改变很有帮助,并且极大地帮助管理的分支。让我们创建一个分支,在里头做些事情,然后切回到主分支,也做点事情,然后看看 <code>log</code> 命令是如何帮助我们理清这俩分支上都发生了啥的。
<p>现在我们可以更清楚明了地看到何时工作分叉、又何时归并。这对查看发生了什么、应用了什么改变很有帮助,并且极大地帮助管理的分支。让我们创建一个分支,在里头做些事情,然后切回到主分支,也做点事情,然后看看 <code>log</code> 命令是如何帮助我们理清这俩分支上都发生了啥的。
</p>
<p>首先我们创建一个分支,来添加 Erlang 编程语言的 Hello World 示例 —— 我们想要在一个分支里头做这个,以避免让可能还不能工作的代码弄乱我们的稳定分支。这样就可以切来切去,片叶不沾身。
@@ -517,7 +517,7 @@ README ruby.rb
1 files changed, 2 insertions(+), 2 deletions(-)
</pre>
<p>现在假设我们有段时间不做这个项目了我们做别的去了。当我们回来的时候我们想知道“erlang”分支都是啥而主分支的进度又是怎样。仅仅看分支的名字我们是无从知道自己还在里面有 Haskell 的改动的,但是用 <code>git log</code> 我们就可以。如果在命令行中提供一个分支名字,它就会显示该分支历史中“可及”的提交,即从该分支创立起可追溯的影响了最终的快照的提交。
<p>现在假设我们有段时间不做这个项目了我们做别的去了。当我们回来的时候我们想知道“erlang”分支都是啥而主分支的进度又是怎样。仅仅看分支的名字我们是无从知道自己还在里面有 Haskell 的改动的,但是用 <code>git log</code> 我们就可以。如果在命令行中提供一个分支名字,它就会显示该分支历史中“可及”的提交,即从该分支创立起可追溯的影响了最终的快照的提交。
</p>
<pre>
@@ -551,7 +551,7 @@ ab5ab4c added erlang
</p>
<p class="nutshell">
<b>一言以蔽之</b> 使用 <code>git log</code> 列出促成当前分支目前的快照的提交历史记录。这使能够看到项目是如何到达现在的状况的。
<b>一言以蔽之</b> 使用 <code>git log</code> 列出促成当前分支目前的快照的提交历史记录。这使能够看到项目是如何到达现在的状况的。
</p>
</div>
@@ -570,16 +570,16 @@ ab5ab4c added erlang
<div class="block">
<p>
如果达到一个重要的阶段,并希望永远记住那个特别的提交快照,可以使用 <code>git tag</code> 给它打上标签。该 <code>tag</code> 命令基本上会给该特殊提交打上永久的书签,从而使在将来能够用它与其他提交比较。通常,会在切取一个发布版本或者交付一些东西的时候打个标签。
如果达到一个重要的阶段,并希望永远记住那个特别的提交快照,可以使用 <code>git tag</code> 给它打上标签。该 <code>tag</code> 命令基本上会给该特殊提交打上永久的书签,从而使在将来能够用它与其他提交比较。通常,会在切取一个发布版本或者交付一些东西的时候打个标签。
</p>
<p>比如说,我们想为我们的 Hello World 项目发布一个“1.0”版本。我们可以用 <code>git tag -a v1.0</code> 命令给最新一次提交打上(<code>HEAD</code>“v1.0”的标签。<code>-a</code> 选项意为“创建一个带注解的标签”,从而使为标签添加注解。绝大部分时候都会这么做的。不用 <code>-a</code> 选项也可以执行的,但它不会记录这标签是啥时候打的,谁打的,也不会让你添加个标签的注解。我推荐一直创建带注解的标签。</p>
<p>比如说,我们想为我们的 Hello World 项目发布一个“1.0”版本。我们可以用 <code>git tag -a v1.0</code> 命令给最新一次提交打上(<code>HEAD</code>“v1.0”的标签。<code>-a</code> 选项意为“创建一个带注解的标签”,从而使为标签添加注解。绝大部分时候都会这么做的。不用 <code>-a</code> 选项也可以执行的,但它不会记录这标签是啥时候打的,谁打的,也不会让你添加个标签的注解。我推荐一直创建带注解的标签。</p>
<pre>
<b>$ git tag -a v1.0 </b>
</pre>
<p>执行 <code>git tag -a</code> 命令时Git 会打开的编辑器,让写一句标签注解,就像给提交写注解一样。
<p>执行 <code>git tag -a</code> 命令时Git 会打开的编辑器,让写一句标签注解,就像给提交写注解一样。
</p>
<p>现在,注意当我们执行 <code>git log --decorate</code> 时,我们可以看到我们的标签了: