从零开始的git学习(所有命令后面-h有提示)

article/2025/6/17 1:57:07

基本组成

1、本地仓库——工作区下的.git目录,存放了管理该工程的所有版本数据
2、工作区——日常写代码的区域,直接写代码的界面就是工作区
3、暂存区——.git/index文件夹中

文件状态

1、已经提交(committed)已经安全保存到本地仓库
2、已经修改(modified)没提交保存
3、已经暂时存放(staged)

基本概念:修改记录

有的时候也称为节点,每次commit操作有一个对应的hash值
1、每个修改记录都有对应的id
2、当发现修改有问题时,可以进行回滚操作。
3、回滚的本质是一次新的更新以复原修改。但是如果不是针对最新记录进行回滚,会出现冲突。
这里需要举例说明

基本概念:分支

1、分支是一个远程仓库中的多个独立副本,副本之间是互不影响的。他们的文件修改记录都是相互独立的。
2、一个远程仓库默认有一个主分支,默认情况下文件会被存储到主分支。
3、创建分支时,需要基于:某个修改记录\某个分支\或者某个tag
4、一个分支的所有修改可一次全部更新到别的分支,称为合并。合并实际上是对目标分支提交一次新修改。但是如果目标分支则修改过某个文件,则可能产生冲突。

基本概念:TAG

1、标记某个修改记录,用于归档对应的分支下截止到这次修改的文件。有点像是游戏中的存档点。

git 基本配置

git 有三种基本配置:

git config --local  ///对当前仓库生效
git config --global  ///对当前用户的所有仓库生效,会修改~/.gitconfig 或 C:\Users\你的用户名\.gitconfig
git config --system  ///对当前系统下所有用户生效

最常见的配置如下,只需要在第一次使用git的时候配置即可,以后上传代码都不需要再配置了!!!

git config --global user.name  # 查看全局用户名
git config --global user.email  # 查看全局邮箱

git——与服务器的认证配置

ssh-keygen -t rsa -C "your email" 
直接按三次回车,可以看到公钥。
在代码管理平台的profile Settings中 找到SSH Keys, 添加SSH Keys,将公钥复制到Public Key即可

指令大全

1、将仓库克隆到本地 git clone
2、查看工作区修改的内容—— git diff
3、查看工作区文件的状态—— git status1、将文件移动到暂存区 git add / rm / mv
2、将工作目录中的修改文件和暂存区都保留到临时的栈中 git stash
3、将临时栈中的文件和暂存区恢复 git stash pop
4、git pull 将工作区和本地仓库都更新为最新。
5、git commit 将修改的文件提交到本地仓库
6、git push 将修改推送到远程仓库分支管理
1、git branch 列出所有本地分支
2、git branch/checkout -b //新建本地分支
3、git branch -d //删除本地分支
4、git checkout //切换本地分支
5、git merge //合并分支
6、git reset //强制回退到历史节点

基本命令1:git clone 将仓库克隆到本地。

//检查是否有工程权限
git clone xxx.git(URL) //生成name本地仓库

克隆的时候默认克隆的分支是主分支

基本命令2:在本地创建一个新的git 工程

git init name //生成name本地仓库

基本命令3:在本地创建一个新的git 工程

git init name //生成name本地仓库

基本命令4:对暂存区进行操作

git add xxx将某个文件 存入暂存区
git mv xxx 移动文件位置,或者重命名

基本命令5:比较差异

git diff --cached//比较当前暂存区中文件与上一次提交间的差异
git diff master ../当前工程路径 --name-status(只列出文件名)
//比较两个分支之间的差异

基本命令6:查看工作目录和暂存区的状态

git status //可以显示当前所在分支以及文件状态
(to be committed已经暂存尚未提交 not staged 还未暂存untracked 未跟踪
)

基本命令7:将暂存区的文件提交到本地仓库

git commit filename -m "xxxxx"//提交指定的文件,如果不指定文件则是暂存区中所有文件。
git log 可以查看此次提交的Id和描述信息。

