首页 »编程综合 » gitgit:Git教程( 7) Git差异比对 »正文
gitgit:Git教程( 7) Git差异比对
来源: 发布时间:星期日, 2009年12月20日 浏览:0次 评论:0
在‘git日志’ 课中 我们通过'git log -p'命令来显示每 次提交和其父节点提交内容的间快照 差异 这节课介绍 'd f'命令会实现类似 功能---用 种统 格式来显示两个快照或文件的间 差异 这节课就向你展示如何使用d f命令 查看变更还未载入(changed but unstaged) 文件比对 最常见 种情况是使用'git d f'查看工作目录中某个还未载入(stage) 文件 差异 实验方案: 1.修改 下simplegit.rb 添加 个思路方法 2.然后在README文件中添加 个作者 3.然后我们用'git add'命令把README文件载入(stage) 4.运行'git status'会显示README载入了 而simplegit.rb只是修改了还未载入 $ vim lib/simplegit.rb $ vim README $ git add README $ git status # On branch master # Changes to be committed: # (use "git re HEAD <file>..." to unstage) # # modied: README # # Changed but not updated: # (use "git add <file>..." to update what will be committed) # (use "git checkout -- <file>..." to discard changes in working directory) # # modied: lib/simplegit.rb # 那么 我现在想查看 下对simplegit.rb文件究竟做了什么改动?在我载入的前如何查看这些改动 内容呢?答案是只需运行不带任何参数 'git d f'命令即可: $ git df df --git a/lib/simplegit.rb b/lib/simplegit.rb index dd5ecc4..8ac6604 100644 --- a/lib/simplegit.rb + b/lib/simplegit.rb @@ -25,6 +25,10 @@ SimpleGit command("git log -n 25 #{treeish}") end + def log_single(branch = 'master') + command("git log --pretty=oneline #{branch}") + end + def blame(path) command("git blame #{path}") end
这样就可以看到我添加到文件中 内容 现在我可以决定是不是要将其载入了 注意 README文件 修改并没有显示出来 查看载入(stage)而并未提交(commit) 变更 为了查看载入(staged)而并未提交(not committed) 内容差异 可以使用'git d f --stage'命令(在git 1.6的前 版本中 使用'--cached') $ git df --staged df --git a/README b/README index c526f88..879f0d4 100644 --- a/README + b/README @@ -8,3 +8,4 @@ It is an example for the Git Peepcode book that I'm currently writin Author : Scott Chacon ([email protected]) Orange Peel Chacon ([email protected]) Magnus O. Chacon ([email protected]) + Josephine Chacon ([email protected]) 适应情形:在运行git commit(不带'-a')的前 查看所有载入而未提交 变更内容 查看在最后 次提交的后 所有变更 现在 如果你想查看最后 次提交的后工作目录中文件 变更 你可以在git d f的后加 个HEAD来进行比对: $ git df HEAD df --git a/README b/README index c526f88..879f0d4 100644 --- a/README + b/README @@ -8,3 +8,4 @@ It is an example for the Git Peepcode book that I'm currently writin Author : Scott Chacon ([email protected]) Orange Peel Chacon ([email protected]) Magnus O. Chacon ([email protected]) + Josephine Chacon ([email protected]) df --git a/lib/simplegit.rb b/lib/simplegit.rb index dd5ecc4..8ac6604 100644 --- a/lib/simplegit.rb + b/lib/simplegit.rb @@ -25,6 +25,10 @@ SimpleGit command("git log -n 25 #{treeish}") end + def log_single(branch = 'master') + command("git log --pretty=oneline #{branch}") + end + def blame(path) command("git blame #{path}") end
适用情形:在运行'git commit -a'的前 显示所有载入 和未载入 变更 在本教程 ' ermediate' 课中会详细讲述HEAD在git中 含义 在这里要注意 点是 HEAD 含义跟SVN中 HEAD含义大不相同 在git中HEAD和你目前所处分枝 最后 次提交相关 和每个用户 本地仓库相关 在区别分枝间切换时它也会发生改变 上面是使用'd f'时最常用 3条命令 从 个特定点开始文件 修改情况 这也是最常见 个问题 譬如 如何查看创建v1.6这个标签的后README文件所发生 修改呢 可以这样: $ git df v1.6.0 -- README df --git a/README b/README index 548142c..5fa41b7 100644 --- a/README + b/README @@ -24,7 +24,7 @@ It was originally written by Linus Torvalds with help of a group o hackers around the net. It is currently tained by Junio C Hamano.
Please read the file INSTALL for ation instructions. -See Documentation/tutorial.txt to get started, then see +See Documentation/gittutorial.txt to get started, then see Documentation/everyday.txt for a useful minimum of commands, and "man git-commandname" for documentation of each command. 上面就显示出了工作目录中README文件 版本差异--如果你做了本地修改 载入或未载入 都会在这次比对中显示出来 两次提交 差异比对 如果你想对两次快照做差异比对 也即项目 两个版本的间比对--直接在git d f后跟上要比对 两个版本号即可:
$ git d f v1.0 v1.1 如果这两个版本分别在两个目录中 话 直接运行unix 'd f'工具进行比对也可以 上节课在介绍log命令时讲过格式化参数 譬如-stat 在这里也可以对git d f命令加这样 参数 显示某些统计数 下面是显示v1.6.1.1和v1.6.1.2两个版本的间差异 统计数字: $ git df v1.6.1.1 v1.6.1.2 --stat Documentation/RelNotes-1.6.1.2.txt | 39 + Documentation/config.txt | 4 +- Documentation/git-ls-tree.txt | 8 +- GIT-VERSION-GEN | 2 +- RelNotes | 2 +- builtin-commit.c | 6 builtin-gc.c | 8 - builtin-grep.c | 15 +- builtin-log.c | 28 +- builtin-ls-tree.c | 7 - builtin-send-pack.c | 43 +-------- dfcore-rename.c | 9 +- git-sh-up.sh | 2 +- sha1_file.c | 3 +- sha1_name.c | 2 +- t/t2300-cd-to-toplevel.sh | 4 +- t/t4014-format-patch.sh | 52 +- t/t5519-push-alternates.sh | 106 t/t7002-grep.sh | 7 + test-path-utils.c | 2 +- 20 files changed, 306 insertions(+), 43 deletions(-)
还可以深入查看某个具体文件 变更比对: $ git df v1.6.1.1 v1.6.1.2 -- sha1_file.c df --git a/sha1_file.c b/sha1_file.c index 52d1ead..ce5ea12 100644 --- a/sha1_file.c + b/sha1_file.c @@ -2337,7 +2337,8 @@ create_tmpfile(char *buffer, size_t bufsiz, const c write_loose_object(const unsigned char *sha1, char *hdr, hdrlen, void *buf, unsigned long len, time_t mtime) { - fd, size, ret; + fd, ret; + size_t size; unsigned char *compressed; z_stream stream; char *filename; 执行的后会显示sha1_file.c文件在v1.6.1.1和v1.6.1.2两个版本的间 比对结果 在合并某分枝前查看变更内容 这是个比较奇怪 问题 如果你开始是工作在 个主分枝上 而后生成了两个分支 如果直接对比快照 话 结果只会显示从 个状态到另 个状态 差异比对结果 举例来说 如果你创建了 个'dev' 分枝 进入这个分枝给lib/simplegit.rb添加了 个 然后回到了'master'分枝 删除了README文件 行 然后运行: $ git df master dev 结果会显示你给某个文件中添加了思路方法 还往README文件添加了 行内容 为什么会这样? 对'dev'分枝来说 README文件还是原样 而在 'master'上 你已经删掉了 行 这样直接对两个快照进行对比就好似'dev'分枝添加了 行进去 样 你想查看 实际上是在创建dev分枝的后在这条分枝上 差异对比 所以应该执行这样 命令: $ git df master...dev 这就不会拿master分枝上最后 个快照和dev分枝上最后 个快照进行比对--而是用dev和master所交 那个分歧点和现在 dev分枝上最后 个快照进行比对 在我们这个例子中 这样比对 结果是显示对那个文件添加了 个 如果你目前正处在master分枝上 你可以运行: $ git df ...dev 跟上面 结果是 样 所以 如果你想查看将要合并 某个分枝会有什么样 变化 可以执行: $ git df ...(branch) 将branch替换为你想要合并 分枝名即可
相关文章
读者评论
发表评论
|
|