1.安装git
安装最新版本
#add-apt-repository ppa:git-core/ppa
#apt-get update
#apt-get install git
# git --version
git version 2.16.1已经2018年最新的了
安装完后配置姓名和邮箱
# git config --global user.name "xxx"
# git config --global user.email "xxx.xx"
2.创建版本库repository
# git init
已初始化空的 Git 仓库于 /home/xx/github/test/.git/
3.向仓库添加文件
# git add readme.txt
# git commit -m "add a readme file" //commit可以一次提交多个文件
4.查看仓库的状态
# git status
# 位于分支 master
# 尚未暂存以备提交的变更:
# (使用 "git add <文件>..." 更新要提交的内容)
# (使用 "git checkout -- <文件>..." 丢弃工作区的改动)
#
# 修改: readme.txt
如果文件被修改可以通过git diff查看被修改的内容
# git diff readme.txt
diff --git a/readme.txt b/readme.txt
index 2ed92d3..8d64031 100644
--- a/readme.txt
+++ b/readme.txt
@@ -1 +1,2 @@
This is a test git
+I like git
5.查看提交日志
# git log
commit d348a228ea9ecc20f7a19a72786b586aaf3b40c8 (HEAD -> master)
Date: Thu Feb 1 14:21:31 2018 +0800
add name
commit cb710a78ba786020ba5a67e1df2f09064e6a1846
Date: Thu Feb 1 14:19:25 2018 +0800
add my idea
commit 5abfd56c4af0b1c4beeeb501e58d44e774548dcd
Date: Thu Feb 1 14:12:35 2018 +0800
add a readme file
通过git show commit id可以查看版本修改的内容
# git show d348a228ea9ecc20f7a19a72786b586aaf3b40c8
在git中用HEAD表示当前版本HEAD^表示上一个版本
6.版本回退
# git reset --hard HEAD
HEAD 现在位于 d348a22 add name
# git reset --hard HEAD^
HEAD 现在位于 cb710a7 add my idea
# git reset --hard HEAD^
HEAD 现在位于 5abfd56 add a readme file
如果连续执行两次则回到最初的版本了
HEAD 现在位于 5abfd56 add a readme file
现在想回到add name的那个版本
git reset --hard d348a22
现在又回来了,又回到最新的变化了
# git reflog
记录了每一次commit id的变更
#git reset --hard commit_id 可以在所有的版本之间穿梭
7.git checkout
使用 “git checkout – <文件>…” 丢弃工作区的改动
回到最近一次git commit或者git add时的状态
8.删除文件
如果是用rm删除了文件想恢复用git checkout 即可
想真的删除git add /git commit
但是还可以通过# git reset --hard id回去
以可以通过# git rm test.txt删除test.txt
git rm test.txt
git commit -m ""
以可以通过# git rm test.txt删除test.txt
9.远程仓库
git是分布式版本控制系统,如果有一台机器有一个原始版本,别的机器可以“克隆”这个原始版本,没有主次之分
在服务器上创建一个空的仓库,有两种方式使用
一:从这个仓库克隆出新的仓库
git clone https://github.com/xxxx/Test.git
二:把一个已有的本地仓库与之关联,把本地仓库的内容推送到服务器仓库
在本地的仓库运行:关联一个远程库
# git remote add origin git@github.com:xxxshui/Test.git
已可以输入git remote add origin https://仓库的url地址 只是git@比https要快
如果出现fatal:remote origin already exists则执行git remote rm origin
把本地库所有的内容推送到远程上
# git push -u origin master //第一次推送master分支的所有内容
出现
Permission denied (publickey).
fatal: 无法读取远程仓库。
由于本地git仓库和github仓库之间的传输是通过ssh加密的,所以需要设置
创建ssh key
# ssh-keygen -t rsa -C "xxx@126.com"
生成:/root/.ssh/id_rsa id_rsa.pub
在github上打开Account settings SSH keys页面
在SSH keys Add new 里面填写任意title和刚生成的id_rsa.pub
然后再次执行
git push -u origin master
出现:! [rejected] master -> master (non-fast-forward)
是因为github上的Readme.md文件不在本地仓库中
fix:
# git pull --rebase origin master
# git push -u origin master
push 成功
以后修改或增加内容之后直接git push即可
10.分支管理
分支用于多人协同开发,自已的模块不影响别人的开发,自已也可以每天提交
进度到自已的分支,开发完后,一次性合并到原来的分支上,安全且不影响别人工作
1)创建分支
git默认有一个主分支叫master分支,HEAD指向master,而master指向提交,HEAD
指向当前分支
# git checkout -b bshui
切换到一个新分支 'bshui'
查看当前分支,当前分支前面会标一个*号
# git branch
* bshui
master
当切换到bshui分支后我们就可以对仓库里的内容进行修改了
# git reflog
253a4ea (HEAD -> bshui) HEAD@{0}: commit: add telephone
f0de74e (origin/master, master) HEAD@{1}: checkout: moving from master to bshui
HEAD指针指向了bshui分支
切回主分支:# git checkout master
当在bshui分支上增加或修改的文件不会出现在master分支上
2)合并分支
把bshui分支的工作成果合并到master分支上
# git merge bshui
更新 f0de74e..aade24f
Fast-forward
a.txt | 1 +
readme.txt | 1 +
2 files changed, 2 insertions(+)
create mode 100644 a.txt
合并后就可以把bshui分支给删掉
# git branch -d bshui
已删除分支 bshui(曾为 aade24f)。
-------------------------------
查看分支:git branch
创建分支:git branch <name>
切换分支:git checkout <name>
创建+切换分支:git checkout -b <name>
合并某分支到当前分支:git merge <name>
删除分支:git branch -d <name>
-------------------------------
3)冲突解决
当master分支和bshui分支都修改了同一个文件readme.txt并且都有提交修改
在合并的时候会出现冲突
# git merge bshui
自动合并 readme.txt
冲突(内容):合并冲突于 readme.txt
自动合并失败,修正冲突然后提交修正的结果。
我们查看readme.txt的内容
# cat readme.txt
This is a test git
I like git
My name is DaemonShui
my telephone is 135xxxxx
<<<<<<< HEAD
haoao
=======
hello
>>>>>>> bshui
手动修改后再次提交就合并完成了
git add readme.txt
git commit -m "dd"
git log --graph可以查看分支合并图
注意:在合并分支时,用--no-ff参数,表示禁用fast forward
默认的合并是用fast forward模式,这样就看不出来合并的踪迹
git merge --no-ff -m "merge with no-ff" bshui 有提次参数
master分支是非常稳定的,用来发布新版本
平时在dev分支上做事,不稳定,当称定后合并到master分支发布新版本
4)多人协作开发
查看远程库信息,使用git remote -v 会显示可fetch,push的路径
origin https://github.com/Kylinshui/test.git (fetch)
origin https://github.com/Kylinshui/test.git (push)
从本地推送分支,使用git push origin branch-name,
如果推送失败,先用git pull抓取远程的新提交;
在本地创建和远程分支对应的分支,使用git checkout -b branch-name origin/branch-name,本地和远程分支的名称最好一致
建立本地分支和远程分支的关联,使用git branch –set-upstream branch-name origin/branch-name
从远程抓取分支,使用git pull,如果有冲突,要先处理冲突
11.标签管理
发布一个版本时,我们通常先在版本库中打一个标签(tag),这样,就唯一确定了打标签时刻的版本
tag就是一个让人容易记住的有意义的名字,它跟某个commit绑在一起
1)创建标签
在需要打标签的分支上
git tag v1.0就打上了一个标签
查看所有的标签
git tag
v1.0
2)删除标签
如果标签打错了可以删除
git tag -d v1.0
3)推送标签到远程
git push origin v1.0
参考:
https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000