基本命令8:将本地的分支推送到远端

在提交到本地仓库后,可以推送到远端
git push origin(服务器名) branch_name(远端显示的分支名)
服务器名可以通过git remote来查看,一般都是origin.

基本命令9:查看分支

git branch 查看本地的所有分支
git branch -r 查看远端服务器上的所有分支
git branch -a 本地,远端所有分支
git branch xxx新建分支但是不会切换到新的分支
git checkout -b xxx 新建分支且切换到新的分支
git branch -D xxx 删除本地分支
git branch -D -r xxx 删除远端服务器的分支
git push origin branchname 远程删除需要推送远端

基本命令10:获取分支的更新

git diff remote_branch local_branch //可以先查看一下本地分支和远端分支是否一致,远端分支是否有更新。
git pull origin remote_branch:local_branch 将远程仓库 origin 的remote_branch分支    获取+合并到本地某分支上
大多时候,远端的分支和本地的分支是一样的,直接
git pull origin remote_branch 即可为了给用户确认的余地,有fetch命令
git fetch origin remote_branch:local_branch 获取远端分支更新但是不合并
大多时候,远端的分支和本地的分支是一样的,直接
git fetch origin remote_branch 即可

基本命令11:分支的合并

我们先来介绍一下为什么需要有分支更新这个概念。
假如现在我们只有一个分支main ,那么大家都在这个分支上进行开发。这样显然是不合适的,因为我们需要保留稳定的版本。如果一直在main上开发,很难保证版本的稳定性。
那么假设我们现在默认main分支是稳定的版本。他的分支如下
main1.0->main1.2->main1.3(当前最新的稳定版本)
现在产品有3个功能模块需要开发,分别是支付模块,AI模块和客服模块。
一般开发组会这样:从main1.3分出三个分支P,A,C,分别在分支上开发这三个模块。等某个模块开发完毕,测试完毕后,再合并到main分支中。
合并这个工作由谁来进行呢?一般是版本的管理员。
假设现在管理员所在的分支是main1.3,我们需要将开发好的分支A合并到main1.3中。

git merge src dst //指定src分支合并到dst分支
//合并成功后,可将dst推送远端。git push origin dst

1、操作在本地进行。
没有发生冲突:更新的文件会被自动commit到本地仓库。工作区也更新。可以直接push到远程
发生冲突:冲突文件不被加入暂存区,非冲突文件加入暂存区。后续需要将冲突文件手动添加到暂存区,然后再commit才到本地仓库。
关于分支和merge操作,这两张图比较合适。在主干分支上,我们引出了一个分支来开发支付功能Feature,但是此时Master陆续有我们同事的工作在更新。一个节点就是一个commit。当我们开发完成时,master分支已经更新了两次。现在我们功能验证完毕,需进行分支合并。
在这里插入图片描述
这里我们以master合入Feature为例,结果如下。我们发现合入这个动作会让我们的分支多出一个节点,也就是多出一次commit记录。这次记录会同步这段时间内Master产生的更新。
在这里插入图片描述

基本命令12:如果当前进行了文件修改,但是没有add到暂存区,想要在工作区中进行回退

git status //可以看到哪些文件被修改但是没有add
git checkout .//回退所有modified状态的文件
git checkout -filename //仅回退一个文件
//再用status指令会发现该文件已经没有modified标识
git checkout commitid回退到某一个历史提交版本

基本命令13:本地修改提交到远程,对上一次提交进行amend

git status //可以看到哪些文件被修改但是没有track
git add. //所有未被track的文件添加到暂存区
git commit -am "add something"//提交到本地仓库
git commit --amend//可以在vim界面中修改上次提交的信息
//i :insert ///esc :wq(保存 退出)
git push origin master //推送到远端

基本命令14:下载仓库到本地后,开启新的分支进行开发

git checkout -b newbranch//开启新的分支并且切换到分支,会集成原有分支的所有的历史提交节点。
//进行开发,并且 

