git总汇

本文详细介绍了git的基本操作、参数含义、分支管理、合并与冲突处理、标签与stash暂存,以及git在开发流程中的应用,涵盖vi/vim操作和VSCode图形化界面。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、前提

1、当我们使用git命令时,有的常会用到一些vi/vim操作。 常用的如下:

命令

说明

ESC退出输入模式,切换到命令模式
 i、a、o 大小写切换到输入模式
:q退出程序
:w保存文件
:wq 保存并退出
:wq! 强制保存后离开

    

 Eg:我们输入一个交互式命令如下

2、Git参数,常用参数说明如下:

git参数

说明

-d--delete:删除
-D --delete --force的快捷键 强制删除
-f--force:强制
-m--move:移动或重命名
-M--move --force的快捷键 
-r--remote:远程
-a--all:所有

二、git 简介

   git :是一个版本控制系统(管理我们修改的多次提交) ,同时也是分布式的(非集中式,其在我们每个人的电脑有一个本地仓库)

   原理:对于我们项目代码管理,我们将每次提交(commit后)存在自己的本地仓库,而后通过推送(push后)备份在远程仓库(用到gitlab或github等)。

   重要性:使用git 更好的存储并管理我们的代码,同时方便和团队协作开发。

三、git 命令操作

1、提交代码

  git add -all   //从工作区到暂存区

  git commit -m ‘描述’  // 从暂存区到本地仓库

  git push origin 分支名    // 从本地仓库到远程仓库

注意点

 git push  每次推送使用git push 后面不写参数,前提是本地分支与远程分支有追踪关系(tracked),如果没有 ,用 git push --set-upstream origin 分支名  建立追踪关系。

2、工作区

工作区修改了恢复,可通过git status 查看

git restore <file>


3 、暂存区

工作区修改了提交到暂存区想恢复,可通过git status 查看

git restore --staged <file>

4、本地仓库

a.回退版本(回退到前几次提交的任意一次commit)

git log    //查看当前分支所有commitid ,并获取要回退的那个commitid

git reset —hard commitid   // 用到参数—hard

b.前进版本

git reflog    // 获取的commitid 包括 回退版本前的,获取回退前的commitid

命令: git reset —hard commitid   

5、对比差异

查看工作区和暂存区差异: git diff

查看工作区和仓库的差异:git diff HEAD

查看暂存区和仓库差异:git diff —cached

查看两个分支的差异 后面分支f2比前面分支f1 多了或少了什么:git diff f1 f2

6、分支操作

创建并切换分支 :git switch -c 分支名

切换分支: git switch 分支名

查看分支: git branch

查看远程分支: git branch -r

查看所有分支: git branch -a

删除本地分支 :git branch -d 分支名  比如 git branch -d dev

强制删除本地分支: git branch -D 分支名  

删除远程分支: git push 远程仓库名 :分支名     比如  git push origin :dev

本地分支重命名:git branch -m oldName  newName

将重命名后的分支推送到远程 :git push origin newName

删除远程的旧分支 :git push -d origin oldName

备注:

  1. 不能在当前分支删除要删除的分支,所在当前分支如果要删除另一个分支,会去比对这两个分支的差异,如果要删除的分之代码多余当前分支,-d删除不了 要求merge或-D,如果确定要删除,用-D。

      2. git fetch -p  说明:-p 的意思是“精简”。这样,你的分支列表里就不会显示已远程被删除的分支了。 

7、标签操作

打tag是线上环境构建分支的一个快照

查看标签 git tag

创建标签 git tag -a 标签名 -m '描述'

删除本地标签 git tag -d 标签名

强制删除本地标签 git tag -D 标签名

删除远程标签 git push 远程仓库名 :标签名

备注:

远程分支、远程tag、远程分支名要删除,都用的push

8、stash暂存

一般用于停止手头工作 去做另一个紧急任务,比如解决线上bug。但当前分支不需要commit。则用stash暂存。解决了线上问题回来这个分支,需要弹出stash的代码

暂存:git stash -a    // 其中-a代表所有(追踪的&未追踪的)因为git status不带参数 没有add过的(未追踪的)不会被stash

查看暂存列表$stash{n}: git stash list 

弹出 ,从stash list移除: git stash pop 

取出,未从stash list里面真正移除: git stash apply 暂存号

从stash list移除 :git stash drop 暂存号  // 配合git stash apply 暂存号

备注:

如果不stash是否可以切换分支成功?

可以切换:说明两个分支commit提交的一样,修改一个分支上的,去切换,可以成功。

不可以切换:说明两个分支commit提交的不一样(有差异),修改一个分支上的,去切换,报错 Your local changes to the following files would be overwritten by checkout。。。

Please commit your changes or stash them before you switch branches.所以不想commit的情况下,需要stash 。

9、git pull

拉取远程分支 f2 并与当前分支f1 合并: git pull origin f2 

拉取当前分支的远程分支 f1 并与当前分支f1 合并:git pull origin f1  

查看本地分支与远程分支是否建立追踪关系: git branch -vv  

备注:

git pull   拉取当前分支的远程分支 f1 并当前分支f1 合并 ,不带参数前提是与远程分支f1建立追踪关系(upstream)

