Git常规使用梳理

一、前言

在软件开发过程中,不可避免的会使用到版本控制的工具,比方说 SvnGit。但在之前的过程中,对于这些强大的工具都是最基本的使用:拉取提交 仅此而已,而恰逢公司要规范代码而请人培训 Git 工具的使用,借此来梳理一下Git的常规使用方法。

二、Git与SVN

2.1 工作流程对比

参考1

2.2 集中式代码管理

SVN 是集中式代码管理方式,其核心就是服务区,所有开发者在开始新的工作之前需要从服务器上获取最新的代码,然后合并冲突、开发、提交等操作。此时所有的版本信息都存放在服务器上,因此比较依赖服务器的稳定,但同时 SVN 的中文支持比较好,操作比较简单,因此非开发人员使用也比较方便。

2.3 分布式代码管理

Git 是分布式代码管理方式,在每个终端上都有一个版本仓库,并没有相对于 SVN 那样的服务器的概念,是比较擅长于版本控制,但是操作相对比较复杂。

三、Git 基本知识

3.1 框图

来源同事ppt

3.2 Git配置

初次安装 Git 需要配置用户名和邮箱:

git config ‐‐global user.name "用户名"      // 配置用户名
git config ‐‐global user.email "邮箱地址"   // 配置邮箱地址
git config ‐‐global ‐‐list                              // 查看全局配置
git config ‐‐global http.sslVerify false       // 关闭ssl检查

windows 环境下回车换行与 Linux/mac 下不一致,所以需要设置一下git 的全局变量:

git config ‐‐global core.autocrlf false    // 自动转换,windows下默认为true,修改为false
git config ‐‐global core.safecrlf true     // 拒绝提交包含混合换行符的文件

在使用git的时候,为了方便不输入密码就能进行代码的下载和推送,可以使用 sshkey 进行加密通信,sshkey 的生成方式如下:

ssh‐keygen ‐t rsa ‐C "xxx@163.com"   // 后续会有几次确认,建议不做更改,密码也不需要设置

命令执行后,会在默认的~/.ssh路径下生成两个文件:id_rsa和id_rsa.pub,这两个文件一定要保存好,重装系统的时候可以重新设置回来,打开id_rsa.pub文件将内容复制出来,添加到gitlab的设置中即可

四、Git 基本操作

4.1 创建仓库

mkdir trueTest
cd trueTest       // 创建本地git仓库
git init
touch README.md
git add README.md       // 添加文件,将文件从工作区转到版本暂存区
git commit ‐m "first commit"   // 提交,把暂存区的所有文件提交到仓库区
git remote add origin https://gitee.com/xxx/trueTest.git    // 把本地仓库与远程仓库连接起来
git push ‐u origin "master"   // 把仓库区的文件提交到远程仓库里

4.2 拉取仓库代码

//// 克隆代码,在本地创建此仓库目录,会下载所有分支
git clone git@gitee.com:xxx/trueTest.git 
// 克隆单一分支
git clone ‐b xxx git@gitee.com:xxx/trueTest.git

4.3 查看状态

git status    // 查看工作区状态,可见git分支,是否有未提交信息
git remote ‐v   // 查看远端的仓库信息

4.4 分支操作

git checkout abc            // 切换到abc分支,当有未提交的内容时,是无法切换分支的
git checkout ‐b abc        // 创建abc分支,并切换到abc分支
git branch                      // 查看本地分支
git branch ‐a                 // 查看本地和远端分支
git branch abc              // 在当前分支下,创建新的本地abc分支
git branch ‐d abc          // 删除本地abc分支
git push origin abc       // 创建远端abc分支
git push origin ‐‐delete abc       // 删除远端的abc分支

4.5 代码操作

git pull origin master                    // 从远端拉取分支master的代码,并与本地仓库合并
git fetch origin master                  // 从远端拉取分支master的代码,不与本地仓库合并
git diff                                          // 查看工作区内的仓库文件变更内容
git add .                                       // 将所有文件的从工作区提交到版本暂存区
git commit ‐m "test"                    // 将版本暂存区的文件提交到仓库区
git push origin master                 // 将本地分支提交到远端的master分支
git merge abc                             // 将本地的abc分支合并到当前分支上
git rm <file>                               // 将文件从工作区和暂存区删除
git mv <file> <newfile>             // 移动或重命名文件、目录

4.5 提交历史

git log                       // 查看当前分支的提交记录,包含提交人、提交时间、提交描述等
git log ‐‐oneline        // 查看历史记录的简洁版本
git log ‐‐graph           // 开启拓扑结构图,查看历史提交记录
git blame <file>        // 查看某个文件的历史提交记录,文件内容会被展示出来

4.5 标签相关操作

git tag ‐a v1.0                     // 给当前版本打标签,‐a表示带注解的标签
git tag ‐a v0.9 85fc7e7       // 给85fc7e7这个版本追加标签
git tag                                // 查看所有标签
git push origin v0.9            // 将0.9标签推送到远端
git push ‐‐tags                   // 将所有标签推送到远端
git tag -d v1.0                    //删除本地标签
git push origin --delete v1.0   //删除远程标签

4.6 版本管理

git reset HEAD^                      // 回退所有内容到上一个版本
git reset HEAD^ <file>            // 回退某个文件的版本到上一个版本
git reset 85fc7e7                    // 回退到指定版本,保留工作区,清空缓冲区
git reset ‐‐hard 85fc7e7         // 回退到指定版本,清空工作区和缓冲区,放弃目标后的所有修改
git reset ‐‐soft 85fc7e7          // 回退到制定版本,并将该版本之后的修改放入缓冲区
git checkout ‐‐ <file>             // 回退某个文件到当前版本,适用于未add之前
git worktree                           // 用于多分支工作时,不需要来回切换分支
      eg:   git worktree add ../ masterDir master     //表示将master分支存放在上级目录下的masterDir中
            git worktree remove masterDir     //删除
            git worktree list   //展示分支列表

4.7 多仓库操作

1. 多仓库操作
假如仓库A,现在添加仓库B
在A中:
git remote add 昵称B <responseURL>
git fetch --multiple 昵称B           //同步远程信息
git fetch 昵称B 分支                  //check到本地
git push --all origin                    //推送所有的分支

4.8 添加 .gitignore 文件

直接在根目录下创建 .gitignore 文件,其中添加需要排除的文件即可:

/java.iml                 // 排除当前目录下的java.xml文件
dir/                         // 排除dir这个文件夹及其所有内容
.gitignore               // 排除自身
*.o                         // 排除所有 .o 后缀的文件

如果之前忘记定义 .gitignore 文件,而且已经执行了 git add. 命令,想要定义 .gitignore 文件,操作如下:

# 清除记录的所有文件管理信息,注意行末的点表示当前目录,一定要写
git rm -r --cached .
# 添加该仓库的所有文件,注意行末的点表示当前目录,一定要写
git add .
# 提交注释
git commit -m "....."
# 推送到仓库
git push -u origin master

-r 参数删除目录, git rm --cached hello.txt 删除的是本地仓库中的文件,且本地工作区的文件会保留且不再与远程仓库发生跟踪关系,如果本地仓库中的文件也要删除则用 git rm hello.txt

4.9 打包干净代码

类似 svn export,可以用来从代码库中导出一份干净的代码(没有.svn),git提供同样的功能,如下基本方法:

# 打包不同的分支
git archive --format=zip --output="./output.zip" 分支

#打包不同的commit
git archive --format=tar.gz --output= "./output.tar.gz" commit id

#打包指定分支的目录
git archive --format=tar.gz --output "./output.tar.gz" master mydir mydir2  

注意在操作时,建议在对应分支的根目录下操作不容出错,--format不指定时根据名字来推断。

参考

[ 1 ] SVN和Git 介绍,区别,优缺点以及适用范围
[ 2 ] git 中添加 .gitignore
[ 3 ] git导出代码的方法~archive

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

推荐阅读更多精彩内容