使用帮助 | 联系电话:400-880-0256 0769-23037585 21686281

已经会用Git了?不会这十招怎么行

作者:admin 发表于:2014-07-25 点击:2017  保护视力色:

之前我们发了一些教程让你熟悉Git基础在团队合作环境中使用Git.我们讨论的这些Git命令足够让一个开发者在Git的世界里生存下去。在这篇教程里,我们试着探索如何高效地管理你的时间以及如何充分利用Git提供的特性。

注意:这里介绍的命令中有的包含方括号(例如:git add -p [file_name])。在这些例子中,你应该用你自己的数字、标识符等替代方括号里的内容,并且去掉方括号。

1. Git自动补全

如果你在命令行环境中运行Git命令,每次都手动地逐个输入命令是一件很无聊的事。为此,你可以花几分钟时间配置一下Git命令的自动补全功能。

在*nix系统运行下列命令下载自动补全脚本:

cd ~
curl https://raw.github.com/git/git/master/contrib/completion/git-completion.bash -o ~/.git-completion.bash

然后,添加下面的行到你的~/.bash_profile文件:

if [ -f ~/.git-completion.bash ]; then
    . ~/.git-completion.bash
fi

尽管我之前已经提到过,但我还是想再强调一下:如果你想使用完整的Git特性,你绝bi应该切换到命令行环境。

2. 在Git中忽略文件

你是不是对出现在你Git库里面的编译生成文件(比如.pyc)感到很无语?或者你是不是很厌恶不小心将他们添加到了Git?直接看这里,这里有一个方法可以让你告诉Git忽略所有这些文件和目录。只需要创建一个名字为.gitignore的文件,里面列出你不想要Git跟踪的文件和目录。可以用感叹号(!)列出例外情况。

*.pyc
*.exe
my_db_config/

!main.pyc

3. 谁动了我的代码?

当事情出了乱子时立马责怪别人这是人类的天性。如果你的服务器程序不能正常工作了,要找出罪魁祸首是非常简单的--只需要执行git blame。这个命令告诉你文件里的每一行的作者是谁,最后改动那一行的提交,以及提交的时间戳。

git blame [file_name]

git blame demonstration

在下面的截图里,你可以看到在一个更大的库里这个命令的输出是什么样的:

git blame on the ATutor repository

4. 查看库的历史

在之前的教程里,我们已经看过了如何使用git log命令。不管怎样,有3个选项你应该知道。

  • --oneline - 压缩每次的提交信息,只保留一个缩减的Hash值和说明文字,然后把这些都展示在一行里。
  • --graph - 这个选项将在左边画出一个文字界面的提交历史图。如果你只有一个分支,用这个选项查看历史时是没什么意义的。
  • --all - 显示所有分支历史。

这是这3个选项合起来使用的效果:

Use of git log with all, graph and oneline

5. 不要丢失对某个提交的跟踪

假设你提交了一些不需要的东西,然后你进行了hard重置回到之前的状态。后来,你发现在这个过程中你丢失了其他一些重要的信息,你想要把这些信息找回来,或者至少可以查看一下这些信息。这就需要git reflog帮忙。

简单的git log只能告诉你最近的提交,这个提交的父提交,父提交的父提交,等等。但是git reflog是一个HEAD指向的提交的列表。记住,这个列表依赖于你自己的本地操作环境,它不是库的一部分,也不包含在push或者merge中。

如果执行git log命令,可以看到提交历史,这是我的库的一部分:

Project history

但是,git reflog命令显示了一个被我用hard重置丢掉的提交(b1b0ee9-HEAD@{4}).

Git reflog