一文实现玩转Git(新人必看)

Windows.7z 对*.*o文件进行直接操作,这时就需要用到crx2rnx工具将下载的*.*d文件转换为*.*o文件 立即下载

一文实现玩转Git(新人必看)

Git简介

Git是一个开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理。Git 是 Linus Torvalds 【Linux之父】为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。

分布式相比于集中式的最大区别在于开发者可以提交到本地,每个开发者通过克隆(git clone),在本地机器上拷贝一个完整的Git仓库。

  • 集中式:版本库式集中放在中央服务器的。需要进行的时候,先从中央服务器中获得最新的版本,然后进行自己的工作,完成后,在把自己修改后的内容推送给中央服务器。因此最大的缺点是没有网络是不行的,并且中央服务器如果出了问题整个系统就瘫痪了。
  • 分布式:没有中央服务器,每个机器上都有完整的版本库,多人协作只需要将自己的修改推送给其他人即可。因此一个人机器出问题只需要从别的机器上拷贝一份即可。
Git的windows安装

可以直接在官网下载:https://git-scm.com/download

但是官网速度可能很慢,可以换一个源:https://npm.taobao.org/mirrors/git-for-windows/

这个源向下滑动找到最新版本,然后点进去,选择符合自己机器和系统的版本下载即可。

安装过程就保持默认就行。

安装完成后,在开始菜单找到Git Bash,点击运行成功就说明下载完成;
在这里插入图片描述
安装完成后,设置一下自己的id和email:

$ git config --global user.name "your id"
$ git config --global user.email "your mail"
创建版本库

版本库就是一个目录,这个目录里的所有文件都可以被git管理,每个文件的修改、删除等git都可以追踪,从而任何时刻可以追踪修改历史并可以还原。

创建版本库的步骤:

  • 创建一个新目录:

    $ mkdir test   --创建目录
    $ cd test      --进入该目录
    
  • 将这个目录变为可以被git管理的仓库:

    $git init   --初始化为版本库
    

创建完成后,用 ls -ah 查看该目录内容,可以看到有 .git/ ,说明创建成功了,git文件是帮助版本管理的。
在这里插入图片描述

本地仓库各种玩法
将文件添加到仓库

在test目录下创建一个txt文件并添加至仓库:

在此处我用vi创建了一个first.txt的文件,内容如下:

This is my first time using Git!
I believe in becoming a Master Git!

保存过后,下面是将其添加至本地仓库:

  • 使用 git add <filename> 命令,将文件添加至暂存区:

    $ git add first.txt
    
  • 使用 git commit -m <message> 命令,将暂存区的文件提交至仓库:

    $ git commit -m "I commit my first.txt. That's a test."
    

在这里插入图片描述

tips:可以向暂存区中放置多个文件,最后一次性commit即可

修改文件

修改first.txt 的内容,添加一行内容。

用git status查看当前仓库状态:

$ git status
On branch master
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
        modified:   first.txt

no changes added to commit (use "git add" and/or "git commit -a")

可以看到,git status 结果说明,有文件被修改但是并没有被commit。

通过git diff <filename> 可以知道哪些内容被修改了:

$ git diff first.txt
warning: LF will be replaced by CRLF in first.txt.
The file will have its original line endings in your working directory
diff --git a/first.txt b/first.txt
index 00bce21..234610e 100644
--- a/first.txt
+++ b/first.txt
@@ -1,2 +1,3 @@
 This is my first time using Git!
 I believe in becoming a Master Git!
+Add a line.

和上面步骤一样,通过 git add 和 git commit 将文件修改提交至仓库,然后git status查看就会发现仓库目前无修改等内容。

总的流程如下:
在这里插入图片描述

版本回退

在git中,可以通过git log 查看版本控制系统的历史记录,显示顺序是由最近到最远提交:

$ git log
commit d645642c32fd9272ed2d14d0369c60cefb2dab2b (HEAD -> master)
Author: XXXX <XX@mymail.com>
Date:   Thu Sep 17 11:29:42 2020 +0800

    I change first.txt.

commit 8925d8e75e0ae3f6b2fae3fb11cf3861f67edf01
Author: XXXX <XX@mymail.com>
Date:   Thu Sep 17 11:01:27 2020 +0800

    I commit my first.txt. That's a test.

如果因为某种原因需要回到之前的某个版本,该怎么做?

采用git reset --hard commit_id 即可返回某个步骤 【HEAD^可以表示上一个版本】

$ git reset --hard HEAD^
HEAD is now at 8925d8e I commit my first.txt. That's a test.

$ cat first.txt
This is my first time using Git!
I believe in becoming a Master Git!

可以看到通过该方法就回到了之前的提交版本,此处的HEAD^可以用 git log中的 id 代替

回到之前的修改后,还可以再回到之前的版本吗?

只要知道每个版本的ID就可以回到任意版本,虽然回到之前版本后使用git log将看不到之后的版本号,但是通过git reflog 可以看到每一次提交的版本号,因此找到对应的版本号即可回到任意版本。

$ git reflog
8925d8e (HEAD -> master) HEAD@{0}: reset: moving to HEAD^
d645642 HEAD@{1}: commit: I change first.txt.
8925d8e (HEAD -> master) HEAD@{2}: commit (initial): I commit my first.txt. That's a test.

可以看到之前的版本id是d645642,因此使用git reset恢复:

$ git reset --hard d645642
HEAD is now at d645642 I change first.txt.

$ cat first.txt
This is my first time using Git!
I believe in becoming a Master Git!
Add a line.

因此通过commit_id便可以通过git reset回到任意版本!

管理修改

理解一下Git管理的是修改而不是文件:

先对文件进行修改然后git add,然后再修改文件,然后提交:

对first.txt进行了修改:

$ cat first.txt
This is my first time using Git!
I believe in becoming a Master Git!
Add a line.

I change this file.

然后 git add first.txt ,将其加入暂存区

然后再次对first.txt进行了修改,然后git commit ,可以看到提交成功。

但是此时的git status状态显示first.txt有修改却没有提交,这说明第二次的修改实际上并未提交到仓库上去,说明了Git管理的是修改而不是文件。

在这里插入图片描述

同时,通过git checkout --filename 可以丢弃在工作区的修改:

first.txt的第二个修改还没有提交,虽然文件保存过了,但是可以通过 git checkout 丢弃这次修改,然后会看到文件回到了上次commit或者add的状态。
在这里插入图片描述

删除文件

在本地执行 rm 就可以将文件删除,但是仓库里保存的信息仍然有这个文件。

$ rm first.txt

通过git status查看状态:

$ git status
On branch master
Changes not staged for commit:
  (use "git add/rm <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
        deleted:    first.txt

no changes added to commit (use "git add" and/or "git commit -a")

可以看到该修改还没有提交至仓库。

如果确实希望删除该文件,则将该修改进行提交即可,即执行’git commit -m “somethings” ’

如果不希望删除,则恢复这个操作即可, 通过 git checkout -- first.txt或者通过 版本回退即可。
在这里插入图片描述

远程仓库玩法
预先配置

首先创建一个GitHub账号【全球最大同性交友网站(*^_^*)】,由于本地Git仓库和GitHub仓库之间的传输是通过SSH加密的,因此需要设置SSH。

  • 在用户主目录下,看看有没有.ssh目录,如果有并且这个目录下有id_rsa和id_rsa.pub这两个文件就可直接跳到下一步,否则的话,需要创建一个SSH Key ,ssh-keygen -t rsa -C "youremail@example.com",一路回车默认即可,然后就可以找到.ssh目录,并且有id_rsa和id_rsa.pub两个文件,其中,id_rsa是私钥,id_rsa.pub是公钥
  • 登陆自己的Github,然后点击自己头像,选择 setting,点击SSH and GPG keys ,添加一个新的SSH keys,将id_rsa.pub的内容粘贴到Key中即可

至此,完成了本地仓库和远程仓库的SSH配置。

建立远程仓库

希望的目标:在本地创建了一个Git仓库后,又想在GitHub创建一个Git仓库,并且让这两个仓库进行远程同步。

在Github建立仓库:

登陆GitHub,然后,在右上角找到“Create a new repo”按钮,创建一个新的仓库。
在这里插入图片描述

可以将仓库名字命名为learn-git,之后绑定要用到。
在这里插入图片描述

本地与远程仓库同步

然后将本地仓库与远程仓库进行关联:

 git remote add origin git@github.com:name/learn-git

注意将name替换成自己的name,后面为Github的仓库名。

默认远程库的名字就是origin,当然可以改成别的。

通过 git push -u origin master 将本地内容推送到远程库中。

如果推送失败:

出现git提交远程报错[rejected] master -> master (fetch first),则 输入git pull --rebase origin master ,之后再 git push即可。

$ git push -u origin master
Enumerating objects: 10, done.
Counting objects: 100% (10/10), done.
Delta compression using up to 4 threads
Compressing objects: 100% (6/6), done.
Writing objects: 100% (9/9), 813 bytes | 203.00 KiB/s, done.
Total 9 (delta 2), reused 0 (delta 0), pack-reused 0
remote: Resolving deltas: 100% (2/2), done.
To github.com:coding-dingjq/learn-git
   175f009..954125e  master -> master
Branch 'master' set up to track remote branch 'master' from 'origin'.

然后查看Github的learn-git仓库,可以看到本地的first.txt已经被推送至仓库。

如何从Github远程仓库同步信息到本地呢?

git clone!

git clone git@github.com:name/learn-git

就可以实现从远程库克隆文件到本地仓库了。

分支管理

Git通过分支管理来进行版本控制,每个分支代表着一条时间线,master分支就是主分支,也可以创建不同的分支,最后进行提交与合并即可。

分支创建与切换

创建分支:git branch name

切换分支:git checkout name 或者 git switch name

git checkout -b name或者 git switch -c name 可以创建并切换分支。

通过git branch 可以查看分支信息。

试一下新建一个分支并在该分支上做修改:

在这里插入图片描述

新建了一个分支并修改了first.txt的内容,然后提交该修改。

$ git add first.txt
$ git commit -m "create a new branch and change first.txt on the new branch"
[dev fcf0b4d] create a new branch and change first.txt on the new branch
 1 file changed, 2 insertions(+)

切换回master分支查看内容:

$ git checkout master
Switched to branch 'master'
Your branch is up to date with 'origin/master'.

$ git branch
  dev
* master

$ cat first.txt
This is my first time using Git!
I believe in becoming a Master Git!
Add a line.

I change this file.

会发现,first.txt并没有被修改。

合并分支

实际上,当前分支的关系如下图所示:
在这里插入图片描述

因此,要想同步dev分支上的修改到master分支,需要进行分支合并。

通过git merge dev 将dev分支合并至当前分支,查看first.txt内容会看到在dev上的修改已经生效于master。
在这里插入图片描述

此时实际上dev和master分支已经一致了, 可以通过git branch -d dev 删除dev分支。

解决冲突

在不同分支上进行修改,合并时可能会引发冲突,例如都对first.txt的第一行进行了修改,合并时就会产生冲突,没办法合并。对于这种情况,Git的方法是先手动解决冲突,再合并。

动手试一下:

在dev和master分支上都在first.txt的同一行添加不同内容并commit:

在master分支上修改:
在这里插入图片描述

在dev分支上修改:
在这里插入图片描述
切换到master分支时,可以看到有提示:
在这里插入图片描述
指当前master分支领先远程仓库两次提交,可以用git push同步。

进行git merge合并:

$ git merge dev
Auto-merging first.txt
CONFLICT (content): Merge conflict in first.txt
Automatic merge failed; fix conflicts and then commit the result.

可以看到有冲突,

查看此时的first.txt 内容:
在这里插入图片描述

可以看到在有冲突的地方进行了部分修改。

Git用<<<<<<<,=======,>>>>>>>标记出不同分支的内容

在此处修改后在提交即可,也就是手动处理冲突再提交的思想。也就是当Git无法自动合并分支时,就必须首先解决冲突。解决冲突后,再提交,合并完成。解决冲突就是把Git合并失败的文件自己手动编辑,再提交。

用带参数的git log也可以看到分支的合并情况:
在这里插入图片描述

Git内容非常多,并且细节也颇为繁琐,不过掌握以上内容便可以玩转大部分Git内容,遇到更多其他需求可以自行查阅资料即可!

GitHub for windows GitHub for windows 离线版本 对于下载慢的童鞋提供 立即下载

相关推荐

git for windows中文汉化

根据git源码编译并制作的汉化包 git for windows 编译并添加了部分界面的汉化。 源码版本是2.17.0, 汉化方法,将压缩包解压到git安装目录

利用 Topgit 对 Nutch 定制开发进行代码管理(二)

继 : 利用 Topgit 对 Nutch 定制开发进行代码管理(一)   6. 利用 Topgit 对 Nutch 定制开发进行代码管理 了解了 Topgit 的原理和使用方法之后,就可以利用 Topgit 对 Nutch 定制开发进行源代码管理了。   6.1 准备版本库   ● 克隆完整的 Nutch 项目代码 从 github 上克隆完整的 nutch 项目代码:   ...

devalone 的专栏 550

Zemax实战:20×超高清变焦镜头设计全流程解析(从架构到制造)

本文详细解析了使用Zemax软件设计一款20倍变焦比、恒定F2.8光圈8K超高清镜头的全流程。从应对恒定光圈、宽光谱与8K解析力三大挑战的初始架构规划,到构建多重组态模型、分七阶段进行像差优化与公差分析,最终跨越制造鸿沟,为广播级影视与高精度工业检测应用提供了实战指南。

sun99的博客 551

【Git原理与使用】-- 多人协作

理解分布式版本控制系统,学习远程仓库与本地仓库的交互操作,掌握多⼈协作开发模 式

weixin_64609308的博客 3321

半导体关键系统之RMS浅谈

这种系统还要求设备在设备上的配方发生变化时通知工厂主机,并需要与EAP(Equipment Automation Process)联结,旨在实时管控自动化系统所用配方与用户当初的设定是否匹配,从而使得自动化系统所用的配方更加趋于安全。例如,制药行业中的药品生产管理系统(GMP),它对药品的生产过程进行严格控制,包括原材料的采购、生产工艺流程、质量控制等方面。这些系统通常与企业的生产系统集成,能够对产品的配方进行精细化管理,包括配方的设计、试验、验证、生产等环节。

阿拉伯梳子的专栏 6155

用户视角下的vfsglobal预约困境:从注册到登录的全流程避坑指南

本文详细解析了vfsglobal签证预约系统从注册到登录的全流程操作,帮助用户避开常见技术陷阱。针对IP限制、DNS解析、浏览器缓存等登录障碍提供实用解决方案,并揭示账号管理的隐藏规则与支付环节的延时处理技巧,助力用户高效完成签证预约。

ol78901234的博客 871

gitLab常见报错解决。

**push报错:**gitLab报错failed to push some refs to ‘git@1xxxxxxxxxx.com/xcxVIP.git’; pull报错: $ git pull error: You have not concluded your merge (MERGE_HEAD exists). hint: Please, commit your changes befo...

沉默的小猴子的博客 9813

微信中调起支付宝支付

微信中调用支付宝支付,首先我们知道微信是不能直接调用支付宝的,所以我们需要使用一个中间页提示用户在浏览器中打开,然后进行网页支付或打开app支付。以下为详细唤起支付宝的步骤、业务代码以及相关页面图。 如有问题欢迎评论留言,看到定回复哦^_^\(^o^)/~ 一、微信中唤起支付宝,有几个步骤: 1、中间页引导用户在浏览器中打开去唤起支付宝。 2、浏览器中打开支付宝或app中打开支付宝。 3...

han_calligrapher的博客 2万+

【亲测免费】 安装使用RunCat_for_windows:让可爱的猫咪陪伴你的CPU监控

安装使用RunCat_for_windows:让可爱的猫咪陪伴你的CPU监控 【下载地址】安装使用RunCat_for_windows让可爱的猫咪陪伴你的CPU监控 RunCat_for_windows是一款小巧而有趣的Windows桌面应用程序,它以一个活泼奔跑的小猫形象,实时展示你的CPU使用情况。当你投入工作时,这...

gitblog_06565的博客 1878

20 Embedding 与向量检索:语义为什么能变成距离

Embedding 是 RAG 语义检索的数学基础。本文用工程视角讲清文本如何变成向量,为什么语义相近会表现为距离相近,Top-K 检索如何工作,以及在模型选择、同模型约束、精确匹配和召回评估上的常见坑。

老于的笔记的专栏 6203

YOLOv11改进 | 引入SFSConv空间频率选择卷积(含SFSC3k2二次创新),空间频率特征协同作用,检测性能全面提升

本文提出在YOLOv11中引入SFSConv空间频率选择卷积模块,通过显式分离和动态融合空间域与频率域特征,解决传统卷积对多尺度目标检测的局限性。SFSConv包含空间频率分离、动态权重融合和协同特征重建三个核心机制,并进一步创新提出SFSC3k2结构,通过双路频率分支增强特征协同作用。该改进显著提升了YOLOv11在遥感、医学等多尺度复杂场景下的检测性能,实验显示在微小目标检测任务中mAP提升5%-10%。代码实现展示了SFSConv模块的核心逻辑及其在PyTorch中的高效实现。

走向CTO的路上... 767

一文带你玩转Git(含有常用命令和使用场景)

Git基本操作git的常见基本操作游走于远程仓库、本地仓库、暂存区、工作区.需要使用pull从远端拉取更新工作区数据,其过程可用fetch/clone命令(拉取)和命令组合操作,效果类似。工作区的数据通过add操作将文件添加到暂存区,然后commit(提交)后提交到本地仓库,本地仓库执行(push)推送至远程仓库。这些是常用的流程,不同代码存储区域之间的转换流程大致如下:图中不同仓库之间的转换命令在现实工作中比较常用,接下来我将根据这张图来介绍不同仓库之间转换所使用的命令。

qq_38248841的博客 1万+

Android 埋点信息分析——statsd框架

StatsPullAtomService 用以采集数据,并将数据填充到参数中,在StatsManager.PullAtomCallbackInternal 中会转换成 Parcel 格式传入到 native。 StatsCallbackPuller::PullInternal 中会回调StatsManager.PullAtomCallbackInternal 的onPullAtom,该函数中会回调StatsCallbackPuller::PullInternal 中定义的PullResultRecei

私房菜 2628

全网最全git教程,一文带你玩转git

Git是一个分布式版本控制系统,用于跟踪文件和文件夹的变化。它最初由Linus Torvalds在2005年创建,用于管理Linux内核的开发。Git的设计目标是速度、数据完整性和支持分布式、非线性工作流程。与集中式版本控制系统(如SVN)不同,Git将代码仓库完全复制到每个开发者的本地计算机上,每个开发者都具有完整的代码历史记录和版本信息。这种分布式的特性使得开发者可以在没有网络连接的情况下进行工作,并且可以更轻松地处理分支、合并和代码冲突等操作。

老衲爱洗头的博客 1161

SOC、SOH、OCV

1)放电实验法的测量SOH结果最为准确,但是深度放电会对影响电池的寿命;2)电阻折算法仅将电阻作为评价SOH的依据,但电池老化时电阻的变化范围较小,因此该方法的误差较大;3)电阻折算法需要对电池进行大量的实验,绘制成Map图,但是该方法有一定的局限性,针对不同的电池需要绘制不同的Map图;4)阻抗分析法是目前最为前沿的方法,可以根据阻抗谱较为直观的分析SOH的变化,但是该方法需要的成本较高,每台设备约为5万美元。

m0_61973119的博客 2万+

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

一文了解git玩转github(集成idea)

通过该博客,可以了解版本控制工具的由来,git从安装到,提交代码到github.以及如何提供对idea对git的支持。搭建属于自己的网站

程序猿学社的博客 4426

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

亡羊补牢,一文讲清各种场景下GIT如何回退

经过前面的学习,GIT的基本原理以及使用想必大家已经是门清了,但是在实际操作中,很多同学还是会有误操作的情况。本文就讲下各种场景下,代码如何在GIT中回退

战斧的博客 2万+

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

一文带你精通Git

博主之前直接已经写过了git的相关基础博客了,老铁可以自行去查看。本篇文章的目录是为了深入的学习git,关于git的基础部分我们可以我们之前在学习git的时候开始重点学习的是暂存区、版本库.下面我们来学习一下git对象是什么。Git 的核心部分是一个简单的键值对数据库。你可以向该数据库插入任意类型的内容,它会返回一个键值,通过该键值可以在任意时刻再次检索该内容。下面我们新建一个目录Test,并打开git Bash输入这个git init命令。 我们交给git管理的文件都放到了这个目录里面。下面我们来看一条

qq_56999918的博客 8299

GIT 必知必会操作总结一

GIT 是一个开源的分布式版本管理系统,是 Linux 之父 Torvalds 为了帮助管理Linux 内核开发而开发的一个版本控制软件它使用一个特殊的叫做仓库的数据库来记录文件的变化,仓库中每个文件都有一个完整的版本历史记录,可以看到谁在什么时间修改了哪些文件的哪些内容,在需要的时候也可以将文件恢复到之前的某一个版本如果没有版本控制系统,那么就只能通过最原始的方式来管理文件,比如将文件按日期备份出多个副本而当很多项目成员同时在修改同一个项目时,就需要手工来合并两个人的修改内容。

