Git
Git 版本控制系统
优点:
更好的备份,更好的回溯,更好的团队协作
每一次提取都相当于完整备份一次代码库
本地执行,速度快,段网的时候不受影响
文档详细,命令行的提示明确,轻量级
缺点:
每个开发人员都拥有所有代码,不利于核心代码的保密
组成:
工作区:存放git版本仓库的目录就是工作区
版本库:工作区有个隐藏目录.git,是git的版本库
暂存区:最重要的是stage(或者index)的暂存区
添加修改到暂存区:
git add 文件名 或者 git add *
版本日志:
git log
显示分支:
git log --graph
创建本地库:
mkdir gittest
cd gittest/
git init //初始化版本库
ls -a //查看库目录
. .. .git
随便创建一个测试文件 readme.txt
Git is a version control system.
Git is free software.
git add readme.txt //建立跟踪
git status //查看状态
git rm -cached readme.txt //可以删除文件跟踪 ,但不可以退回,建议使用撤销修改
git commit -m "test" //提交文件到仓库分支
-m 本次提交的说明
[master(根提交) addd750] test
1 file changed, 2 insertions(+)
create mode 100644 readme.txt
git status //查看git状态:
# 位于分支 master
无文件要提交,干净的工作区
echo hello >> readme.txt //修改文件后再次查看状态:
# 位于分支 master
# 尚未暂存以备提交的变更:
# (使用 "git add ..." 更新要提交的内容)
# (使用 "git checkout -- ..." 丢弃工作区的改动)
#
#修改: readme.txt
#
修改尚未加入提交(使用 "git add" 和/或 "git commit -a")
git diff //查看修改了什么内容
[root@vm20 gittest]# git diff
diff --git a/readme.txt b/readme.txt
index 795d143..57083df 100644
--- a/readme.txt
+++ b/readme.txt
@@ -1,2 +1,3 @@
Git is a version control system.
Git is free software.
+hello
再次提交可以先add再commit,也可以使用-a和commit一起:
[root@vm20 gittest]# git commit -a -m "添加hello一行"
[master 7e99d94] 添加hello一行
1 file changed, 1 insertion(+)
[root@vm20 gittest]# git status
# 位于分支 master
无文件要提交,干净的工作区
撤销修改:
[root@vm20 gittest]# git checkout -- a.txt
版本回退:
git log // 查看现在的版本
[root@ansible gittest]# git log
commit 898a61cb50da77daeda51453bef38c98fecd46a0
Author: Alex
Date:Sun Feb 25 18:04:27 2017+0800
test1
commit d75411fb17e661cefc1900a09c8a784e8aa0d79a
Author: Alex
Date:Sun Feb 25 17:56:45 2017+0800
test1
git reset --hard HEAD^ // 回到上一个版本
git reset --hard 6fe5b9a2 // 回到指定版本(根据版本号)
git reflog //可以查看消失的版本ID,用于退回到消失的版本
[root@vm20 gittest]# git reflog
32c31f5 HEAD@{0}: reset: moving to 32c31f54c1
6fe5b9a HEAD@{1}: reset: moving to 6fe5b9a2
928ab9e HEAD@{2}: reset: moving to HEAD^^
83f6e8d HEAD@{3}: reset: moving to HEAD^
6fe5b9a HEAD@{5}: commit: 这个能写中文
删除文件:
从工作区删除a.txt,并且从版本库一起删除
[root@vm20 gittest]# rm -rf a.txt
[root@vm20 gittest]# git status
# 位于分支 master
# 尚未暂存以备提交的变更:
# (使用 "git add/rm ..." 更新要提交的内容)
# (使用 "git checkout -- ..." 丢弃工作区的改动)
#
#删除: a.txt
#
修改尚未加入提交(使用 "git add" 和/或 "git commit -a")
[root@vm20 gittest]# git rm a.txt
rm 'a.txt'
[root@vm20 gittest]# git commit -m "删除文件a.txt"
[master 4bb90a4] 删除文件a.txt
1 file changed, 4 deletions(-)
delete mode 100644 a.txt
[root@vm20 gittest]# git status
# 位于分支 master
无文件要提交,干净的工作区
删除了文件readme.txt之后又后悔了,恢复回来
[root@vm20 gittest]# ls
readme.txt
[root@vm20 gittest]# rm -rf readme.txt
[root@vm20 gittest]# git checkout -- readme.txt
[root@vm20 gittest]# ls
readme.txt
替换本地改动:
假如你想要丢弃你所有的本地改动与提交,可以到服务器上获取最新的版本并将你本地主分支指向到它:
[root@ansible gittest]# vim a.txt
[root@ansible gittest]# git fetch origin
[root@ansible gittest]# git reset --hard origin/master
HEAD 现在位于 5b83380 hello