一文学会Git常用语法 git用法详解
bigegpt 2024-10-27 08:17 50 浏览
背景
可以说Git是任何一个程序员都逃不开的存在,在研发过程中,是否曾因对Git掌握不熟,而犯错误呢?本文适合使用过Git或稍微有基础者。来吧,让我们跟上这篇文章走上Git之旅。
文章概览
- Git原理
- Git常用命令
- 分支管理
- Git工具篇
1.Git原理
- 本地工作区、本地暂存区、本地仓库、远程仓库之间数据流程图如下:
- 本地工作区:本地保存代码的文件夹
- 本地暂存区:暂存区是一个文件,保存工作区中修改的文件名称
- 本地仓库:暂存区的改动提交到本地仓库,保存元数据和对象的数据库
- 远程仓库:远程代码仓库
2.Git常用命令
- git init <directoryName>:初始化本地工作目录,跟目录名
- git config --list:列出所有配置
- git config --global user.name yutao:配置提交人名称
- git config --global user.email yutao@example.com:配置提交人邮箱
- git clone <remoteBaseName>:克隆远程仓库到本地工作目录,跟远程仓库地址
- git fetch:从远程仓库获取最新代码到本地,不改变工作区或本地分支代码
- git fetch <remote>:抓取指定远程仓库
- git pull:不仅从远程仓库获取最新代码,而且还自动将这些更改合并到本地工作区或本地分支
- git pull --rebase <remote> <localbranchname>:拉取远程分支,但过滤合并提交(自动产生)、重复提交
- git push <remote> <localBranceName>:推送本地分支到远程分支
- git push origin dev:test:将本地dev分支推送到远程test分支上
- git branch:查看本地分
- git branch -r:查看远程分支
- git branch -a:查看所有分支,包括本地和远程
- git branch <branchName>:创建新分支,比如当前在master分支,既基于当前master分支创建
- git branch -d <branchName>:删除本地分支
- git checkout <branchName>:切换分支
- git checkout -b <branchName>:创建并切换到新分支,比如当前在master分支,既基于当前master分支创建
- git add <fileName>:将工作目录修改文件添加到暂存区
- git reset:有3种模式,soft、mixed、hard,默认mixed模式。soft将撤回的代码存放到暂存区,mixed将撤回的代码放到工作区,hard彻底回退到某个版本,丢弃撤回的代码本地没有commit代码也将擦除。
- git reset <fileName>:将暂存区文件撤销到工作区,撤销之前的git add操作
- git reset HEAD^:回退所有内容到上个版本
- git reset HEAD^ <filename>:回退某个文件到上个版本
- git reset <commitID>:回退到指定版本
- git checkout --fileName:清除工作区的改动,回到跟版本库一样的状态
- git stash/git stash push:现在想要切换分支,但是还不想要提交之前的工作,所以贮藏修改,贮藏被推送到栈上,再看工作目录是干净的
- git status:检查当前文件状态,工作目录文件只有两种状态已跟踪或未跟踪,未跟踪表示未纳入git版本管理
- git commit -m <comments>:将暂存区改动提交到本地仓库
- git commit -a -m <comments>:提交之前不再需要 git add 文件, -a选项使本次提交包含了所有修改过的文件
- git commit --amend -m <comments>:将新修改的代码追加到前一次提交的commit中
- git commit --amend --no-edit:不更改前一次提交的备注信息情况下,追加新的修改到上一次commit中
- git rm --cached <fileName>:把文件从暂存区删除,但仍保留在工作目录中,且未被git跟踪
- rm fileName->git rm <fileName>:把文件从工作目录中删除
- git mv <fileName> <newFileName>:修改工作区文件名
- git stash:将工作目录的文件修改与暂存区未完成的修改保存到一个栈上,然后可以切换到其他分支,贮藏的改动任何时候都可重新应用这些改动
- git stash list:查看贮藏的东西
- git stash apply/pop:还原最近一次贮藏
- git stash apply stash@{2}:还原指定ID的贮藏
- git stash -u:贮藏未跟踪的文件
- git stash branch <branchName>:从贮藏创建分支
- git clean -n:n参数先看看会删掉哪些文件
- git clean -f:若参数clean.requireForce未改为false,则需要-f参数对未跟踪文件强制删除
- git clean -d:删除未跟踪的目录
- git log:查看git日志,最新提交在最上面
- git log --pretty=format:"%h - %an, %cn, %cd : %s":格式化日志,%h提交的简写哈希值,%an作者名字,%cn提交者名字,%cd作者修订日期,%s提交说明
- git log --pretty=format:"%h %s" --graph:用ASCII字符串来形象地展示你的分支、合并历史
- git log --oneline --all --graph:查看git日志,每行只显示哈希值和提交说明
- git relog:引用日志,可以查看所有分支的所有操作记录,包括被删除的commit和reset操作
- git remote -v:查看所有远程仓库
- git remote add <shortname> <url>:添加一个新的远程Git仓库,同时指定一个方便的使用的简写
- git remote show <remote>:查看某一个远程仓库的更多信息
- git remote rename <a> <b>:远程仓库重命名
- git remote remove <remote>:删除远程仓库,本地将看不到关联的远程仓库
- git merge <branchename>:git checkout master,然后执行git merge hotfix,既将hotfix分支代码合并到master
- git rebase <branchename>:变更分支的基线,比如master分支上点A,以A点创建feature分支,然后推进D、E两提交。此时master分支也推进B、C两个提交,此时要对feature进行rebase,则checkout到feature分支,执行git rebase master,就会把D、E两点提交连接到C点后面
- git reset <commitid> --hard:git relog查看commitid,撤销rebase操作
- git reset ORIG_HEAD:撤销刚刚rebase操作
- git rebase --continue:在rebase的过程中,可能会出现冲突conflict情况,git会停止rebase,解决冲突后git add更新内容到索引,无需执行git commit,只要执行本命令,git会继续rebase余下
- git rebase -i [startpoint] [endpoint]:合并多个commit为一个,startpoint为开区间既要找目标的前一个id,endpoint闭区间,假如有两行pick eaca5fe add a.txt, s 7fc6da4 add b.txt,保存退出,再继续修改合并备注
- git revert <commitid>:撤销提交,git revert用一个新的commit回滚之前的commit,HEAD继续前进,reset是把HEAD向后移动一下
3.分支管理策略
分支管理策略目前有git flow、github flow、gitlabflow,在过去的开发经验中,个人觉得git flow更适合本地团队分支管理。git flow主要分支如下:
- master:主分支,主分支的每个版本都是质量稳定和功能齐全的发布版
- hotfix:紧急修复当前发布版本bug,从master分支创建,修复后合并回master、release、develop
- release:准发布版本分支,从develop分支创建,仅对这个预发版本问题进行修复,修复后合并回develop
- develop:基于主分支创建,用于日常开发,存放最新开发版本代码,当开发分支稳定后,可以发布release版
- feature:基于develop分支创建,开发新模块,开发结束合并回develop分支
4.Git工具篇
常用的git图形工具如idea、sourcetree、git自带的gitk等。个人经验git bash、gitk最基础,在各种环境下都能使用。在合并代码冲突时可以配置一下第三方工具提供效率,比如p4merge,需要提前下载https://www.perforce.com/products/helix-core-apps/merge-diff-tool-p4merge,配置如下:
git config --global diff.tool p4merge
git config --global difftool.p4merge.cmd "'C:\Program Files\Perforce\p4merge.exe' $LOCAL $REMOTE"
git config --global merge.tool p4merge
git config --global mergetool.p4merge.cmd "'C:\Program Files\Perforce\p4merge.exe' $PWD/$BASE $PWD/$REMOTE $PWD/$LOCAL $PWD/$MERGED"
git config --global mergetool.p4merge.trustExitCode false
git config --global mergetool.keepBackup false
总结
Git作为代码管理工具,是程序员开发必备技能,掌握常用命令,大大提高开发效率。
相关推荐
- AI「自我复制」能力曝光,RepliBench警示:大模型正在学会伪造身份
-
科幻中AI自我复制失控场景,正成为现实世界严肃的研究课题。英国AISI推出RepliBench基准,分解并评估AI自主复制所需的四大核心能力。测试显示,当前AI尚不具备完全自主复制能力,但在获取资源...
- 【Python第三方库安装】介绍8种情况,这里最全看这里就够了!
-
**本图文作品主要解决CMD或pycharm终端下载安装第三方库可能出错的问题**本作品介绍了8种安装方法,这里最全的python第三方库安装教程,简单易上手,满满干货!希望大家能愉快地写代码,而不要...
- pyvips,一个神奇的 Python 库!(pythonvip视频)
-
大家好,今天为大家分享一个神奇的Python库-pyvips。在图像处理领域,高效和快速的图像处理工具对于开发者来说至关重要。pyvips是一个强大的Python库,基于libvips...
- mac 安装tesseract、pytesseract以及简单使用
-
一.tesseract-OCR的介绍1.tesseract-OCR是一个开源的OCR引擎,能识别100多种语言,专门用于对图片文字进行识别,并获取文本。但是它的缺点是对手写的识别能力比较差。2.用te...
- 实测o3/o4-mini:3分钟解决欧拉问题,OpenAI最强模型名副其实!
-
号称“OpenAI迄今为止最强模型”,o3/o4-mini真实能力究竟如何?就在发布后的几小时内,网友们的第一波实测已新鲜出炉。最强推理模型o3,即使遇上首位全职提示词工程师RileyGoodsid...
- 使用Python将图片转换为字符画并保存到文件
-
字符画(ASCIIArt)是将图片转换为由字符组成的艺术作品。利用Python,我们可以轻松实现图片转字符画的功能。本教程将带你一步步实现这个功能,并详细解释每一步的代码和实现原理。环境准备首先,你...
- 5分钟-python包管理器pip安装(python pip安装包)
-
pip是一个现代的,通用、普遍的Python包管理工具。提供了对Python包的查找、下载、安装、卸载的功能,是Python开发的基础。第一步:PC端打开网址:选择gz后缀的文件下载第二步:...
- 网络问题快速排查,你也能当好自己家的网络攻城狮
-
前面写了一篇关于网络基础和常见故障排查的,只列举了工具。没具体排查方式。这篇重点把几个常用工具的组合讲解一下。先有请今天的主角:nslookup及dig,traceroute,httping,teln...
- 终于把TCP/IP 协议讲的明明白白了,再也不怕被问三次握手了
-
文:涤生_Woo下周就开始和大家成体系的讲hadoop了,里面的每一个模块的技术细节我都会涉及到,希望大家会喜欢。当然了你也可以评论或者留言自己喜欢的技术,还是那句话,希望咱们一起进步。今天周五,讲讲...
- 记一次工控触摸屏故障的处理(工控触摸屏维修)
-
先说明一下,虽然我是自动化专业毕业,但已经很多年不从事现场一线的工控工作了。但自己在单位做的工作也牵涉到信息化与自动化的整合,所以平时也略有关注。上一周一个朋友接到一个活,一家光伏企业用于启动机组的触...
- 19、90秒快速“读懂”路由、交换命令行基础
-
命令行视图VRP分层的命令结构定义了很多命令行视图,每条命令只能在特定的视图中执行。本例介绍了常见的命令行视图。每个命令都注册在一个或多个命令视图下,用户只有先进入这个命令所在的视图,才能运行相应的命...
- 摄像头没图像的几个检查方法(摄像头没图像怎么修复)
-
背景描述:安防监控项目上,用户的摄像头运行了一段时间有部分摄像头不能进行预览,需要针对不能预览的摄像头进行排查,下面列出几个常见的排查方法。问题解决:一般情况为网络、供电、设备配置等情况。一,网络检查...
- 小谈:必需脂肪酸(必需脂肪酸主要包括)
-
必需脂肪酸是指机体生命活动必不可少,但机体自身又不能合成,必需由食物供给的多不饱和脂肪酸(PUFA)。必需脂肪酸主要包括两种,一种是ω-3系列的α-亚麻酸(18:3),一种是ω-6系列的亚油酸(18:...
- 期刊推荐:15本sci四区易发表的机械类期刊
-
虽然,Sci四区期刊相比收录在sci一区、二区、三区的期刊来说要求不是那么高,投稿起来也相对容易一些。但,sci四区所收录的期刊中每本期刊的投稿难易程度也是不一样的。为方便大家投稿,本文给大家推荐...
- be sick of 用法考察(be in lack of的用法)
-
besick表示病了,做谓语.本身是形容词,有多种意思.最通常的是:生病,恶心,呕吐,不适,晕,厌烦,无法忍受asickchild生病的孩子Hermother'sverysi...
- 一周热门
- 最近发表
-
- AI「自我复制」能力曝光,RepliBench警示:大模型正在学会伪造身份
- 【Python第三方库安装】介绍8种情况,这里最全看这里就够了!
- pyvips,一个神奇的 Python 库!(pythonvip视频)
- mac 安装tesseract、pytesseract以及简单使用
- 实测o3/o4-mini:3分钟解决欧拉问题,OpenAI最强模型名副其实!
- 使用Python将图片转换为字符画并保存到文件
- 5分钟-python包管理器pip安装(python pip安装包)
- 网络问题快速排查,你也能当好自己家的网络攻城狮
- 终于把TCP/IP 协议讲的明明白白了,再也不怕被问三次握手了
- 记一次工控触摸屏故障的处理(工控触摸屏维修)
- 标签列表
-
- mybatiscollection (79)
- mqtt服务器 (88)
- keyerror (78)
- c#map (65)
- resize函数 (64)
- xftp6 (83)
- bt搜索 (75)
- c#var (76)
- mybatis大于等于 (64)
- xcode-select (66)
- mysql授权 (74)
- 下载测试 (70)
- linuxlink (65)
- pythonwget (67)
- androidinclude (65)
- logstashinput (65)
- hadoop端口 (65)
- vue阻止冒泡 (67)
- oracle时间戳转换日期 (64)
- jquery跨域 (68)
- php写入文件 (73)
- kafkatools (66)
- mysql导出数据库 (66)
- jquery鼠标移入移出 (71)
- 取小数点后两位的函数 (73)