优质后端技术知识记录 914

一文教你玩转git

首先进入一个文件夹之后,使用这个命令是先初始化一个git仓库 git init 它会默认创建一个名为master的分支 下面这个用于查看是否有修改的文件,如果有就会报红 git status 下面这个用于查看文件修改的细节 git diff test.txt 下面这个是提交到暂存区 git add test.txt 下面这个是提交修改,记住每操作一次都要进行add 和commit git com...

haeasringnar的博客 4574

【玩转MacBook】Git安装

本文演示在 MacBook 上安装 Git,并进行 Git 相关的配置。

m0_46308522的博客 2990

轻松玩转Git

Git是一个分布式的版本控制软件。软件,类似于QQ、office、dota等安装到电脑上才能使用的工具。版本控制,类似于毕业论文、写文案、视频剪辑等,需要反复修改和保留原历史数据。分布式文件夹拷贝本地版本控制集中式版本控制分布式版本控制查看分支git branch创建分支git branch 分支名称切换分支git checkout 分支名称分支合并(可能产生冲突)git merge 要合并的分支注意:切换分支再合并删除分支git branch -d 分支名称。

qq_49613557的博客 1070

一文搞懂GIT

Git 是一个分布式版本控制系统,被广泛应用于软件开发中。

程序员进阶之路 4390

【Git】一文看懂Git

Git 不仅仅是个版本控制系统,它也是个内容管理系统(CMS),工作管理系统等。

小哎呀的博客 1111

[效率工具] 一文玩转IDEA下的Git

环境:Synology (群晖) DS920+ DSM7 ()QNAP (威联通) TS464C QTS5.0 ()

OxYGC 836
上一篇: 一文搞定c++多线程同步机制
下一篇: SQL的查询和更新流程详解
coding丁
博客等级 码龄9年 383粉丝 147原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值