#类似于删除软连接和创建软链接的过程
Git服务程序中有一个叫做HEAD的版本指针,当用户申请还原数据时,其实就是将HEAD指针指向到某个特定的提交版本,但是因为Git是分布式版本控制系统,为了避免历史记录冲突,故使用了SHA-1计算出十六进制的哈希字串来区分每个提交版本,另外默认的HEAD版本指针会指向到最近的一次提交版本记录,而上一个提交版本会叫HEAD^,上上一个版本则会叫做HEAD^^,当然一般会用HEAD~5来表示往上数第五个提交版本。
git reset --hard hash
git reset --hard HEAD^ #→还原历史提交版本上一次
git reset --hard 3de15d4 #→找到历史还原点的SHA-1值后,就可以还原(值不写全,系统会自动匹配)
测试命令
先查看日志,确定要还原版本号commit:
[root@gitlab git_data]# git log
commit a409fc46f792228a8119705e9cc97c2a013534ab
Author: kai
Date: Wed Nov 29 11:44:14 2017 +0800
test
commit bb963eb32ad93a72d9ce93e4bb55105087f1227d
Author: kai
Date: Wed Nov 29 10:57:02 2017 +0800
first commit
还原数据
[root@gitlab git_data]# git reset --hard bb963
HEAD 现在位于 bb963eb first commit
# 查看数据
[root@gitlab git_data]# ls
README 1.6.7 还原未来数据
什么是未来数据?就是你还原到历史数据了,但是你后悔了,想撤销更改,但是git log已经找不到这个版本了。
git reflog #→查看未来历史更新点
测试命令
查看未来历史更新点:
[root@gitlab git_data]# git reflog
bb963eb HEAD@{0}: reset: moving to bb963
a409fc4 HEAD@{1}: reset: moving to a409fc4
bb963eb HEAD@{2}: reset: moving to bb963
a409fc4 HEAD@{3}: commit: test
bb963eb HEAD@{4}: commit (initial): first commit
[root@gitlab git_data]#
还原未来更新点:
[root@git git_data]# git reset --hard a409fc4 1.6.8 标签使用(回滚的简便方法)
只能给当前版本打标签
前面回滚使用的是一串字符串,又长又难记。
git tag v1.0 #→当前提交内容打一个标签(方便快速回滚),每次提交都可以打个tag。
git tag #→查看当前所有的标签
git show v1.0 #→查看当前1.0版本的详细信息
git tag v1.2 -m "version 1.2> git tag -d v1.0 #→我们为同一个提交版本设置了两次标签,删除之前的v1.0
测试命令
[root@gitlab git_data]# git reset --hard 0bdf2e7
HEAD is now at 0bdf2e7 modified README file
[root@gitlab git_data]# git reset --hard V1.0
HEAD is now at a66370a add test dir
[root@gitlab git_data]# git tag v20171129 #打标签
[root@gitlab git_data]# git tag #查看标签
v20171129 1.6.9 对比数据
git diff可以对比当前文件与仓库已保存文件的区别,知道了对README作了什么修改
后,再把它提交到仓库就放⼼多了。
git diff README 1.7 分支结构
在实际的项目开发中,尽量保证master分支稳定,仅用于发布新版本,平时不要随便直接修改里面的数据文件。
那在哪干活呢?干活都在dev分支上。每个人从dev分支创建自己个人分支,开发完合并到dev分支,最后dev分支合并到master分支。所以团队的合作分支看起来会像下图那样。
1.7.1 分支创建与切换
[root@gitlab git_data]# git branch #查看当前所在分支
[root@gitlab git_data]# git branch linux #创建分支 'linxu'
* master
[root@gitlab git_data]# git checkout linux #切换到分支 'linux'
[root@gitlab git_data]# git branch
* linux
master
在linux分支进行修改
[root@gitlab git_data]# echo "2017年11月30日" >> README
[root@gitlab git_data]# git commit -a -m "2017年11月30日09点10分" [linux 5a6c037] 2017年11月30日09点10分
1 file changed, 1 insertion(+)
[root@gitlab git_data]# git status
# 位于分支 linux
无文件要提交,干净的工作区
在回到master分支查看这个文件是否有内容(没有就对了,因为是在linux分支创建的)
[root@gitlab git_data]# git checkout master
切换到分支 'master'
[root@gitlab git_data]# cat README
[root@gitlab git_data]# git log -1 commit 7015bc7b316cc95e2dfe6c53e06e3900b2edf427
Author: kai
Date: Wed Nov 29 19:30:57 2017 +0800
123
合并代码
注意:只能下级分支合并到上级分支(先切换到上级分支)
[root@gitlab git_data]# git merge linux #git merge 分支名称
Fast-forward
README | 1 +
1 file changed, 1 insertion(+)
[root@gitlab git_data]# git status
# 位于分支 master 无文件要提交,干净的工作区
[root@gitlab git_data]# cat README
2017年11月30日 1.7.2 合并失败解决
模拟冲突,在文件的同一行做不同修改
在master 分支进行修改
[root@gitlab git_data]# cat README 2017年11月30日
[root@gitlab git_data]# echo "kai in master">> README
[root@gitlab git_data]# git commit -a -m "kai 2017年11月30日 09点20分 "[master 7ab71d4] clsn 2017年11月30日 09点20分
1 file changed, 1 insertion(+)
切换到linux分支进行修改
[root@gitlab git_data]# git checkout linux
切换到分支 'linux'
[root@gitlab git_data]# cat README 2017年11月30日
[root@gitlab git_data]# echo "kai in linux" >> README
[root@gitlab git_data]# git commit -a -m "2017年11月30日 03"
[linux 20f1a13] 2017年11月30日 03
1 file changed, 1 insertion(+)
回到master分支,常识进行合并,出现冲突
[root@gitlab git_data]# git checkout master
切换到分支 'master'
[root@gitlab git_data]# git merge linux自动合并 README
冲突(内容):合并冲突于 README
自动合并失败,修正冲突然后提交修正的结果。
人工介入,解决冲突
[root@gitlab git_data]# vim README 2017年11月30日
kai in master
kai in linux
再次提交
[root@gitlab git_data]# git commit -a -m "2017年11月30日 03"
[master b6a097f] 2017年11月30日 03 1.7.3 删除分支
因为之前已经合并了linux分支,所以现在看到它在列表中。 在这个列表中分支名字前没有 * 号的分支通常可以使用 git branch -d 删除掉;你已经将它们的工作整合到了另一个分支,所以并不会失去任何东西。
查看所有包含未合并工作的分支,可以运行 git branch --no-merged:
git branch --no-merged
testing
这里显示了其他分支。 因为它包含了还未合并的工作,尝试使用 git branch -d 命令删除它时会失败:
git branch -d testing #相当于删除一个软连接
error: The branch 'testing' is not fully merged.
If you are sure you want to delete it, run 'git branch -D testing'.
如果真的想要删除分支并丢掉那些工作,如同帮助信息里所指出的,可以使用 -D 选项强制删除它。 1.8 windwos上Git的使用
windows 上git软件网站 https://git-for-windows.github.io
软件下载地址:https://github.com/git-for-windows/git/releases/download/v2.15.1.windows.2/Git-2.15.1.2-64-bit.exe
软件安装默认即可。 1.8.1 软件使用
创建新的仓库
在服务器上创建ssh密钥 使用ssh-ketgen 命令
[root@gitlab ~]# ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your> Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:n/V2kCiwwm2UfBsnQLm17eXUCBiBByyPbefmz5oQvfU root@gitlab
The key's randomart image is:
+---[RSA 2048]----+
| o++o+ |
| ..+o+ . |
| ==++o.. o |
| ..o==o=..+..|
| o.So+.++o |
| o oo*.o.. |
| .o+ E .|
| ..o . . |
| ooo |
+----[SHA256]-----+