标签:文件 版本控制 允许 回顾 依赖 round neu +++ size
安装:
检测是否安装(未安装会提示如何安装):
lcg@linux:~$ git
程序“git”尚未安装。 您可以使用以下命令安装:
sudo apt install git
安装:
lcg@linux:~$ sudo apt install git
[sudo] lcg 的密码:
正在读取软件包列表... 完成
正在分析软件包的依赖关系树
正在读取状态信息... 完成
.......
如果你碰巧用Debian或Ubuntu Linux,通过一条sudo apt-get install git
就可以直接完成Git的安装。
如果已经安装了git:
lcg@linux:~$ git
usage: git [--version] [--help] [-C <path>] [-c name=value]
[--exec-path[=<path>]] [--html-path] [--man-path] [--info-path]
[-p | --paginate | --no-pager] [--no-replace-objects] [--bare]
[--git-dir=<path>] [--work-tree=<path>] [--namespace=<name>]
<command> [<args>]
这些是各种场合常见的 Git 命令:
开始一个工作区(参见:git help tutorial)
clone 克隆一个仓库到一个新目录
init 创建一个空的 Git 仓库或重新初始化一个已存在的仓库
在当前变更上工作(参见:git help everyday)
add 添加文件内容至索引
mv 移动或重命名一个文件、目录或符号链接
reset 重置当前 HEAD 到指定状态
rm 从工作区和索引中删除文件
检查历史和状态(参见:git help revisions)
bisect 通过二分查找定位引入 bug 的提交
grep 输出和模式匹配的行
log 显示提交日志
show 显示各种类型的对象
status 显示工作区状态
扩展、标记和调校您的历史记录
branch 列出、创建或删除分支
checkout 切换分支或恢复工作区文件
commit 记录变更到仓库
diff 显示提交之间、提交和工作区之间等的差异
merge 合并两个或更多开发历史
rebase 本地提交转移至更新后的上游分支中
tag 创建、列出、删除或校验一个 GPG 签名的标签对象
协同(参见:git help workflows)
fetch 从另外一个仓库下载对象和引用
pull 获取并整合另外的仓库或一个本地分支
push 更新远程引用和相关的对象
命令 ‘git help -a‘ 和 ‘git help -g‘ 显示可用的子命令和一些概念帮助。
查看 ‘git help <命令>‘ 或 ‘git help <概念>‘ 以获取给定子命令或概念的
帮助。
创建版本库:
lcg@linux:~$ mkdir learngit
lcg@linux:~$ cd learngit
lcg@linux:~/learngit$ pwd
/home/lcg/learngit
lcg@linux:~/learngit$ git init
初始化空的 Git 仓库于 /home/lcg/learngit/.git/
首先,选择一个合适的地方,创建一个空目录,第二步,通过git init
命令把这个目录变成Git可以管理的仓库,瞬间Git就把仓库建好了,而且告诉你是一个空的仓库(empty Git repository),细心的读者可以发现当前目录下多了一个.git
的目录,这个目录是Git来跟踪管理版本库的,没事千万不要手动修改这个目录里面的文件,不然改乱了,就把Git仓库给破坏了。如果你没有看到.git
目录,那是因为这个目录默认是隐藏的,用ls -ah
命令就可以看见。
lcg@linux:~/learngit$ ls
lcg@linux:~/learngit$ ls -ah
. .. .git
lcg@linux:~/learngit$
现在我们编写一个readme.txt
文件,内容如下:
Git is a version control system.
Git is free software.
一定要放到learngit
目录下(子目录也行),因为这是一个Git仓库,放到其他地方Git再厉害也找不到这个文件。
第一步,用命令git add
告诉Git,把文件添加到仓库,第二步,用命令git commit
告诉Git,把文件提交到仓库:
lcg@linux:~/learngit$ vi readme.txt
lcg@linux:~/learngit$ git add readme.txt
lcg@linux:~/learngit$ git commit -m "wrote a readme file"
*** Please tell me who you are.
Run
git config --global user.email "you@example.com"
git config --global user.name "Your Name"
to set your account‘s default identity.
Omit --global to set the identity only in this repository.
fatal: unable to auto-detect email address (got ‘lcg@linux.(none)‘)
lcg@linux:~/learngit$ git config --global user.email "lcgsmile@qq.com"
lcg@linux:~/learngit$ git config --global user.name "lichengguang"
lcg@linux:~/learngit$ git commit -m "wrote a readme file"
[master (根提交) fe7455f] wrote a readme file
1 file changed, 2 insertions(+)
create mode 100644 readme.txt
我们已经成功地添加并提交了一个readme.txt文件,现在,是时候继续工作了,于是,我们继续修改readme.txt文件,改成如下内容:
Git is a distributed version control system.
Git is free software.
现在,运行git status
命令看看结果:
lcg@linux:~/learngit$ vi readme.txt
lcg@linux:~/learngit$ git status
位于分支 master
尚未暂存以备提交的变更:
(使用 "git add <文件>..." 更新要提交的内容)
(使用 "git checkout -- <文件>..." 丢弃工作区的改动)
修改: readme.txt
修改尚未加入提交(使用 "git add" 和/或 "git commit -a")
git status
命令可以让我们时刻掌握仓库当前的状态,上面的命令告诉我们,readme.txt被修改过了,但还没有准备提交的修改。
虽然Git告诉我们readme.txt被修改了,但如果能看看具体修改了什么内容,自然是很好的。比如你休假两周从国外回来,第一天上班时,已经记不清上次怎么修改的readme.txt,所以,需要用git diff
这个命令看看:
lcg@linux:~/learngit$ git diff
diff --git a/readme.txt b/readme.txt
index f7249b8..9247db6 100644
--- a/readme.txt
+++ b/readme.txt
@@ -1,2 +1,2 @@
-Git is a version control system
-Git is free software
+Git is a distributed version control system.
+Git is free software.
git diff
顾名思义就是查看difference,显示的格式正是Unix通用的diff格式,可以从上面的命令输出看到,我们在第一行添加了一个“distributed”单词。
知道了对readme.txt作了什么修改后,再把它提交到仓库就放心多了,提交修改和提交新文件是一样的两步,第一步是git add
:第二步是:git commit -m "add distributed"
lcg@linux:~/learngit$ git add readme.txt
lcg@linux:~/learngit$ git status
位于分支 master
要提交的变更:
(使用 "git reset HEAD <文件>..." 以取消暂存)
修改: readme.txt
lcg@linux:~/learngit$ git commit -m "add distributed"
[master 22f5df6] add distributed
1 file changed, 2 insertions(+), 2 deletions(-)
lcg@linux:~/learngit$ git status
位于分支 master
无文件要提交,干净的工作区
版本回退
现在,你已经学会了修改文件,然后把修改提交到Git版本库,现在,再练习一次,修改readme.txt文件如下:
Git is a distributed version control system.
Git is free software distributed under the GPL.
如下:
lcg@linux:~/learngit$ vi readme.txt
lcg@linux:~/learngit$ git add readme.txt
lcg@linux:~/learngit$ git commit -m "append GPL"
[master 978892e] append GPL
1 file changed, 1 insertion(+), 1 deletion(-)
历史记录:
现在,你已经学会了修改文件,然后把修改提交到Git版本库,现在,再练习一次,修改readme.txt文件如下:
Git is a distributed version control system.
Git is free software distributed under the GPL.
然后尝试提交:
$ git add readme.txt
$ git commit -m "append GPL"
[master 3628164] append GPL
1 file changed, 1 insertion(+), 1 deletion(-)
像这样,你不断对文件进行修改,然后不断提交修改到版本库里,就好比玩RPG游戏时,每通过一关就会自动把游戏状态存盘,如果某一关没过去,你还可以选择读取前一关的状态。有些时候,在打Boss之前,你会手动存盘,以便万一打Boss失败了,可以从最近的地方重新开始。Git也是一样,每当你觉得文件修改到一定程度的时候,就可以“保存一个快照”,这个快照在Git中被称为commit
。一旦你把文件改乱了,或者误删了文件,还可以从最近的一个commit
恢复,然后继续工作,而不是把几个月的工作成果全部丢失。
现在,我们回顾一下readme.txt文件一共有几个版本被提交到Git仓库里了:
版本1:wrote a readme file
Git is a version control system.
Git is free software.
版本2:add distributed
Git is a distributed version control system.
Git is free software.
版本3:append GPL
Git is a distributed version control system.
Git is free software distributed under the GPL.
当然了,在实际工作中,我们脑子里怎么可能记得一个几千行的文件每次都改了什么内容,不然要版本控制系统干什么。版本控制系统肯定有某个命令可以告诉我们历史记录,在Git中,我们用git log
命令查看:
$ git log
commit 3628164fb26d48395383f8f31179f24e0882e1e0
Author: Michael Liao <askxuefeng@gmail.com>
Date: Tue Aug 20 15:11:49 2013 +0800
append GPL
commit ea34578d5496d7dd233c827ed32a8cd576c5ee85
Author: Michael Liao <askxuefeng@gmail.com>
Date: Tue Aug 20 14:53:12 2013 +0800
add distributed
commit cb926e7ea50ad11b8f9e909c05226233bf755030
Author: Michael Liao <askxuefeng@gmail.com>
Date: Mon Aug 19 17:51:55 2013 +0800
wrote a readme file
git log
命令显示从最近到最远的提交日志
lcg@linux:~/learngit$ git log
commit 978892e04342f3edd7e7a86c81e46812f382c107
Author: lichengguang <lcgsmile@qq.com>
Date: Tue Sep 5 15:06:59 2017 +0800
append GPL
commit 22f5df645950d829cfefff7f3027efe169be5bbf
Author: lichengguang <lcgsmile@qq.com>
Date: Tue Sep 5 14:24:37 2017 +0800
add distributed
commit fe7455f6d1c80766e9cc872d46f263603dea75d3
Author: lichengguang <lcgsmile@qq.com>
Date: Tue Sep 5 14:09:47 2017 +0800
wrote a readme file
你看到的一大串类似3628164...882e1e0
的是commit id
(版本号),和SVN不一样,Git的commit id
不是1,2,3……递增的数字,而是一个SHA1计算出来的一个非常大的数字,用十六进制表示。
版本退回与恢复:
lcg@linux:~/learngit$ git reset --hard HEAD^
HEAD 现在位于 22f5df6 add distributed
lcg@linux:~/learngit$ cat readme.txt
Git is a distributed version control system.
Git is free software.
lcg@linux:~/learngit$ git log
commit 22f5df645950d829cfefff7f3027efe169be5bbf
Author: lichengguang <lcgsmile@qq.com>
Date: Tue Sep 5 14:24:37 2017 +0800
add distributed
commit fe7455f6d1c80766e9cc872d46f263603dea75d3
Author: lichengguang <lcgsmile@qq.com>
Date: Tue Sep 5 14:09:47 2017 +0800
wrote a readme file
lcg@linux:~/learngit$ git reset --hard 978892e04342f3edd7e7a86c81e46812f382c107
HEAD 现在位于 978892e append GPL
lcg@linux:~/learngit$ cat readme.txt
Git is a distributed version control system.
Git is free software distributed under the GPL.
-
HEAD
指向的版本就是当前版本,因此,Git允许我们在版本的历史之间穿梭,使用命令git reset --hard commit_id
。
-
穿梭前,用git log
可以查看提交历史,以便确定要回退到哪个版本。
-
要重返未来,用git reflog
查看命令历史,以便确定要回到未来的哪个版本
版本回退
阅读: 1211066
现在,你已经学会了修改文件,然后把修改提交到Git版本库,现在,再练习一次,修改readme.txt文件如下:
Git is a distributed version control system.
Git is free software distributed under the GPL.
然后尝试提交:
$ git add readme.txt
$ git commit -m "append GPL"
[master 3628164] append GPL
1 file changed, 1 insertion(+), 1 deletion(-)
像这样,你不断对文件进行修改,然后不断提交修改到版本库里,就好比玩RPG游戏时,每通过一关就会自动把游戏状态存盘,如果某一关没过去,你还可以选择读取前一关的状态。有些时候,在打Boss之前,你会手动存盘,以便万一打Boss失败了,可以从最近的地方重新开始。Git也是一样,每当你觉得文件修改到一定程度的时候,就可以“保存一个快照”,这个快照在Git中被称为commit
。一旦你把文件改乱了,或者误删了文件,还可以从最近的一个commit
恢复,然后继续工作,而不是把几个月的工作成果全部丢失。
现在,我们回顾一下readme.txt文件一共有几个版本被提交到Git仓库里了:
版本1:wrote a readme file
Git is a version control system.
Git is free software.
版本2:add distributed
Git is a distributed version control system.
Git is free software.
版本3:append GPL
Git is a distributed version control system.
Git is free software distributed under the GPL.
当然了,在实际工作中,我们脑子里怎么可能记得一个几千行的文件每次都改了什么内容,不然要版本控制系统干什么。版本控制系统肯定有某个命令可以告诉我们历史记录,在Git中,我们用git log
命令查看:
$ git log
commit 3628164fb26d48395383f8f31179f24e0882e1e0
Author: Michael Liao <askxuefeng@gmail.com>
Date: Tue Aug 20 15:11:49 2013 +0800
append GPL
commit ea34578d5496d7dd233c827ed32a8cd576c5ee85
Author: Michael Liao <askxuefeng@gmail.com>
Date: Tue Aug 20 14:53:12 2013 +0800
add distributed
commit cb926e7ea50ad11b8f9e909c05226233bf755030
Author: Michael Liao <askxuefeng@gmail.com>
Date: Mon Aug 19 17:51:55 2013 +0800
wrote a readme file
git log
命令显示从最近到最远的提交日志
git笔记
标签:文件 版本控制 允许 回顾 依赖 round neu +++ size
原文地址:http://www.cnblogs.com/lcgsmile/p/7478500.html