Git简单操作

devtools/2025/3/4 15:00:54/

前言

        现在Git已经是一个很常用的工具了 ,工作中经常会用到,有时候面试也会问会不会使用git,所以特地写了这篇博客来为初学者讲解如何使用git。里面只涉及到简单的git操作,不过应付日常工作还是绰绰有余的。

1.Git简介

        Git是一个分布式版本控制系统,用于跟踪计算机文件的更改,特别是在源代码中,它是由Linus Torvalds 在 2005 年创立,最初是为了支持 Linux 内核开发。

工作流程:

workspace:工作区

Index/Stage:暂存区

Repository:本地仓库

Remote:远程仓库

2.安装git

        windows中:从网上下载一个,按照默认的方式进行安装即可。安装完成以后右键显示有Git Bash here即表示安装成功。

(ps:如果想偷懒或者找不到如何下载,可以直接找我来拿安装包)

配置用户名和邮箱

git config --global user.name "Your Name"
git config --global user.email "youremail@example.com"git config --list #可以查看当前git的配置    
#--global表示配置的是全局的

注意:这个配置只是一种标识,标记你从这里上传的代码。

为当前仓库指定用户名和邮箱
1.打开终端或者命令行,导航到对应的Git仓库
cd /path/to/your/repo
2.设置用户名
git config user.name "Your Name"
3.设置邮箱
git config user.emial "your.email@example.com"

注意配置成功以后,使用 git config --list进行查看的时候,user.name和user.email是最后的那个才是该仓库的,之前全局的那个应该是空的,需要翻到最下面才能看到。

3.创建版本库(代码仓库)

版本库就是版本仓库或者也可以叫做仓库,顾名思义,它就是装东西的,它和普通的仓库不一样的地方是:它是用来装文件的。

那这个仓库是如何管理文件的呢,当然是通过git这个工具了,至于其中的原理这里就不做过多的解释,有兴趣的朋友可以看看这个去深入的了解Git。

现在我想要在D盘的code\test目录下创建一个版本库,该如何做呢?

首先需要进入code\test目录,然后唤出git的命令行工具。

使用git init命令即可创建一个新的版本库/代码仓(后续都会将之称为代码仓)。

这时候,你会看到test文件夹下会多出一个新的目录,.git目录,这个目录就是用来管理刚刚新建的这个代码仓的。

刚刚创建好以后的代码仓库是空的,这时候就可以使用命令git add和git commit为添加文件进行版本控制了。

如下,加上现在添加一个test1.txt文件。

现在test.txt文件已经添加到本地仓库了。Git会追踪这个文件的更改。

git status 命令可以显示当前代码仓的状态。它会告诉你下面的这些信息:

1)当前分支,显示当前处于哪一个分支

2)文件的状态

哪些文件已修改,但未暂存(stage红色字体)

哪些文件已修改,且暂存(绿色字体)

哪些文件未跟踪(untracked)

3)提出建议,会给出执行下一步的建议

例如再新建一个test1文件:

执行git add test1.txt 以后再查看:

现在test1.txt文件已经在暂存区了,如果想要将它提交的本地仓库只需要使用git commit命令,如果想要将从暂存区移除,放回到工作区,只需要使用git restore --staged 命令即可。

现在先将test1文件加入版本控制,并且为里面添加一段文本比如"hello xxx";再去查看它的状态。

如果想要添加到本地仓库可以直接使用git add和git commit命令,如果想要撤销工作区的修改,可以使用git restore test1.txt 既可。这里使用git commit命令以后再去查看当前仓库的状态。

4.常用的git命令