基本命令15:跨分支的部分更新——cherry-pick

假如现在我们的main分支的更新如下
main1.0->main1.1->main1.2
有一个新开发的业务从main1.1引出了分支,有
main1.1->feature1.2->feature1.3---->feature1.19
但是我们现在main分支1.2紧急需要feature中的某个功能,该功能在feature1.3中有开发。但是有不想合入整个feature,因为有feature的部分功能尚未验证。此时我们只想让feature1.3中的修改引入main1.2。

git checkout main1.2
git cherry-pick harshid(feature1.3对应的commit_id)//内容会同步,但是会在当前分支下添加一个新的commit_id, 和 harshid不同
git push origin //直接推送即可

切换到 main 分支

git checkout main

应用 feature 分支的提交 C(假设提交哈希为 abc123)

git cherry-pick abc123

测试通过后推送到远程

git push origin main

常见操作:git branch/checkout 分支操作

我们clone下来的是一个仓库,仓库有不同的分支,我们可以进行分支的切换。
1、在本地副本下,采用git branch 指令查看仓库的所有分支
2、并且用git checkout xxx进行分支的切换。也就是说,我们可能下载下的是主分支,但是可以在本地直接利用这个命令进行分支切换,这样本地的分支就变成了分支xxx。
3、如果当前副本已经进行了修改,还未提交修改,则无法切换分支。
4、基于3,如果需要使用多个仓库分支代码,建议克隆多个仓库副本
5、如果下载本地副本以后,有别的用户更新了远程仓库,那么当前本地仓库和远程仓库是不一致的。如果此时提交修改,则可能发生冲突。
如果我们在本地副本修改了文件集合A,远程仓库的文件集合B发生了更新,而A和B有交集,也会出现更新冲突导致的更新失败。
问题:如何处理冲突呢?

git add . //修改后的文件A保留到暂存区
git commit -m xxx//文件A已经提交到本地仓库,此时暂存区为空
git push //发现冲突
//此时务必先执行git status确保没有未提交的修改!!!
git pull //更新工作区和本地仓库为最新版本,这里需要手动解决冲突
git add .//重新将A添加到暂存区
git commit --amend --no-edit xxx//合并两次提交,而不是创建新的提交
git push -f //强制推送

问题:如果当前本地我们所在的分支是A分支,而该仓库实际上有多个分支,那么git pull指令更新的是A分支,还是仓库的所有分支?
git pull命令只会更新当前所在的本地分支,而不会同时更新其他分支
git pull的本质是两个操作的组合:
1、git fetch:从远程仓库下载所有分支的最新提交记录(但不合并到本地)。
2、git merge:将当前分支对应的远程分支(如origin/main)合并到本地当前分支。


http://www.hkcw.cn/article/rFbiOGdZbb.shtml

相关文章

辽宁舰编队南下 抵达菲律宾以东海域 持续高强度演训

6月2日,日本防卫省统合幕僚监部继续发布中国海军辽宁舰航母战斗群的相关动态。5月27日至5月29日,辽宁舰航母战斗群在菲律宾以东海域活动,并持续南下。期间,辽宁舰共进行了80架次舰载战斗机起降和60架次舰载直升机起降。5月30日,辽宁舰通过关岛所在的北纬13度线继续南下,目…

专家直播解读2025韩国大选 三大看点影响选情

韩国第21届总统选举将于3日举行,此次选举有三大看点。投票率是否接近80%或在70%左右徘徊;改革新党总统候选人李俊锡得票率是否破10%;进步阵营“代言人”柳时敏作家的言论争议是否会在最后时刻影响选民投票意向。图为韩国第21届总统选举候选人,包括共同民主党候选人李在明、…

美国已开始减少在叙利亚的军事存在 500名美军撤离

美国叙利亚问题特使汤姆巴拉克在接受土耳其电视台采访时透露,美国在叙利亚的军事存在将从八个基地减少至一个,并表示美国对叙利亚的政策将发生转变,因为过去的政策并未奏效。最近几周内,约有500名美军已从叙利亚撤离,多个美军基地被移交给由库尔德武装主导的“叙利亚民主力…

