git操作

一、基本操作

1、版本控制工具
  • 集中式:CSV ,SVN,VSS
  • 分布式:Git,Darcs,...
2、配置用户信息
  • 项目配置文件:文件在当前项目下.git/config
#项目配置文件,本地所有的文件夹有效,经常用
git config --global user.name "XXX"
git config --global user.email "XXX"

#查看配置信息
git config --global --list
  • 全局配置文件:文件在~/.gitconfig
#当前的文件夹有效,很少用
git config --local user.email "XXX"
git config --local user.name "XXX"
  • 系统配置文件:文件在/etc/.gitconfig,需要root权限
#当前系统文件夹有效,基本不用
git config --system user.email "XXX"
git config --system user.name "XXX"
3、基本操作
  • 初始化
git init 
注意:生成的 .git 目录中存放的是本地库相关文件,不要删除,删除意味着git不再管理本文件夹文件,而且之前提交的本地版本都将会消失
  • 查看状态
git status   #查看工作区、暂存区状态
  • 添加文件至暂存区
git add .
  • 提交
git commit -m "XXX"
  • 重命名
git mv XXX XXXX
4、查看日志
git log 
git reflog  #常用

git log -n4 #查看最近的4个记录
git log --greph #图形显示,更直观
git log --pretty=oneline #漂亮一行显示
git log --oneline #简洁显示
说明:HEAD@{移动到当前版本需要多少步}
git操作_第1张图片
image
  • pretty查看log日志

相比上图,信息显示得更加简洁

git log --graph  --pretty=format:"%h %s"
git操作_第2张图片
image
5、回滚操作
  • 回滚至之前的版本
git log
git reset --hard 版本号
  • 回滚至之后的版本
git reflog
git reset --hard 版本号
  • 使用 ^ 符号:只能回滚
git reset --hard HEAD^
例子:git reset --hard HEAD^^
注意:几个 ^ 表示后退几步
  • 使用 ~ 符号:只能回滚
git reset --hard HEAD~n
例子:git reset --hard HEAD~4
  • reset的三个参数比较
soft: 
  - 仅本地库移动HEAD 指针
mixed:
  - 在本地库移动HEAD指针
  - 重置暂存区
hard:
  - 在本地库移动HEAD指针
  - 重置暂存区
  - 重置工作区

二、分支操作

  • 查看分支
git branch
  • 创建分支
git branch 分支名
  • 切换分支
git checkout 分支名称

git checkout -b dev
注意:git checkout命令加上-b参数表示创建并切换,相当于以下两条命令:
git branch dev
git checkout dev
  • 合并分支
git merge 要合并的分支
注意:执行合并命令之前需要先切换到主分支(master)。合并的时候可能产生冲突,此时需要手动删减代码。
  • 删除分支
git branch -d 分支名称
注意:一般合并过后,就会将合并后的分支删除。比如,线上出现bug,为了修复bug创建了bug分支,在修复bug后并将代码合并到主分支后,此时需要将bug分支删除。

三、Git和GitHub

1、 创建远程库
git remote -v  #查看远程地址别名
git remote add 别名 远程地址 
例子:git remote add origin https://xx
2、生成公钥
  • 配置验证信息使用以下命令生成 SSH Key:
ssh-keygen -t rsa -C "[email protected]"

注意:后面的 [email protected] 改为你在 Github 上注册的邮箱,之后会要求确认路径和输入密码,我们这使用默认的一路回车就行。成功的话会在 ~/ 下生成 .ssh 文件夹,进去,打开 id_rsa.pub,复制里面的 key。
回到 github 上,进入 Account => Settings(账户配置)。

参考地址:https://www.runoob.com/git/git-remote-repo.html
  • 验证配置验证信息是否成功,输入以下命令:
ssh -T [email protected]
3、推送代码
git push 别名 分支名
git push -u 别名 分支名    #-u指定默认主机
例子:git push origin master
4、克隆代码

完整的把远程库克隆到本地克隆下来后不要在主分支里面做开发 clone进行一次,从无到有的过程,更新用pull

git clone 仓库地址
5、拉取代码

本地存在clone下来的文件 就用pull更新

pull = fetch + merge
    git fetch 别名 分支名
    git merge 别名 分支名
git pull 别名 分支名

四、rebase(变基)

1、第一种情况:整合提交记录
比如:用如下命名分别创建a.py、b.py、c.py、d.py文件,并提交至版本管理区。
touch a.py
git add .
git commit -m "a.py"

查看提交记录如下:

Administrator@WIN-768K0UMH43F MINGW64 ~/Desktop/gitrest (master)
$ git log
commit 0b60ce7cf6c285737a594c7729b590377c65273b (HEAD -> master)
Author: xtank 
Date:   Thu Feb 20 12:06:26 2020 +0800

    d.py

commit 26f9353e9614cecf2cd359f92a8cb00a99ee3fec
Author: xtank 
Date:   Thu Feb 20 12:06:08 2020 +0800

    c.py

commit 74627eb94e9bcd3ae9a0618bd05dd646b9be53ae
Author: xtank 
Date:   Thu Feb 20 12:05:58 2020 +0800

    b.py

commit ee27005a1e294456648332f2e53b00121f2326c2
Author: xtank 
Date:   Thu Feb 20 12:05:42 2020 +0800

    a.py

现在想把第二次至第四提交的记录合并:

git rebase -i HEAD~3
注意:此命名和图片命名是一样的效果。合并的时候需要注意,这些合并的版本是提交至本地版本管理区的版本,而已经提交至远程仓库的版本最好不要合并。
git操作_第3张图片
image
git操作_第4张图片
image
git操作_第5张图片
image
git操作_第6张图片
image
2、第二种情况:合并记录

