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@{移动到当前版本需要多少步}
image
  • pretty查看log日志

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

git log --graph  --pretty=format:"%h %s"
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 "youremail@example.com"

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

参考地址:https://www.runoob.com/git/git-remote-repo.html
  • 验证配置验证信息是否成功,输入以下命令:
ssh -T git@github.com
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 <xieyuanzuo2006@163.com>
Date:   Thu Feb 20 12:06:26 2020 +0800

    d.py

commit 26f9353e9614cecf2cd359f92a8cb00a99ee3fec
Author: xtank <xieyuanzuo2006@163.com>
Date:   Thu Feb 20 12:06:08 2020 +0800

    c.py

commit 74627eb94e9bcd3ae9a0618bd05dd646b9be53ae
Author: xtank <xieyuanzuo2006@163.com>
Date:   Thu Feb 20 12:05:58 2020 +0800

    b.py

commit ee27005a1e294456648332f2e53b00121f2326c2
Author: xtank <xieyuanzuo2006@163.com>
Date:   Thu Feb 20 12:05:42 2020 +0800

    a.py

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

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

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

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

image
image

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

git checkout dev
git rebase master

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

image

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

git checkout master
git merge dev

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

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 更新代码。

image
3、开发最简单工作流

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

image
4、多人协同开发工作流

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

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下载代码
image
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,590评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 86,808评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,151评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,779评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,773评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,656评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,022评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,678评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,038评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,659评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,756评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,411评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,005评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,973评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,053评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,495评论 2 343

推荐阅读更多精彩内容

  • git 指南 git操作 本地操作 git add <file>暂存工作区的修改到暂存区 git commit将暂...
    IrisZL阅读 572评论 0 0
  • Git有很多优势,其中之一就是远程操作非常简便。本文详细介绍5个Git命令,它们的概念和用法,理解了这些内容,你就...
    bondPang阅读 1,315评论 0 6
  • 这篇博文是自己在学习git过程中的思考总结。本文仅仅代表个人的看法,如有不妥地方还请本文文末留言。 😊 原文链接g...
    Ming_Hu阅读 1,054评论 4 18
  • 如何快速掌握git操作 本人以前也看过git教程的pdf,但是说的都不太让人理解,让人难以掌握。但是在现实开发中,...
    安卓小生阅读 571评论 0 5
  • 一. git安装配置 1. 安装git 下载地址 安装完成后,在任意目录下 右键 ==> Git Bash Her...
    汤圆毛毛阅读 391评论 0 0