git clone #克隆远程仓库到本地
git init #初始化一个仓库
git remote add origin <远程仓库的URL> #关联本地仓库和远程仓库
git remote -v #查看关联结果
git config user.name "your name" #为当前仓库添加用户名
git config user.email "your *@exmple.com" #为当前仓库添加邮箱
git add #将文件或目录添加但暂存区
git commit #将暂存区的更改添加但本地仓库
git push #将本地仓库的新增内容推送到远程->用于同步操作
git pull #拉取远程仓库的内容->用于同步操作git log #查看仓库的提交日志
git reset #回退提交--soft <commit_hash> #软回头,保存暂存区和工作区的更改,会报保存历史提交信息--mixed <commit_hash> #混合回退,回退到某个提交,并取消暂存区的更改,但保留工作区文件的修改--hard <commit_hash> #硬回退,回退到某个提交,并丢弃所有更改(包括暂存区和工作区的更改)
git revert #回退特定提交,不改变历史。与git reset不同,git revert会生成一个新的提交来撤销某次提交的修改,适用于不想修改历史情况,尤其是与他人协作时
git checkout #用法很多git checkout <commit_hash> -- <fileName> #恢复某个特定文件或者文件夹到某个提交的版本git checkout -b <branch_name> #切换到某个分支git checkout <commit_hash> -- .#恢复所有的文件到某个提交状态,git checkout -- <file_path> #撤销某个文件未提交的更改 ,git checkout -- . 撤销所有文件未提交的更改
git restore #和git checkout用法类似git restore --source=<commit_hash> <file_path> #恢复特定文件到某个提交的版本git restore --source=<commit_hash> ./ #恢复所有文件到某个提交版本git restore <file_path> #撤销工作区的更改git restore .           #撤销所有工作区的更改git restore --staged <file> #将文件从暂存区移除#分支相关的命令
git branch #查看本地所有的分支
git branch -r #查看远程所有的分支
git branch -a #查看所有的分支
git branch <name_branch> #新建name_branch分支
git checkout <name_branch> #切换到name_branch分支 
git checkout -b <name_branch> #新建并切换到name_branch分支
git checkout -d/-D #删除分支,-d是删除已经合并的分支,-D强制删除一个分支,即使它还未合并
git merge <name_branch> #将name_branch分支合并到当前分支,合并时,如果出现冲突需要手动解决冲突
git log --graph --oneline --all #查看分支的合并历史
git push origin <name_branch> #将name_branch分支推送到远程
git branch --set-upstream-to=origin/<name_branch> <name_branch> #设置远程分支和本地分支分支的跟踪关系,以后在这个分支上提交代码,push和pull的时候就不需要指定远程分支名称
git branch -vv #查看本地分支和远程分支的关联信息
git stash #将当前工作区和暂存区的更改保存起来,保存到一个栈中-k #只暂存工作区的更改save "message" 添加暂存信息list #查看所以已保存的stash列表apply #恢复最近一次的暂存pop #恢复最近一次的暂存,并且在栈中删除这次暂存drop #删除某个特定的stashclear #删除所有的stash
git ls-files #查看当前仓库中被纳入版本控制的文件
#注意这些命令并不需要死记,多敲几遍,知道在哪个场景下需要哪些命令即可,还可以使用git help去查看git的帮助手册,其实记住最后一条就够了

5.实践操作(👌一看就会)

上面我们已经新建了一个代码仓,并将test.txt和test1.test文件加入版本控制,现在我们可以查看当前仓库中被追踪的文件使用git ls-files 。

现在为test1.txt文件添加一行文本:"123456", 使用git status,查看:

5.1查看文件改动 git diff

如何查看test1.txt文件发生了哪些改动呢?

可以使用diff命令

作为版本控制系统Git可以跟踪文本文件的改动,比如txt文件,代码文件等,但是对于图片,视频等这些二进制文件Git只能跟踪它们的变化,无法知道这些二进制文件更改了哪些内容。

5.2查看历史历史提交记录和版本操作

将这次test1.txt文件的更改提交到本地仓库,使用git log命令查看提交历史。

        如果我们想要回退到上一次提交,也就是进行版本回退,该如何做呢。使用git reset命令进行,根据需求选择硬回退,软回头或者混合回退。在这里使用硬回退,git reset --hard HEAD^ ,这个命令就可以回退到上一个版本,如果想要回退到上上个版本,多加一个^,git reset --hard HEAD^^,或者使用git reset --hard HEAD~2

        如果想要撤销刚刚回退的版本,该如何操作呢,首先需要使用git reflog 获取版本信息。

        使用git reset --hard +版本信息编号即可成功撤销刚刚回退的版本。

5.3工作区和暂存区的理解

        工作区就相当于版本库目录下除了.git目录以外所有的文件目录和文件。暂存区在版本库下隐藏的.git/index文件中。

        我们是通过命令来操作这两个地方的。git add命令会将工作区文件中的更改添加到暂存区,git commit命令会将暂存区的文件上传到本地仓库。举个🥔,如下:

5.4撤销修改,删除文件,将文件移除版本控制。

此时test1.txt文件中的内容有三行,如图:

        如果给这个文件再新增一行 "test"文本,它就是变成四行文本。此时我们想要撤销这次修改,有以下几种方式:

第一种,如果我们知道要删除哪些内容直接打开文件编辑器进行删除即可。

第二种,可以直接使用版本回退(硬回退),直接恢复到上一个版本,并丢弃工作区的更改。

第三种,使用git checkout -- test1.txt,丢弃test1.txt文件工作区的修改(命令中的-- 别丢)

git checkout -- 只能丢弃文件在工作区的更改,如果文件的更改已经添加到暂存区了,改怎么撤销暂存呢?

使用 git restore --staged 命令 ,如下:

如果想要删除文件,该如何操作呢,可以直接删除。

如果想要撤销刚刚的删除操作可以使用git checkout -- 命令。

如果想要删除以后,将文件移除版本控制(跟踪),可以使用add和commit命令。

5.5分支操作

        当我们初始化一个仓库以后就会存在一个master分支。在仓库中存在一个HEAD指针,它指向的就是当前所在的分支。当前指向的是master分支。

使用git branch 命令可以生成一个新的分支。

通过git checkout 命令 可以切换分支。

在新的分支上,也可以进行开发工作,并且提交代码到仓库中。

此时再次切换回master分支。

再次查看master分支的提交记录:

其实将这些串联起来就是一条时间线对应的事件。切换到dubug_branch分支再次查看提交记录:

        可以看到这两个分支的提交记录有一部分是相同的但是最近几条是不一样的,因为新建的分支debug在master分支下新建的,所以会克隆master分支中的信息。master分支也叫基线分支,是一个项目中最稳定最成熟的分支。如果现在想要将debug分支合并到master分支改如何操作呢?可以直接使用分支合并命令:git merge 。合并分支时,可能会存在冲突。

如何解决冲突呢,我们可以先打开冲突的文件。

(你当前分支的内容)

=======

(合并分支的内容)

>>>>>>> branch-name

保存文件以后,使用add 和 commit命令进行提交即可。

5.6远程仓库

       这里在gitee上找一个代码仓库做一下简单的演示。(不涉及变基和强制推送等操作,🤯不建议初学者使用变基和强制推送等不安全的操作)

        搜索gitee找到gitee.com/" rel="nofollow" title="Gitee官网">,点进去新建一个个人账号,如果个人账号之前就要直接登录即可。

        先新建一个仓库,在再配置公钥。

        注意事项看下面的图片说明:

        使用git remote 命令可以将本地仓库和远程仓库关联起来。

        已经关联仓库以后,我们就可以将本地仓库中文件同步到远程仓库了。

        其实刚刚接触的同学,最难的地方就在于多人协作。在这里简单的演示一下多人协作。

后续有内容会继续更新(工作好累),拜~


http://www.ppmy.cn/devtools/164480.html

相关文章

软件工程---软件测试

软件测试是指在软件开发过程中&#xff0c;通过一系列的测试活动来评估和验证软件系统或应用程序的质量。它是一种用于发现和修复软件缺陷、错误和问题的过程&#xff0c;旨在确保软件能够满足其预期功能、性能和安全需求。 软件测试分类 软件测试可以按照多个维度进行分类&a…

迷你世界脚本玩家接口:Player

玩家接口&#xff1a;Player 彼得兔 更新时间: 2024-07-28 17:49:05 继承自 Actor 具体函数名及描述如下: 序号 函数名 函数描述 1 getAttr(...) 玩家属性获取 2 setAttr(...) 玩家属性设置 3 getHostUin(...) 获取房主uin 4 isMainPlayer(...) …

数据链路层 ARP 具体过程 ARP 欺骗

&#x1f308; 个人主页&#xff1a;Zfox_ &#x1f525; 系列专栏&#xff1a;Linux 目录 一&#xff1a;&#x1f525; 数据链路层 &#x1f98b; 知识连接&#x1f98b; 以太网帧格式&#x1f98b; 认识 MTU&#x1f98b; MTU 对 IP 协议的影响&#x1f98b; MTU 对 UDP 协议…

随机树算法 自动驾驶汽车的路径规划 静态障碍物(Matlab)

随着自动驾驶技术的蓬勃发展&#xff0c;安全、高效的路径规划成为核心挑战之一。快速探索随机树&#xff08;RRT&#xff09;算法作为一种强大的路径搜索策略&#xff0c;为自动驾驶汽车在复杂环境下绕过静态障碍物规划合理路径提供了有效解决方案。 RRT 算法基于随机采样思想…

LeetCode 热题100 3. 无重复字符的最长子串

LeetCode 热题100 | 3. 无重复字符的最长子串 大家好&#xff0c;今天我们来解决一道经典的算法题——无重复字符的最长子串。这道题在 LeetCode 上被标记为中等难度&#xff0c;要求我们找出一个字符串中不含有重复字符的最长子串的长度。下面我将详细讲解解题思路&#xff0…

c#之xml文件的增删改查实例

在C#中&#xff0c;可以使用System.Xml命名空间中的类来对XML文件进行增删改查操作。以下是完整的示例代码&#xff0c;展示如何对XML文件进行增删改查。 1. XML文件结构 假设我们有一个books.xml文件&#xff0c;内容如下&#xff1a; <books><book id"1"…

Halcon 算子-承接车牌识别

1.rgb1_to_gray&#xff08;Image,GrayImage&#xff09; Image: 输入的图像GrayImage&#xff1a; 输出的灰度图像 2.threshold&#xff08;GrayImage,Regions,Sigma,Sigma&#xff09; GrayImage: 输入的图像Regions&#xff1a; 输出的区域Sigma&#xff1a; 调节的参数 3…

【AIDevops】驱动无界面自动化运维与分布式脚本系统,初探运维革命之路

声明&#xff1a;笔者当前文章内容仍在构想阶段&#xff0c;仅部分实现 目录 引言 第一部分&#xff1a;基于DeepSeek大模型的单机GPT实现 1. DeepSeek大模型简介 2. 功能概述 3. 项目优势&#xff0c;实现技术栈及实现功能 4. 示例展示 5.腾讯云AI代码助手助力 第二部…