Git从入门到精通


一 Git(重点)

1 git是什么?

git是目前世界上最先进的分布式版本控制工具(没有之一)。
git由什么特点?

什么是版本控制工具?
说白了就是帮助我们管理不同版本的文件的一个应用程序。

2 git诞生

2002年之前,linus自己手动维护linux的版本代码
2002之后到2005年,使用的免费的bitkeeper
2005年之后,linus开发git

3 集中型版本控制工具和分布式版本控制工具

3.1 集中型的版本控制工具

svn,cvs,vss
特点:
1. 实现大部分开发中对版本管理的需求
2. 结构很简单,上手容易
缺点:
1. 对中央仓库依赖严重,一旦损坏了,历史数据怎么恢复?
2. 程序员上传的都是完整版,如何追溯查询?
3. 系统正在上线运行,需要修改bug或增加几个不同的功能,持续几个月的时间。如何同时管理几个版本
4. 如果管理一个分布在世界上各地且互不相识的大型开发团队

3.2 分布式版本控制工具

4 git的作用

1. 协同开发
2. 版本记录
3. 冲突解决
4. 历史追查
5. 代码备份
6. 版本还原
7. 权限管理
8. 分支管理
9. 代码审查
...

5 git安装

	最早的git是在linux上开发的,很长一段时间中,git只能在linux和unix上运行。不过,后来有人把他一直到windows平台。现在git可以在linux、unix、mac os和windows几个主流平台运行。
	要使用git,第一步当然是安装。在windows安装

5.1 在windows中安装git

1. 命令行工具:git for windows(重点)
https://git-for-windows.github.io/1
tip:
点击安装包,然后傻瓜式的安装就可以成功

2. 可视化工具:TortoiseGit
https://tortoisegit.org

3. idea插件(掌握)

4. github网站(掌握)
http://www.github.com

6 配置git签名

6.1 第一步

选中你要作为git工程存放的目录,然后单击鼠标右键选择git bash即可。

tip:
git是分布式版本控制工具,所以我们需要填写用户名和邮箱作为一个标志。
C:\Users\lixi19861125路径下.gitconfig文件,这个我文件里面可以看到--global属性,所有的git项目都会公用这个属性

git config --global user.name "lixi"
git config --global user.email "lixi@1000phone.com"

7 创建版本库

7.1 第一步 选中一个的git工程的目录

7.2 第二步 输入命令初始化版本库

git init

8 git命令行操作

8.1 查看文件状态

git status

8.2 将文件/目录添加到临时暂存区

git add 文件名/目录名
e.g.
git add src/HelloWorld.java

tip:
以上通过git add命令的文件会提交到暂存区中,但是这里的文件其实没有真正的提交。使用下一个命令才是把他提交到一个统一的版本文件

8.3 提交文件

git commit

e.g.
git commit -m "提交提示信息"

tip:
每当有文件被修改/添加/删除的时候,都需要重新git add,然后再git commit

8.4 查看日志

git log : 查看历史记录

e.g.
$ git log


commit 29df21765ff605e8f204417f9251c410f88563b0
Author: lixi <lixi@1000phone.com>
Date:   Mon Mar 9 15:10:55 2020 +0800

    update 002

commit 76551c4baf66d295d26a2798fe5ff8ca3e827f4a
Author: lixi <lixi@1000phone.com>
Date:   Mon Mar 9 15:04:25 2020 +0800

    create 001

e.g.
$ git log --pretty=oneline
29df21765ff605e8f204417f9251c410f88563b0 update 002
76551c4baf66d295d26a2798fe5ff8ca3e827f4a create 001

8.5 回退历史

8.5.1 创建一个文件 : a.txt

aaaaaaaaaaaaa
bbbbbbbbbbbbb
ccccccccccccc
ddddddddddddd

tip:
添加到暂存区然后提交

8.5.2 修改这个文件:a.txt

aaaaaaaaaaaaa
ccccccccccccc
eeeeeeeeeeeee

tip:
添加到暂存区然后提交

