Git 在Centos下的安装
yum install git
git --version # 查看版本号
安装完成后请设置您的用户名及邮箱,因为对于git来说,需要知道是谁提交的代码等。
git config --global user.name "liangh" # 设置全局用户名
git config --global user.email "liangh.zhu@gmail.com" # 设置用户邮箱
这里设置的全局的用户名及邮箱,也就是说对于所有的版本都使用这个,你也可以根据不同的版本库设置不同的用户名及邮箱。这里不多说
Git 初始化及简单操作
上面设置完成后,就可以创建一个版本库(repository)了,先创建一个目录
mkdir GitStudy # 创建目录
cd GitStudy # 切换到此目录下
git init # 初始化版本库
touch readme.md # 创建一个文件
然后在文件中写入
git is a version control system.
git is free software.
下面将readme.md文件加入到版本中
git add readme.md
使用命令git commit 告诉git,把文件提交到仓库
git commit -m "add a readme file"
git commit命令,-m后台输入本次提交的说明,可以输入任意内容,这个说明最好写好。这样方便后面人知道你做了哪些改动
也可以使用git add同时添加多个文件
git add file1.txt
git add file2.txt
git add common/*
git commit -m "add more files"
小结
总结一下今天学习的内容
初始化一个Git仓库,使用git init命令
添加文件到Git仓库,分两步
使用命令git add <file>, 可反复多次使用,添加多个文件
使用命令git commit,完成
接上面,我们已经成功的提交了一个readme.md的文件,现在我们因为需要对remdme.md文件做修改,修改内容如下:
Git is a distributed version control system.
Git is free softwar.
在修改成功后,我们想知道目前版本库中是什么样一个状态,就可以使用git status来查看。
# git status
# On branch master
# Changed but not updated:
# (use "git add <file>..." to update what will be committed) # 使用 git add 将文件提交到版本库
# (use "git checkout -- <file>..." to discard changes in working directory) # 使用 git checkout 丢弃文件
#
# modified: readme.md # 修改的文件
#
no changes added to commit (use "git add" and/or "git commit -a") # 文件修改请使用 git add 提交并且使用 git commit 添加描述
可以看到 readme.md 文件被修改过了,但是还没有提交修改,这里有一个问题就是,虽然git告诉我们哪个文件修改了。如果我们忘记修改了什么而现在想要知道,就可以使用git diff命令查看修改的内容是什么
# git diff
diff --git a/readme.md b/readme.md
index 46d49bf..53d4271 100644
--- a/readme.md
+++ b/readme.md
@@ -1,2 +1,2 @@
-Git is a version control system.
+Git is a distributed version control system.
Git is free software.
然后我们提交文件
git add readme.md
这里是没有任何输出的,在执行git commit之前我们再使用git status查看一下状态
# git status
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# modified: readme.md
#
git status告诉我们已经提交了修改的文件,可以进行下一步操作
git commit -m 'modified readme file'
提交后我们可以看看目前仓库的状态
# git status
# On branch master
nothing to commit (working directory clean) # 目前没有提交,并且工作目录是干净的
小结
要随时掌握工作区的状态,使用 git status 命令查看
如果 git status 告诉我们有文件被修改过,可以使用 git diff 查看修改的内容
接上节,我们已经知道了如何修改文件并提交,现在我们再修改一次readme.md文件
Git is a distributed version control system.
Git is free software distributed under the GPL.
然后再次提交
git add readme.md
git commit -m "append GPL"
我们目前对readme.md做了三次修改,如果对于文件做了N多修改之后。我们记不住每次都修改了哪些内容。所以想要知道每次都修改的内容可以使用git log 命令来查看
# git log
commit f6a7d7a5ef23e8cf9356970721ccb96055c6801a
Author: liangh <liangh.zhu@gmail.com>
Date: Mon Jan 26 20:46:23 2015 +0800
addend GPL
commit 2000fb8ae0e7ddf26f56a5f613650ffde87a902a
Author: liangh <liangh.zhu@gmail.com>
Date: Sat Jan 24 20:21:38 2015 +0800
modified reamdme file
commit 7f48743c960819cfa7a9984c9e72d43f142f66cc
Author: liangh <liangh.zhu@gmail.com>
Date: Fri Jan 23 22:36:03 2015 +0800
write a readme file
从上面的描述我们可以看到我们都做过哪些修改。而如f6a7d7...6801a类似开头的字符串是每次提交后的版本号,git log的按从近到远的顺序显示的。如果这样显示不友好。可以使用git log --pretty=oneline来查看。
对于每提交一个版本。Git都会将它们自动串成一条从近到远的时间线,这个可以使用一些可视化的工具可以看到。
现在我们如何让readme.md(其它文件)加到上一个版本或指定的版本呢,在Git中,使用HEAD来表示当前版本,也就是最新的版本,比如我们想回到上一个版本,可以使用HEAD^,上上一个版本HEAD^^,以此类推,如果是往上100个版本,那就写100个^了,显然这样是不行的。我可以写成HEAD~30返回到30个版本,HEAD~100返回到100个版本。
具体的操作命令如下:
git reset --hard HEAD^ # 返回一个版本
以此可以回到第一个版本。然后可以使用git log查看,如果我们想返回到某一个版本呢。这里就需要使用到commit_id(版本号)了
git reset --hard f6a7d7a
这样就回到了相应的版本,如果你已经回到了readme.md的第一个版本,这时你又不记得commit_id是多少,通过git log也看不到了。可以使用git reflog查看。这样就可以随便的返回到任意一个版本了
小结
返回版本之前可以使用git log来查看历史提交版本,以便确定退到哪一个版本
要返回之前最新的版本可以使用git reflog来查看commit_id,以便确定退到哪一个版本
HEAD指向当前版本,可以使用^符号选择回到哪一个版本。命令为git reset --hard HEAD^/commit_id