韩大选揭幕前,反华假信息席卷全国,李在明没想到,形势如此严峻

韩国总统大选进入倒计时,局势却愈发复杂莫测。6月3日清晨6时,全国14295个投票站将正式开放,但在大选揭幕前,韩国国内却爆发了前所未有的反华浪潮。首尔街头出现抗议者手举美国国旗,高喊“滚回中国”的口号,甚至连华人社区也成了极右翼团体的攻击目标。与此同时,虚假信息…

蒙古国总理“下台谢罪”反映了什么 炫富风波引爆政治炸弹

一张香奈儿包的照片在乌兰巴托街头引发了数万人的抗议,总理奥云额尔登精心打造的“平民政治家”形象也因此崩塌。市中心广场上,示威者的怒吼声划破夜空。4万余名蒙古民众联名请愿,最终导致奥云额尔登在国家大呼拉尔(议会)的信任投票中仅获44票,远低于所需的64票。总理儿子…

学者:中美交锋让中国打出“威望” 中国代表“灵魂三问”

在香会上,美国防长赫格塞思发表了一篇长达半小时的演讲,声称中国威胁迫在眉睫,美国必须准备打仗。然而,他的讲话并没有得到台下各国代表的响应,全场气氛尴尬至极。随后,中国代表团的张弛站起来,针对东盟地位提出了几个关键问题,直接打乱了美国精心策划的“威慑秀”,让…

郑钦文止步法网八强 期待不断突破

在6月3日17时开始的2025法网女单1/4决赛中,郑钦文以0-2不敌赛会头号种子萨巴伦卡。首盘比赛中,双方各破对方一个发球局,最终进入抢七局,郑钦文以6-7(3)输掉第一盘。这场比赛是郑钦文和萨巴伦卡的第8次交手,在之前的6次交手中,郑钦文均未能取胜。因此,萨巴伦卡被视为郑…

俄称在克里米亚抓获一名乌特工 涉嫌制造炸弹袭击

当地时间6月3日,俄罗斯联邦安全局通报称,在克里米亚抓获一名涉嫌制造炸弹并实施恐怖袭击的乌克兰特工人员。目前该案件已按叛国罪进行刑事立案。乌克兰方面对此暂无回应。当天早些时候,乌克兰国家安全局通报称,他们开展了一项特别行动,从水下袭击了克里米亚大桥,这是对该…

乌媒称乌方袭击克里米亚大桥 大桥严重受损

据乌克兰独立新闻社6月3日报道,乌克兰方面袭击了克里米亚大桥。乌克兰国家安全局表示,该桥严重受损。截至发稿前,俄罗斯官方尚未公开回应这一消息。责任编辑:0764

越狱豆包自行回家胖了一斤多 两个月后平安归来

今天上午,江苏省扬州市茱萸湾风景区(扬州动物园)的一只卡皮巴拉“豆包”在出逃两个月后终于回归。工作人员透露,“豆包”是自己回来的,在野外生活期间还长胖了。此前,园区发布了“悬赏公告”,引起广泛关注。工作人员表示,他们知道“豆包”的活动范围就在园区附近,但抓…

郑州黄帝千古情景区辟谣“倒闭” 实为升级改造

近日,郑州4A级景区黄帝千古情景区被传倒闭。视频中显示,景区入口架起围挡,发布者表示去年还很热闹,突然传出倒闭的消息。评论区有人猜测,景区可能要搬到黄帝故里景区附近。6月3日,黄帝千古情景区一名工作人员回应称,景区于2月底闭园,并非倒闭,而是进行升级改造。该工作…

媒体:哈佛女孩蒋雨融是一个工具人 舆论漩涡中的困惑与挑战

