Git 工具
- 选择修订版本
- Git 能够以多种方式来指定单个提交、一组提交、或者一定范围内的提交。
- 交互式暂存
- 如果运行git add时使用-i或者--interactive选项,Git 将会进入一个交互式终端模式
- 贮藏与清理
- 贮藏(stash)会处理工作目录的脏的状态——即跟踪文件的修改与暂存的改动——然后将未完成的修改保存到一个栈上,而你可以在任何时候重新应用这些改动
- 签署工作
- Git 虽然是密码级安全的,但它不是万无一失的。如果你从因特网上的其他人那里拿取工作,并且想要验证提交是不是真正地来自于可信来源, Git 提供了几种通过 GPG 来签署和验证工作的方式。
- 搜索
- 无论仓库里的代码量有多少,你经常需要查找一个函数是在哪里调用或者定义的,或者显示一个方法的变更历史。 Git 提供了两个有用的工具来快速地从它的数据库中浏览代码和提交。
- 重写历史
- 许多时候,在使用 Git 时,你可能想要修订提交历史。 Git 很棒的一点是它允许你在最后时刻做决定。你可以在将暂存区内容提交前决定哪些文件进入提交,可以通过git stash来决定不与某些内容工作,也可以重写已经发生的提交就像它们以另一种方式发生的一样。这可能涉及改变提交的顺序,改变提交中的信息或
- 重置揭密
- 在继续了解更专业的工具前,我们先探讨一下 Git 的reset和checkout命令。在初遇的 Git 命令中,这两个是最让人困惑的。它们能做很多事情,所以看起来我们很难真正地理解并恰当地运用它们。针对这一点,我们先来做一个简单的比喻。三棵树理解reset和checkout的最简方法,就是以 Git
- 高级合并
- 在 Git 中合并是相当容易的。因为 Git 使多次合并另一个分支变得很容易,这意味着你可以有一个始终保持最新的长期分支,经常解决小的冲突,比在一系列提交后解决一个巨大的冲突要好。然而,有时也会有棘手的冲突。不像其他的版本控制系统,Git 并不会尝试过于聪明的合并冲突解决方案。 Git 的哲学是聪明
- Rerere
- git rerere功能是一个隐藏的功能。正如它的名字“重用记录的解决方案(reuse recorded resolution)”所示,它允许你让 Git 记住解决一个块冲突的方法,这样在下一次看到相同冲突时,Git 可以为你自动地解决它。有几种情形下这个功能会非常有用。在文档中提到的一个例子是想要
- 使用 Git 调试
- 除了主要作为版本控制工具外,Git 也提供了几个命令来辅助你调试你的项目源码中的问题。由于 Git 被设计成适用于几乎所有类型的内容,这些工具也相当通用,但它们往往可以在出现问题时帮助你找到 bug 或者原因。文件标注如果你在追踪代码中的一个 bug,并且想知道是什么时候以及为何会引入,文件标注通常
- 子模块
- 有种情况我们经常会遇到:某个工作中的项目需要包含并使用另一个项目。也许是第三方库,或者你独立开发的,用于多个父项目的库。现在问题来了:你想要把它们当做两个独立的项目,同时又想在一个项目中使用另一个。我们举一个例子。假设你正在开发一个网站然后创建了 Atom 订阅。你决定使用一个库,而不是写自己的 A
- 打包
- 虽然我们已经了解了网络传输 Git 数据的常用方法(如 HTTP,SSH 等),但还有另外一种不太常见却又十分有用的方式。Git 可以将它的数据“打包”到一个文件中。这在许多场景中都很有用。有可能你的网络中断了,但你又希望将你的提交传给你的合作者们。可能你不在办公网中并且出于安全考虑没有给你接入内网
- 替换
- 我们之前强调过,Git 对象数据库中的对象是不可改变的,然而 Git 提供了一种有趣的方式来用其他对象假装替换数据库中的 Git 对象。replace命令可以让你在 Git 中指定某个对象并告诉 Git:“每次遇到这个 Git 对象时,假装它是其它对象”。在你用一个不同的提交替换历史中的一个提交而不
- 凭证存储
- 如果你使用的是 SSH 方式连接远端,并且设置了一个没有口令的密钥,这样就可以在不输入用户名和密码的情况下安全地传输数据。然而,这对 HTTP 协议来说是不可能的——每一个连接都是需要用户名和密码的。这在使用双重认证的情况下会更麻烦,因为你需要输入一个随机生成并且毫无规律的 token 作为密码。幸