赞
踩
主要是使用如下命令:
git checkout [-f|--ours|--theirs|-m|--conflict=<style>] [<tree-ish>] [--] <pathspec>…
覆盖与
pathspec
匹配的文件的内容。当没有给出<tree-ish>
(通常是一个commit)时,用 index 中的内容覆盖工作树。当给出<tree-ish>
时,用<tree-ish>
处的内容同时覆盖 index 和工作树。
由于前一个的合并失败,index 可能包含未合并的条目。默认情况下,如果您试图从 index 中检出这样的条目,则 checkout 操作将失败,并且不会检出任何内容。使用-f
将忽略这些未合并的条目。可以使用--ours
或--theirs
从 index 中检出合并的特定端的内容。使用-m
,可以放弃对工作树文件所做的更改,以重新创建原始的冲突合并结果。
首先要弄清楚什么是工作树,什么是 index ?
现在注意 — 如果你想让剩下的学习过程顺利进行,这里是关于Git需要记住的主要事项。Git有三种主要状态,您的文件可以驻留在其中:modified, staged, 以及 committed
这就引出了Git项目的三个主要部分:工作树(working tree)、暂存区(staging area)和Git目录(Git directory)。
Figure 6. Working tree, staging area, and Git directory
工作树是项目的一个版本的单个检出。这些文件从Git目录中的压缩数据库中提取出来,放在磁盘上供您使用或修改。
暂存区是一个文件,通常包含在Git目录中,用于存储有关下一次 commit 内容的信息。用Git的术语,它的技术名称是 index
,但短语 “staging area” 也同样有效。
Git目录是Git存储项目的元数据和对象数据库的地方。这是Git最重要的部分,也是从另一台计算机 clone 存储库时所复制的内容。
Git的基本工作流程如下:
如果Git目录中有一个特定版本的文件,则认为该文件是 committed 。如果它已被修改并添加到暂存区域,则它就是 staged 。如果它在检出后发生了更改,但尚未暂存,那它是 modified 。在 Git Basics 中,您将了解更多关于这些状态的信息,以及如何利用它们或完全跳过 staged 的部分。
接下来步入正题,假如你有两个分支,分别为 master
与 dev
,您当前工作在 master 上,想将 dev 中 HEAD
处的 main.c 检出到工作区,按照如下命令操作:
首先需要知道 dev 分支 HEAD
处的 commit id
,比如是 a36ac44c5ac1d...
,执行如下命令:
git checkout a36ac44 -- main.c
注意,这一步执行完当前工作区与暂存区中的 main.c 都被改掉了,这可能不是您的本意,您可能只想改工作区,暂存区要保持不变,那么再执行下一步:
git reset -- main.c
这一步是将当前 master 分支 HEAD
所指向的 main.c 覆盖暂存区的 main.c ,这样暂存区的main.c 就与版本库里的一致了。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。