蒋雨融感到纳闷和郁闷是可以想见的。她作为哈佛400年校史上首位中国女毕业生代表,在全体毕业生面前发表演讲,掌声不断,讲完后现场4万多名观众起立致意,让她感觉“自己就是全哈佛最受欢迎、最受宠爱的人”。这要放到十几年前,大概率是一个“为国争光”的故事,国内有些媒体…

华为OD机试真题——书籍叠放(2025B卷:200分)Java/python/JavaScript/C/C++/GO最佳实现

2025 B卷 200分 题型 本专栏内全部题目均提供Java、python、JavaScript、C、C++、GO六种语言的最佳实现方式; 并且每种语言均涵盖详细的问题分析、解题思路、代码实现、代码详解、3个测试用例以及综合分析; 本文收录于专栏:《2025华为OD真题目录+全流程解析+备考攻略+经验分…

各地提振消费政策持续加力 “以旧换新”带动销量增长

目前,各地提振消费政策持续加力,“以旧换新”政策进一步优化流程、提升服务,带动商品消费明显提升。自去年消费品“以旧换新”政策实施以来,广西已累计开展相关主题活动超6000场,参与补贴活动的消费者突破500万人次,享受国补金额近65亿元。去年以来,在一系列优惠政策带动…

老头乐失控11岁姐姐飞身救妹 姐姐反应神速获赞无数

6月2日12点48分,河南省周口市西华县某乡镇饭店内发生了一起意外。一位老人在饭店就餐结束后准备驾驶老年代步电动车离开时,因操作不当,车辆冲破大门径直冲进店内。当时,饭店老板一岁多的孙女正在店内玩耍,就站在车辆行进路线上。眼看幼童就要被撞,她的姐姐迅速反应,一把…

Netty学习example示例(含官方示例代码)

Netty 官方示例代码 已clone至gitee 文章目录 simpleServer端NettyServerNettyServerHandler Client端NettyClientNettyClientHandler tcp(粘包和拆包)Server端NettyTcpServerNettyTcpServerHandler Client端NettyTcpClientNettyTcpClientHandler protoc…

男友还原女子在三亚被蛇咬身亡过程 延误救治引争议

近日,一名27岁女游客在三亚被蛇咬伤后不幸身亡,引起了广泛关注。6月1日晚,李丽和男友张鹏刚抵达三亚,在入住酒店后外出散步时,李丽的脚趾突然被绿化带窜出的不明生物咬伤。由于光线昏暗,两人只看到伤口上有两点牙印,怀疑是被蛇咬伤。张鹏紧急背起女友回到酒店求助,但未…

博主:榴莲价格暴跌只是开始 从奢侈品到平价果的蜕变

初夏时节,水果市场上的主角非榴莲莫属。曾经被视为“水果贵族”的榴莲价格迎来历史性下降——杭州猫山王从65元/斤跌至36.8元/斤,金华批发市场金枕榴莲更是降至18元/斤,价格直接腰斩。这场席卷全国的“榴莲降价潮”背后隐藏着复杂的市场因素。走进杭州某水果店,扑鼻而来的榴…

小沈阳晒照回应演唱会争议 接受批评继续努力

6月2日下午,艺人小沈阳发文回应女儿登台唱跳遭到的批评。他表示接受一切批评的声音,并表示还需继续努力,希望能对得起观众和喜欢他们的人。5月31日,小沈阳在沈阳举办演唱会,他的女儿沈佳润作为神秘嘉宾登场。沈佳润自信地进行唱跳表演,展现出女团范儿。然而,观众对此褒贬…

华为OD机试真题——最小矩阵宽度(宽度最小的子矩阵)(2025B卷:200分)Java/python/JavaScript/C/C++/GO最佳实现

2025 B卷 200分 题型 本专栏内全部题目均提供Java、python、JavaScript、C、C++、GO六种语言的最佳实现方式; 并且每种语言均涵盖详细的问题分析、解题思路、代码实现、代码详解、3个测试用例以及综合分析; 本文收录于专栏:《2025华为OD真题目录+全流程解析+备考攻略+经验分…