8.5.3 回退到上一次提交

git reset --hard HEAD^1

tip:
HEAD是一个指针,永远指向最新版本,^1表示让HEAD指针指向上一个版本

--hard 硬:这种回顾不但将版本回顾,还会将指定的数据抹除。不会保留任何你修改的记录
--soft 软:回退版本,也会保留改动的记录。会自动帮你git add。
--mix 折中:回退版本,并会保留所有改动记录。但是不会自动帮你git add

git reset : 修改HEAD的位置

这种方式可以恢复到之前某个提交的版本,但是恢复之后,当前版本之后的版本将不复存在。

8.5.4 回退到多个版本

git reset --hard HEAD~2 #回退到2个版本之前的版本

8.5.5 版本穿越

git reflog # 查看历史记录的版本号

e.g.
$ git reflog
29df217 HEAD@{0}: reset: moving to HEAD~2
8938885 HEAD@{1}: reset: moving to HEAD^1
7c77ab0 HEAD@{2}: commit: update 004
8938885 HEAD@{3}: commit: update 003
c07b56d HEAD@{4}: commit: update 003
29df217 HEAD@{5}: commit: update 002
76551c4 HEAD@{6}: commit (initial): create 001

e.g.
git reset --hard 7c77ab0

8.6 还原文件

git checkout 文件名

e.g.
vi src/b.txt
111111111
222222222
333333333
444444444

git add src/b.txt
git commit -m "update 005"

修改 b.txt
111111111
222222222
333333333
444444444
555555555
666666666

git checkout src/b.txt

8.7 删除文件

1. 先删除文件
2. git add
3. git commit

9 工作区、暂存区、本地库

9.1 概念

工作区(Working Directory) : 电脑的本地磁盘目录
本地库(Repostory) : 工作区中有一个隐藏目录.git,它就是git的本地版本库
暂存区(stage) : 一般存储再git目录下的index文件,所以我们把暂存区有时候也叫做索引。

9.2 关系图

10 分支

10.1 分支概念

项目已经上线了,但是产品经理又提出了新的需求,评估实现这个新功能需要2个月的时就按。但是项目还是需要同时上线运行,时不时修改bug,如何管理这几个版本。

10.2 查看分支

git branch -v

e.g.
$ git branch -v
* master b94d274 update 006

10.3 创建分支

git branch 分支名称
e.g.
$ git branch common
$ git branch -v
  common b94d274 update 006
* master b94d274 update 006

10.4 切换分支

git checkout 分支名

e.g.
git checkout common

10.5 合并分支(将其他分支合并到主分支:master)

1. 切换到主分支
git checkout master

2. 合并
git merge 分支名
e.g.

git merge common

11 冲突

11.1 什么是冲突

冲突一般是指同一个文件同一位置的代码,再两种版本的仓库合并时,版本的管理软件无法判断到底应该保留哪一个版本,因此会提示该文件发生冲突,冲突一般都需要程序员手动解决。

11.2 在分支合并的时候解决冲突

1. 先在master分支上创建一个luosenhan.txt
2. 再在common分支上创建一个luosenhan.txt
3. 分别提交
4. 最后合并

e.g.
$ git merge common
Auto-merging src/luosenhan.txt
CONFLICT (add/add): Merge conflict in src/luosenhan.txt
Automatic merge failed; fix conflicts and then commit the result.

5. 查看冲突
git diff

$ git diff
diff --cc src/luosenhan.txt
index 7d8fefb,9f9848c..0000000
--- a/src/luosenhan.txt
+++ b/src/luosenhan.txt
@@@ -1,3 -1,2 +1,8 @@@
++<<<<<<< HEAD
 +11111111111111111
 +22222222222222222
- 33333333333333333
++33333333333333333
++=======
+ 222222222222222
 -333333333333333
++333333333333333
++>>>>>>> common
6. 解决冲突:切换到哪个目录,然后查看文件
7. 再重新add和commit即可

二 GitHub(重点)

1 什么是github?

