git是分布式版本控制系统,svn是集中式版本管理系统
环境:centos7
ip:192.168.1.10
一、编译安装git
[root@wuchen ~]# yum install -y epel-release
[root@wuchen ~]# yum install -y curl-devel expat-devel gettext-devel openssl-devel zlib-devel gcc perl-ExtUtils-MakeMaker
git源网址:https://github.com/git/git
[root@wuchen ~]# yum -y install wget
[root@wuchen ~]# wget https://codeload.github.com/git/git/zip/master
[root@wuchen ~]# yum -y install unzip
[root@wuchen ~]# unzip master
[root@wuchen ~]# cd git-master/
[root@wuchen git-master]# make prefix=/usr/local/git all
[root@wuchen git-master]# make prefix=/usr/local/git install
[root@wuchen git-master]# rm -rf /usr/bin/git
[root@wuchen git-master]# ln -s /usr/local/git/bin/git /usr/bin/git
[root@wuchen git-master]# git --version
git version 2.16.0-rc2
二、初始化仓库
[root@wuchen ~]# mkdir house
[root@wuchen ~]# cd house/
[root@wuchen house]# git init
Initialized empty Git repository in /root/house/.git/ #将house初始化仓库
每次 Git 提交时都会引用这两条信息,说明是谁提交了更新,所以会随更新内容一起被永久纳入历史记录
[root@wuchen house]# git config --global user.email "1156858764@qq.com" #邮箱
[root@wuchen house]# git config --global user.name "wuchen" #个人用户
三、常用操作
git add 加入暂存
git status 查看状态
git status -s 状态概览
git diff 尚未暂存的文件
git diff --staged 暂存区文件
git commit 提交更新
git reset 回滚
git rm 从版本库中移除
git rm --cached README 从暂存区中移除
git mv 相当于mv git rm git add 三个命令
添加文件:
[root@wuchen house]# echo "hello" > test
[root@wuchen house]# git status
On branch master
No commits yet
Untracked files:
(use "git add <file>..." to include in what will be committed)
test
nothing added to commit but untracked files present (use "git add" to track) #使用git add添加文件
[root@wuchen house]# git add test #加入代码库
[root@wuchen house]# git status #现在处于暂存区
On branch master
No commits yet
Changes to be committed:
(use "git rm --cached <file>..." to unstage)
new file: test
#git commit命令,-m后面输入的是本次提交的说明,可以输入任意内容,当然最好是有意义的,这样你就能从历史记录里方便地找到改动记录。
[root@wuchen house]# git commit -m "first commit" #提交到本地仓库
[master (root-commit) f6bb8af] first commit
1 file changed, 1 insertion(+) #一个文件更改
create mode 100644 test
[root@wuchen house]# git status
On branch master
nothing to commit, working tree clean
[root@wuchen house]# git log
commit f6bb8af0789ef5bcff16d3024ce7326afec58d4d (HEAD -> master) #回滚需要的ID
Author: wuchen <1156858764@qq.com>
Date: Fri Jan 12 16:01:07 2018 +0800
first commit
[root@wuchen house]# echo "666666" >> test
[root@wuchen house]# cat test
hello
666666
[root@wuchen house]# git status
On branch master
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: test
no changes added to commit (use "git add" and/or "git commit -a")
[root@wuchen house]# git add test
[root@wuchen house]# git status
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
modified: test
[root@wuchen house]# git commit -m "add 666666"
[master ee2fc42] add 666666
1 file changed, 1 insertion(+)
[root@wuchen house]# git log
commit ee2fc4293a6f716bfb4c1545246a57e6ee6aacf5 (HEAD -> master)
Author: wuchen <1156858764@qq.com>
Date: Fri Jan 12 16:39:30 2018 +0800
add 666666
commit f6bb8af0789ef5bcff16d3024ce7326afec58d4d
Author: wuchen <1156858764@qq.com>
Date: Fri Jan 12 16:01:07 2018 +0800
first commit
版本回退:
git log命令显示从最近到最远的提交日志,我们可以看到3次提交,最近的一次是append GPL
,上一次是add distributed
,最早的一次是wrote a readme file
。
如果嫌输出信息太多,看得眼花缭乱的,可以试试加上--pretty=oneline
参数:
[root@wuchen house]# git log --pretty=oneline
ee2fc4293a6f716bfb4c1545246a57e6ee6aacf5 (HEAD -> master) add 666666
f6bb8af0789ef5bcff16d3024ce7326afec58d4d first commit
Git必须知道当前版本是哪个版本,在Git中,用HEAD
表示当前版本,也就是最新的提交3628164...882e1e0
(注意我的提交ID和你的肯定不一样),上一个版本就是HEAD^
,上上一个版本就是HEAD^^
,当然往上100个版本写100个^
比较容易数不过来,所以写成HEAD~100
。
[root@wuchen house]# git reset --hard HEAD^
HEAD is now at f6bb8af first commit
[root@wuchen house]# cat test
hello
[root@wuchen house]# git log
commit f6bb8af0789ef5bcff16d3024ce7326afec58d4d (HEAD -> master)
Author: wuchen <1156858764@qq.com>
Date: Fri Jan 12 16:01:07 2018 +0800
first commit
删除文件:
[root@wuchen house]# rm -rf test
[root@wuchen house]# git status
On branch master
Changes not staged for commit:
(use "git add/rm <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
deleted: test
no changes added to commit (use "git add" and/or "git commit -a")
现在你有两个选择,一是确实要从版本库中删除该文件,那就用命令git rm删掉,并且git commit:
另一种情况是删错了,因为版本库里还有呢,所以可以很轻松地把误删的文件恢复到最新版本:
[root@wuchen house]# git checkout -- test
[root@wuchen house]# ls
test
[root@wuchen house]# git status
On branch master
nothing to commit, working tree clean
分支管理:
查看分支:git branch
创建分支:git branch <name>
切换分支:git checkout <name>
创建+切换分支:git checkout -b <name>
合并某分支到当前分支:git merge <name>
删除分支:git branch -d <name>
[root@wuchen house]# git checkout -b dev #创建分支dev并且切换到分支相当于下面
or
#git branch dev
#git checkout dev
[root@wuchen house]# git branch #查看分支
* dev
master
[root@wuchen house]# git status
On branch dev #目前所在分支
nothing to commit, working tree clean
[root@wuchen house]# echo "dasdas" >> test
[root@wuchen house]# git add test
[root@wuchen house]# git commit -m "branch test"
[dev 7b31162] branch test
1 file changed, 1 insertion(+)
[root@wuchen house]# git checkout master #切换到主干
Switched to branch 'master'
[root@wuchen house]# cat test #你会发现刚才添加的文件并没有添加上,因为是在dev分支添加的
hello
PS1='\[\e[37;40m\][\[\e[32;40m\]\u\[\e[37;40m\]@\h \t \[\e[35;40m\]\W\[\e[0m\]]\$ '
dasdad
1213123
dsadad
13213123
04-23094023420
[root@wuchen house]# git merge dev #合并分支
Updating e1b2eb3..7b31162
Fast-forward
test | 1 +
1 file changed, 1 insertion(+)
[root@wuchen house]# cat test
hello
PS1='\[\e[37;40m\][\[\e[32;40m\]\u\[\e[37;40m\]@\h \t \[\e[35;40m\]\W\[\e[0m\]]\$ '
dasdad
1213123
dsadad
13213123
04-23094023420
dasdas
[root@wuchen house]# git branch -d dev #事情做完了,就可以删除分支了
Deleted branch dev (was 7b31162).
[root@wuchen house]# git branch
* master