百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 热门文章 > 正文

一文学会Git常用语法 git用法详解

bigegpt 2024-10-27 08:17 50 浏览

背景

可以说Git是任何一个程序员都逃不开的存在,在研发过程中,是否曾因对Git掌握不熟,而犯错误呢?本文适合使用过Git或稍微有基础者。来吧,让我们跟上这篇文章走上Git之旅。

文章概览

  1. Git原理
  2. Git常用命令
  3. 分支管理
  4. 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...