github是一个git项目托管网站,主要提供基于git的版本托管服务。
网址:https://github.com

注册账号的注意事项
- 不要使用163邮箱,有可能收不到校验邮件。
- 较长时间不适用,有可能被github冻结账号。
- 如果冻结账号,请登录https://github.com/contact恢复申请

2 GitHub操作

2.1 建立本地仓库

1. 创建guojing和huangrong子目录
2. 搭建代码库
git init
git config user.name "huangrong"
git config user.email "lixi19861125@qq.com"

3. 提交代码
git add
git commit

2.2 注册github账号并登录

2.3 创建github的项目库

2.4 推送代码到git

  • 增加远程地址
git remote add <远端代号> <远端地址>
<远端代号> :指远程链接的代号,一般直接用origin做代号,也可以自定义 
<远端地址> :指远程链接的url

e.g.
git remote add origin https://github.com/rocklee86/kongfu.git
  • 推送到远程库
git push <远端代号> <分支名>

e.g.
git push origin master

2.5 下载GitHub上的库

  • 从GitHub上克隆(guojing)
git clone <远端地址> <项目的目录名>
<项目的目录名> : 指为克隆的项目在本地新建的一个目录名,可以不填,默认就是使用github仓库名

e.g.
git clone https://github.com/rocklee86/kongfu.git kongfu
  • 修改文件
git push origin master

1. 问题1:
fatal: 'origin' does not appear to be a git repository
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

解决方案如下图:

当黄蓉邀请了郭靖之后,郭靖用户的邮箱会接受到一份邀请的邮件,点击查看邀请会来到如下图:

再次提交代码:
git push origin master

2.6 huangrong用户同步更新代码

  • 从github更新项目
git pull <远程代码> <远程分支>

e.g.
git pull origin master

3 合作冲突

3.1 什么是协作冲突

	在上传或者同步代码时,由于你和他人都修改了同一文件的同一位置的代码,版本管理工具无法判断究竟以谁为准,这就会报告冲突,需要程序员手动解决。

3.2 解决方式

1. 修改合并
2. git add
3. git commit

1. 在huangrong用户修改打狗棒法.txt并提交
2. 在guojing用户修改打狗棒法.txt并提交

4 第三方团队参与场景

4.1 画图分析

4.2 操作测试

1. 使用所谓的穆念慈用户(lixi86)fork出黄蓉对应的库
2. 使用穆念慈用户修改fork出来的某个文件
3. 然后查看如图
4. 操作完成之后,项目管理者(黄蓉)就会收到一封同步请求的邮件

三 GitLab

5.1 什么是gitlab

"自架私服版"的github
官网:https://about.gitlab.com
下载网址:https://about.gitlab.com/install

5.2 安装

1. 下载依赖
yum install -y curl policycoreutils-python openssh-server cronie lokkit http ssh 

2. 安装
rpm -ivh /opt/software/gitlab-ce-11.9.0-ce.0.el6.x86_64.rpm

3. 预配gitlab的组件
gitlab-ctl reconfigure

4. 修改gitlab的配置url
vi /etc/gitlab/gitlab.rb

external_url 'http://gitlab.1000phone.com'

vi /opt/gitlab/embedded/service/gitlab-rails/config/gitlab.yml

host: gitlab.1000phone.com
port: 80
https: false

5. 修改windows的hosts
192.168.49.103 slave3 gitlab.1000phone.com

5.3 启动gitlab

gitlab-ctl start/stop/restart

四 idea整合git

6.1 在github上创建一个库

6.2 打开idea,选择setting

settings ---> Version Control ---> Git

6.3 再选择github

1. 需要现在github上生成授权令牌(token)
https://github.com/settings/tokens/new

2. 然后再将生成的令牌填入到idea的githup处即可
2.1 file ---> New ---> Project from Version Control ---> Git

3. 如何想要上传的文件
右键 ---> Git ---> add/commit

4. repostory ---> clone/push/pull

5. 如果有冲突会自动提示,选择merge


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM