目录

Git 是一个由 Linux 内核作者 Linus Torvalds 编写的版本控制系统(VCS),现在被用来维护 Linux 内核以及数以千计的其他项目,包括 Arch 的软件包管理器 Pacman。debian 的 apt-get.
在官方网站可以获得一份完整的、包含参考与教程的 文档


安装


apt-get install git

如果需要 Bash 命令补完(也即按下 Tab 来完成你正在键入的命令),请在~/.bashrc文件中添加如下内容:

source /usr/share/git/completion/git-completion.bash

你也可以安装 bash-completion 来自动为 shell 提供命令补完。

配置


Git 从若干 INI 格式的配置文件中读取配置信息。在每一个 git 版本库中,.git/config 用于指定与该版本库有关的配置选项。在 $HOME/.gitconfig 中的用户 (“global”) 的配置文件将被用作仓库配置的备用配置。你可以直接编辑配置文件,但是更推荐的方法是使用 git-config 工具。例如,

$ git config --global core.editor "nano -w"

会在 ~/.gitconfig 文件的 [core] 部分中添加 editor = nano -w。
git-config 工具的 man page 提供了完整的选项列表。
这是一些你可能用到的常见的配置:

$ git config --global user.name "Firstname Lastname"
$ git config --global user.email "[email protected]"

在 Git 命令行下启用彩色输出

配置 color.ui 选项可以令 Git 以彩色输出信息。

$ git config --global color.ui true

解决 Git 在命令行下中文文件名显示为数字的问题

$ git config --global core.quotepath false

基本用法


克隆一个版本库

以下命令可以将一个 Git 版本库克隆至本地目录的新文件夹中:

git clone <repo location> <dir>

如果留空 <dir> 字段,就会以 Git 版本库的名称命名新文件夹,例如:

git clone [email protected]:torvalds/linux.git

可以将 GitHub 上 Linux 内核的镜像克隆至名为「linux」的文件夹中。

提交(commit)文件到版本库

Git 的提交过程分为两步:

  1. 添加新文件、修改现有的文件(均可通过 git add <files> 完成), 或者删除文件(通过 git rm 完成)。这些修改将被存入名叫 index 的文件中。
  2. 使用 git commit 提交修改。

Git 提交时会打开文本编辑器,填写提交信息。你可以通过 git config 命令修改 core.editor 来选择编辑器。

此外,你也可以直接用 git commit -m <message> 命令在提交时填写提交信息,这样就不会打开编辑器。

其它有用的技巧:

git commit -a lets you commit changes you have made to files already under Git control without having to take the step of adding the changes to the index. You still have to add new files with git add.

git commit -a 命令可以跳过添加修改的部分,但是如果创建新文件依然需要 git add。

git add -p 命令可以提交修改文件的特定部分。如果你进行了许多修改而且希望将其分多次提交的话,这一选项非常有用。

将改动提交(push)到公共版本库

以下命令可以将修改提交至服务器(例如 Github):

git push <server name> <branch>

添加 -u 参数可以将该服务器设为当前分支(branch)提交时的默认服务器。如果你是通过上文的方法克隆的版本库,默认服务器将是你克隆的来源(别名「origin」),默认分支将是 master。也就是说如果你按照上文的方法克隆的话,提交时只要执行 git push 即可。如果需要的话,可以令 Git 提交至多个服务器,不过这比较复杂。下文将讲解分支(branch)。

从服务器公共版本库下载修改

如果你在多台电脑上工作,并且需要将本地版本库与服务器更新,可以执行:

git pull <server name> <branch>

与 push 类似,server name 与 branch 都可以根据默认来,所以只需执行 git pull。 Git pull 实际上是如下两个命令的简写:

  1. git fetch,将服务器文件复制至本地,这一分支被称作「remote」也即它是远程服务器的镜像。
  2. git merge,将「remote」分支的文件与本地文件合并。如果你的本地提交记录与服务器的提交记录相同,就可以直接得到服务器的最新版本。如果你的提交记录与服务器的记录不符(例如在你最后一次提交之后别人进行了提交),两份提交记录将被合并。

It is not a bad idea to get into the practice of using these two commands instead of git pull. This way you can check to make sure that the server contains what you would expect before merging.

分步执行两个命令而非 git pull 并不是坏事,这样可以确保合并之前服务器的文件与你期望的相同。

查看历史记录

git log 命令可以显示当前分支的历史记录。注意每一次提交(commit)会以一个 SHA-1 标记区分,接下来是提交者、提交日期以及提交信息。更实用的命令:

git log --graph --oneline --decorate

可以显示与 TortoiseGit 的提交记录类似的窗口,这一窗口包含了如下内容:

可以通过如下命令将这一命令以 git graph 的别名保存:

git config --global alias.graph 'log --graph --oneline --decorate'

现在执行 git graph 将等价于执行 git log –graph –oneline –decorate。

git graph 与 git log 命令也可以带 –all 的参数执行,这将显示所有的分支信息,而不止当前的分支。

也可以带 –stat 参数执行,它可以显示每次提交时哪些文件有修改、修改了多少行。

处理合并(merge)

当你执行 pull、进行复原操作,或者将一个分支与另一个进行合并时会需要处理合并。与其它 VCS 类似,当 Git 无法自动处理合并时,就需要使用者进行处理。

可以查看 Git Book 的这一部分讲解如何处理冲突合并。

如果你需要通过合并来还原的话,可以带 –abort 参数运行合并相关的命令,例如 git merge –abort,git pull –abort,git rebase –abort)。

使用分布式版本控制系统

Git提示符

传输协议

参见

ArchWiki