将分支记录合并到主线记录,使得开发提交记录看起来更简洁,缺点是信息没有那么详细。

比如:在主分支上开发到了一些功能,然后创建了dev分支,然后在dev分支上开发了一些功能,接着再切换到master分支,又开发了一些功能,现在把dev分支代码合并到master分支,使用的方法是merge。如图所示:

git操作_第7张图片
image
git操作_第8张图片
image

然后,继续分别在master分支和dev分支上进行开发。接着,切换到dev分支,执行变基命令

git checkout dev
git rebase master

注意:相当于将master分支合并到dev分支。在dev分支查看log,如图所示:

git操作_第9张图片
image

最后,再切换至master分支,再用merge命名合并dev分支

git checkout master
git merge dev

查看log信息,如图所示,可以看到master分支和dev分支的记录已经变成一致。也就是把,两个分支的日志合并到一块。

git操作_第10张图片
image
3、第三种情况:不产生分叉

两地开发的时候,比如在家和公司办公的时候,在家开发的功能到公司后,需要先pull到公司电脑,此时会产生分叉,为了不产生分叉,可以如下操作:

#原来的操作方式,就是在公司电脑上执行git pull
git pull origin

#而git pull的功能相当于下面两个命名
git fetch 
git merge

#为了不分叉,现在执行
git fetch origin dev
git rebase origin/dev

五、冲突解决

1、冲突解决步骤
  • 第一步:编辑,删除特殊标记<<< ===
  • 第二步:修改到满意位置,保存退出
  • 第三步:添加到缓存区 git add 文件名
  • 第四步:提交到本地库git commit -m '日志信息' 注意:后面一定不能带文件名
2、beyond compare工具

beyond compare冲突解决工具。Beyond Compare是一款Scooter Software研发的文件对比工具。你可以选择针对多字节的文本、文件夹、源代码,甚至是支持比对adobe文件、pdf文件或是整个驱动器,检查其文件大小、名称、日期等信息。你也可以选择使用Beyond Compare合并两个不同版本的文件或文件夹。

官方下载地址:http://www.scootersoftware.com/

破解地址:https://www.onlinedown.net/soft/23172.htm

1、安装配置

git config --local merge.tool bc3
git config --local mergetool.path 'beyond compare安装目录'
git config --local mergetool.keepBacup false

注意:--local只对本项目有效,若要改成全局有效需要改为--global

2、简单使用

六、工作流

1、工作流分类
  • 集中式工作流
像SVN一样,集中式工作流有一个中央仓库,所有的修改都提交到了Master分支上
  • GitFlow工作流

主干分支master 开发分支develop 修复分支hotfix 预发布分支release 功能分支feature

GitFlow 有独立的分支,让发布迭代过程更流畅。
  • Forking 工作流
在 GitFlow 基础上, 充分利用了 Git 的 Fork 和 pull request 的功能以达到代码审核的目的。 
安全可靠地管理大团队的开发者
2、单人两地办公流

一般在公司开发某些功能后,再推送到github,到家后首次需要克隆在本地,以后就可以用git pull origin 更新代码。

git操作_第11张图片
image
3、开发最简单工作流

开发中最简单的工作流是创建两条工作流,一条是正式版本线,一条是dev(开发)版本线。当dev开发完一个新功能后,再合并到正式版本线。开发的时候只在dev线上完成。

git操作_第12张图片
image
4、多人协同开发工作流

一般在大型公司开发人员都会有自己的分支,每个人在自己的分支上进行代码管理,然后报给领导review,代码通过后再上线。

git操作_第13张图片
image

七、git忽略文件

让git不再管理当前目录下的某些文件。比如某些敏感文件就不能推送到github上以免造成信息泄密。

*.h
files/
*.py[c/a/d]

忽略文件的原则:

  • 忽略操作系统自动生成的文件,比如缩略图等;

  • 忽略编译生成的中间文件、可执行文件等,也就是如果一个文件是通过另一个文件自动生成的,那自动生成的文件就没必要放进版本库,比如Java编译产生的.class文件;

  • 忽略你自己的带有敏感信息的配置文件,比如存放口令的配置文件。

参考文件:https://github.com/github/gitignore

参考文件:https://www.liaoxuefeng.com/wiki/896043488029600/900004590234208

八、免密登录

1、URL中免密登录
原地址:https://github.com/v2net/Apple.git
修改后的地址:https://用户名:密码@github.com/v2net/Apple.git

git remote add origin https://用户名:密码@github.com/v2net/Apple.git
git push origin master
2、SSH登录
1、在本地生成公钥私钥,将公钥内容复制至github
ssh-keygen

2、登录GitHub。Settings  --> SSH and GPG keys  --> New SSH Key 

3、回到本地配置SSH地址。git remote add 别名 SSH地址 
比如:git remote add origin https://github.com/v2net/Apple.git
3、GIt自动管理凭证

git自动管理登录凭证

九、Tag标签

为了清晰的版本管理,公司一般不会直接使用commit提交

git tag -a v1.0 -m '版本介绍'   #创建本地tag信息
git tag -d v1.0         #删除tag

git push origin v1.0
git push origin --tags   #将本地tag信息推送到远程库
git pull origin --tags    #拉取到本地

git checkout v.10    #切换tag
git clone -b v0.1 地址   #指定tag下载代码
git操作_第14张图片
image

你可能感兴趣的:(git操作)