10、合并分支

   

在当前分支和并f2分支方法1:

git pull origin f2  

    

在当前分支和并f2分支方法2:

git switch f2

git pull origin f2

git switch f1    

git  merge f2  

备注:

如果有冲突:在当前分支(自己分支)解决冲突后需要git add & commit

11、 删除文件操作

删除了工作区:  rm 文件名 // 等同于手动delate

删除工作区文件,并且将这次删除放入暂存区: git rm test.txt   //前提工作区干净,如果工作区不干净有修改,执行会失败,可以执行下一个名令

删除工作区和暂存区文件,并且将这次删除放入暂存区:git rm -f test.txt  //即工作区修改了或者进入暂存区了用这个命令。

  

备注:

所以为了方便,只要真的想删除那个文件,执行完以上三个命令,统一 git add & commit 就行。

12、常用场景:合并多个commit

在我们代码要合入master时,要上线时需要将多个commit合并

a、方式一:使用reset

git checkout master &  git pull origin master & git checkout feature1 & git merge master

git reset master  //  commit重置到master的最新的commit,但保留工作目录。

git add --all

git commit -m "合并message" 

git push -f origin feature1  // 用-f 因为reset后,个人的本地仓库分支提交落后于个人的远程分支 git push 会被拒绝

备注:

reset --hard commitid  // 回退版本 (相当于工作区和暂存区和本地仓库都变成以前的一个版本)

reset --soft  commitid  // 保留工作目录,并把重置 HEAD 所带来的新的差异放进暂存区

reset —mixed commitid // 保留工作目录,并清空暂存区 相当于:reset 不加参数 

其中commitid 如果是分支名 相当于重置到这个分支的最新的一次commitid。

b、方式二: 使用rebase

首先 在开发分支合入最新的master

git log 看看要基于那个commit合并

然后在开发分支使用rebase 的交互式操作 。git rebase -i 【commitid】 ;
然后就是进入vim操作:i;esc;wq; (目的是squash)


保存后然后可能遇到冲突 这时候。需要手动解决冲突& 打标记gaa & 命令进入编辑页面git rebase --continue 。进行vim操作就是写commit信息。如果没有遇到冲突。wq保存后直接跳到编辑页面写commit信息。

再次查看git log。

备注:

在远程合入master后 本地git log之前 需要git pull。然后git log。


四、git开发流程

 

掌握了git的基本命令和jenkins部署,在实际开发中的应用流程如下:

1、环境和分支说明

开发:个人分支feature/xxx  构建分支dev  ,构建环境dev

测试:构建分支test,构建环境test

预发布:构建分支release,构建环境teta

发布: 构建tag,构建环境prop

热更新:线上bug修复,分支hotfix/issue-问题描述

标签:用时间加版本tag 比如 202011220930-qiannniaov1.0.1

2、具体操作流程

1. clone新的项目

2.切到master 分支,git pull origin master 拉最新的线上代码

3.切一个新分支开发功能,比如开发一个定单列表功能 git switch -c feature/order-list

4.开发中ing

5.开发完成

6.联调 切到dev分支合代码 git switch dev   git merge feature/order-list

7.dev环境(jenkins上的dev任务)构建dev分支

8.联调过程可能需要修改代码,切回feature/order-list 分支 改好后,继续上面的6,7步骤

9.联调通过后,准备提测

10.切到master分支 拉最新代码 git pull

11.以master分支新建test分支

12.切到test分支合代码 git switch test  git merge feature/order-list

13.test环境构建test分支

14.有问题就切回feature/order-list 改好后合到test分支,注意这里最好也合到dev分支,避免下次开发时可能遇到test正常,dev环境有问题。

15.testOK

16.切到master分支 拉最新代码 git pull

17.以master分支新建release分支

18.然后再合feature/order-list分支

19.beta环境验证OK

20.release分支提pr

21:master分支打tag

22.prop环境验证是否OK

23.如果需要修改代码

24.切到master分支,新建一个hotfix分支git switch -b hotfix/issue-typeerror

25.改好bug,到test合hotfix/list-order testOK

26.hotfix/issue-typeerror 分支提pr

27.切到master 打tag ,prop环境构建tag

28.如果哪些分支不需要就删除掉

五、vscode上的git操作

如果熟悉了手动命令的原理,可以试试vscode上的图形化界面操作

1、vscode上提交git

a.vscode左下角

b.文件操作说明

c.vscode左上角说明

d.查找所以命令

所以用vscode图形化界面进行一系列git操作了。

2、相关git插件&使用(推荐 git history)

git history插件查看commit历史,界面如下:

六、git 常用简写命令 

1、如果git命令原理熟悉了,也可以用简写的

  gaa='git add --all' 

  gcmsg='git commit -m' 

  gb='git branch'

  gco='git checkout'

  gcb='git checkout -b'

  gd='git diff'

  gl='git pull'

 gm='git merge'

 gp='git push'

2、 查看自己电脑上的git命令简写

3、 简写出错或忘记

     使用which 命令或 where 命令 查看即可。比如 

参考文献:

git基础:https://www.liaoxuefeng.com/wiki/896043488029600

git官网:https://git-scm.com/book/zh/v2

git总结先到此!之后会更新

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值