1. 入门
1.5 安装 Git
1.5.1 Linux上的安装方法
Ubuntu(基于Debian的发行版):
sudo apt-get install git-all
可能会报错,解决方法:
sudo dpkg-divert --local --rename --add /sbin/initctl
sudo ln -s /bin/true /sbin/initctl
1.6 Git 的首次设置
1.6.1 用户身份
安装好Git后的第一件事就是设置用户名和电子邮件地址。这一步非常重要,因为Git的每一次提交都需要用到这些信息,而且还会被写入到所创建的提交中,不可更改,设置命令如下:
git config --global user.name "Jia Heng"
git config --global user.email 515274141@qq.com
如果传入了--global选项,那只需要设置一次就行了,之后不管在系统中执行什么操作,Git都会使用这些已经设置好的信息。如果你想在某个项目中使用不同的用户名或电子邮件地址,可以在项目中使用不带--global选项的命令。
很多图形界面工具首次运行的时候都会帮你完成以上设置。
1.6.3 检查个人设置
如果你想查看你的设置,可以通过执行下面的命令来列出当前Git可以找到的所有设置。
git config --list
你可以通过键入git config <key>来查看Git中当前某个键的值,如下所示。
git config user.name
2. Git基础
2.1 获取 Git 仓库
建立Git项目的方法主要有两种:
1. 把现有的项目或者目录导入Git中
2. 从服务器上克隆现有的Git仓库
2.1.1 在现有目录中初始化 Git 仓库
要想在Git中对现有项目进行跟踪管理,只需进入项目目录并输入:
git init
这会创建一个名为.git的子目录。这个子目录包含了构成Git仓库骨架的所有必需文件。但此刻Git尚未跟踪项目中的任何文件。
如果你打算着手对现有文件(非空目录)进行版本控制,那么就应该开始跟踪这些文件并进行初次提交。对需要跟踪的文件执行几次git add命令,然后输入git commit命令即可:
git add *.c
git commit -m 'initial project version'
2.2 在 Git 仓库中记录变更
工作目录下文件状态2.2.1 查看当前文件状态
git status
把一个简单的README文件添加到项目中。如果之前项目中不存在这个文件,那么这次执行git status就会看到这个未跟踪的文件:
echo 'My Project' > README
git status
2.2.2 跟踪新文件
可以使用git add命令让Git开始跟踪新的文件。执行以下命令来跟踪README文件:
git add README
此时README文件已处于跟踪状态,并被添加到暂存区等待提交。
git status
在“Changes to be commited”(要提交的变更)标题下列出的就是已暂存的文件。如果要提交,那么之前执行git add时的文件版本会被添加到历史快照中。回想一下,在早先执行git init时,你执行的下一条命令就是git add (files),这条命令就是让Git开始跟踪工作目录下的文件。git add命令接受一个文件或目录的路径名作为参数。如果提供的参数是目录,该命令会递归地添加该目录下的所有文件。
2.2.3 暂存已修改的文件
在“Changes not staged for commit”(尚未暂存以备提交的变更)标题下列出的就是处于跟踪状态的文件在工作目录中已被修改,但尚未被添加到暂存区中的文件。
执行下面的命令将文件添加到暂存区:
git add (files)
git add是一个多功能命令,既可以用来跟踪新文件,也可以用来暂存文件,还可以做一些其他的事,比如把存在合并冲突的文件标记为已解决。所以,把git add命令看成“添加内容到下一次提交中”而不是“把这个文件加入到项目中”,更有助于理解改命令。
2.2.4 显示更简洁的状态信息
git status -s
或
git status --short
??: 未被跟踪
A: 已暂存
M: 已修改
实际上,文件列表旁边的标记是分成两列的,左列标明了文件是否已暂存,右列标明了文件是否已修改。
2.2.6 查看已暂存和未暂存的变更
查看尚未添加到暂存区的变更:
git diff
查看有哪些已进入暂存区的内容会进入下一次提交:
git diff --staged
或
git diff --cached
2.2.7 提交变更
git commit
若需要记下更详细的更改记录,可以给git commit加上-v参数。这样会把这次提交的差异对比显示在文本编辑器中,让你可以看到要提交的具体变更。
另一种方式:
git commit -m “...”
2.2.8 跳过暂存区
跳过暂存区直接提交:
git commit -a -m '...'
(提交前不需要执行git add)
2.2.9 移除文件
要从Git中移除某个文件,需要把它先从已跟踪文件列表中移除(确切的说,是从暂存区中移除),然后再提交。下面的命令会帮你完成这些操作,另外该命令还会把文件从工作目录中移除,这样下一次你就不会在未跟踪文件列表中看到这些文件了。
git rm <files>
如果你更改了某个文件,并已经把它加入到索引当中(已暂存),要想让Git移除它就必须使用-f选项强制移除。这是为了防止没有被记录到快照中的数据被意外移除而设立的安全特性,因为这样的数据被意外移除后无法由Git恢复。
如果你想把文件保留在工作目录,但从暂存区中移除该文件。只需使用下面的命令:
git rm --cached README
git rm log/\*.log
改命令会移除log目录下所有拓展名为.log的文件。
2.2.10 移动文件
重命名:
git mv file_from file-to
2.3 查看提交历史
查看完整历史记录:
git log
显示每次提交所引入的差异:
git log -p
查看每个提交的简要统计信息:
git log --stat
更改日志输出的默认格式,每一行显示一个提交:
git log --pretty=oneline
指定自己的输出格式:
git log --pretty=format:"%h - %an, %ar : %s"
常用的格式占位符写法及其代表的意义:
%H提交对象(commit)的散列值(校验和)
%h提交对象的简短散列值
%T树对象(tree)的散列值
%t树对象的简短散列值
%P父对象(parent)的完整散列值
%p父对象的简短散列值
%an 作者(author)的名字
%ae作者的电子邮件地址
%ad作者修订日期(可以用 -date= 选项定制格式)
%ar作者修订日期,按多久以前的方式显示
%cn提交者(committer)的名字
%ce提交者的电子邮件地址
%cd提交日期
%cr提交日期,按多久以前的方式显示
%s 提交说明
一些其他常用的选项及其释义:
-p 按补丁格式显示每个更新之间的差异。
--stat 显示每次更新的文件修改统计信息。
--shortstat 只显示 --stat 中最后的行数修改添加移除统计。
--name-only 仅在提交信息后显示已修改的文件清单。
--name-status 显示新增、修改、删除的文件清单。
--abbrev-commit 仅显示 SHA-1 的前几个字符,而非所有的 40 个字符。
--relative-date 使用较短的相对时间显示(比如,“2 weeks ago”)。
--graph 显示 ASCII 图形表示的分支合并历史。
--pretty 使用其他格式显示历史提交信息。可用的选项包括 oneline,short,full,fuller 和 format(后跟指定格式)。
限制提交历史的输出范围
下面的命令列出所有最近两周内的提交:
git log --since=2.weeks
你可以给出各种时间格式,比如说具体的某一天(“2008-01-15”),或者是多久以前(“2 years 1 day 3 minutes ago”)。
还可以给出若干搜索条件,列出符合的提交。用 --author 选项显示指定作者的提交,用 --grep 选项搜索提交说明中的关键字。(请注意,如果要得到同时满足这两个选项搜索条件的提交,就必须用--all-match 选项。)
-(n) 仅显示最近的 n 条提交
--since, --after 仅显示指定时间之后的提交。
--until, --before 仅显示指定时间之前的提交。
--author 仅显示指定作者相关的提交。
--committer 仅显示指定提交者相关的提交。
--grep 仅输出提交信息包含指定字符串的提交
-S 仅输出包含”添加或删除指定字符串“的更改的提交
2.4 撤销操作
如果你提交后才意识到忘记了添加之前某个更改过的文件,可以执行类似下面的操作:
git commit -m ‘initial commit’
git add forgotten_file
git commit --amend
2.4.1 撤销已暂存的文件
把文件移出暂存区:
git reset HEAD CONTRIBUTING.md
2.4.2 撤销对文件的修改
git checkout -- CONTRIBUTING.md
任何对文件做出的修改都会丢失,因为上述命令用之前版本的文件做了覆盖。除非你确认不需要这些文件,否则不要用这个命令。
网友评论