Git 基本操作之Git GUI界面和git命令行如何选择

news/2024/5/16 12:52:16/文章来源:https://blog.csdn.net/zxj2589/article/details/129050913

在这里插入图片描述


1. 为啥推荐使用git命令行

我发现公司有很多的同事都喜欢使用git的GUI界面工具,喜欢鼠标点点点就完成了代码的提交,这种方式的确是比较简单便捷,但是却存在风险。先上一个事故给大家醒醒脑。
VScode Git 界面操作引发的惨案

在这里插入图片描述上面的惨案是VSCode的一个用户通过Git界面执行了git init 后,无意间按了clean all按钮,这个按钮封装的命令应该是git clean -d -f 命令,会把所有的未加入git的文件删除。因为这个用户可能是git小白,不明白clean在git的含义,导致他的项目中5000多个文件全部被删除了。他还打算去Windows的垃圾箱中恢复那5000多个文件,但是现实是残酷的,git clean 是不会调用垃圾箱的API的,所以这个用户永久的失去了他的项目,所以他发了很多和FUCK xxx。

其实推荐使用git命令行的理由主要有三个:
(1)Git命令行的功能强大,GUI界面只是封装了一小部分
(2)先学好命令行后,使用任何的GUI工具都是如鱼得水
(3)Git命令行的很多操作可以优化,效率比GUI快很多

注意:如果你对git命令已经很熟悉了,使用Git命令行还是界面工具其实都差不多,不需要纠结该用哪一个不该用哪一个,但是假如你是Git小白,建议从Git命令学起

知道了学习Git命令行的必要性,下面让我们一起看下git的基本命令操作吧,这里做一个抛砖引玉的作用,欢迎大家一起讨论git命令的妙用

2. Git命令的基本操作讲解

2.1 Git 命令的仓库操作

仓库就是存储项目代码的地方,即我们计算机磁盘下的目录。git仓库分为本地仓库和远程仓库。本地仓库是指本地存储代码的根目录以及子目录,远程仓库是指放在服务器端存储代码的一个目录。仓库相关的命令如下:

2.1.1 新建本地仓库

主要是用于工程初始化,在磁盘上新建一个工程目录,然后在根目录下执行下面的目录然后本地仓库就建好了

git init

2.1.2 检出仓库

当我们需要加入一个新项目的时候,一般都会获得新项目的管理员分配的git仓库地址,然后我们可以在本地选择一个合适的目录,执行下面的命令,就可以把远程仓库的代码下载到本地了。此时本地仓库和远程仓库默认是关联的。

git clone https://github.com/magnusja/libaums.git

要下载github上的仓库也可以使用这种方式

在这里插入图片描述在github的仓库界面拿到仓库的链接后,执行git clone 命令下载仓库。

2.1.3 查看远程仓库

假设我们的同事加入了我们的项目,想拉代码了解下项目,此时刚好项目负责人不在,我们又不想去浏览器记录上去进到服务器里查看我们项目的git链接,但我们又需要马上拿到这个git链接给到同事,这时我们就可以执行下面的命令:

git remote -v

如果执行结果是空的,证明你的本地仓库没有和远程仓库关联。成功的话结果如下

在这里插入图片描述

2.1.4 添加/删除远程仓库

在项目刚开始搭建的时候,我们在本地建立了一个本地仓库,另外需要在服务端新建一个远程仓库,此时远程仓库与本地仓库没有关联关系,我们本地仓库的文件无法推送到远程仓库,远程仓库的代码文件也无法被拉取到本地,这时需要执行下面的命令去添加本地仓库和远程仓库的关联关系

git remote add origin https://xxxxx/xxx.git

这里的origin是远程仓库的名称,可以自己随便取,后面的url是远程仓库的http地址

如果我们想切断与远程仓库的关联关系,也就是删除远程仓库,平时极少用到,命令如下:

git remote rm origin

2.1.5 拉取/推送远程仓库

每次在开始修改文件或者提交文件的时候,需要先从远程仓库中拉取最新的代码,确保本地仓库的代码是最新的,命令如下:

git pull origin dev

origin 是远程仓库的名称,dev是拉取代码所在的分支名称
我们开发完代码后,将代码提交到本地的仓库,这时需要我们推送到远程仓库,命令如下:

git push origin master

origin 是远程仓库的名称,master是代码主分支名称,也可以是其他分支的名称

2.2 Git 命令的基本操作

3.2.1 查看文件的状态

当我们修改了本地仓库中的文件后,可以使用下面的命令查看我们修改的文件

git status

当然我们可以加参数来看具体的操作

比如执行: git status -s

在这里插入图片描述
在文件的前面会出现AM的字样,这个意思是本次的变更包含增加(A)和修改操作(M)

3.2.2 查看变更内容

当我们修改了文件的内容后,我们可以通过git命令查看变更的内容,命令如下

git diff #变更的文件

在这里插入图片描述
需要注意的是,git diff 命令只能比较未被添加到暂存区的内容。查看 git add过的内容 git diff --cached

3.2.3 添加/提交/推送文件

当我们修改或者新增一个文件后,我们可以执行项目的命令添加到文件的暂存区
#添加指定文件到暂存区

git add xxx.txt
#添加所有文件到暂存区
git add .
git add -A

我们执行完git add 命令后,我们的文件被添加到了暂存区,接下来就是执行提交命令将我们的修改提交到本地仓库

# xxx 是本次提交的描述信息
git commit -m 'xxxxx'

当文件被提交到本地的代码仓库后,其实我们的代码还是有丢失的风险,因为我们的机器如果坏了就难受了,所以我们需要把代码推送到远程仓库,执行下面命令:

git push origin master

3.2.4 撤销修改

当文件没有执行git add 命令的时候,我们如果想要撤销我们的修改,我们可以执行下面的命令:

#撤销已编辑的内容,恢复到未修改前的状态
git checkout xxx.txt

假设我们的代码已经提交到了暂存区,想要恢复到以前的版本,命令如下

#撤销add操作,但是会保留已编辑的内容
git reset HEAD xxx.txt

如果我们的代码已经提交到了本地仓库,这时本地仓库会产生一个版本号,我们可以使用版本号撤销已经提交的代码

git reset --mixed 版本号

git reset命令的参数有:mixed、soft、hard:
–mixed 默认是这种,代表撤销git add和git commit的操作,保留编辑器的代码;
–soft代表撤销git commit,不撤销git add操作,同时保留编辑器的代码;
–hard参数很暴力,直接撤销commit和add的操作,撤销所有改动的代码,当你决定用 --hard参数的时候,就代表着你应该已经决定了放弃修改过的所有代码。

如果你的代码已经push到了远程仓库,这时候需要我们先把本地仓库的文件撤销到指定版本,然后再把撤销后的版本再push到远程仓库,这里的操作比较危险,因为可能会涉及到别人的修改,所以这部分我就不讲解了,感兴趣的可以自己百度
当代码撤销完后我们后悔了,想恢复到之前的版本,但是我们又找不到版本历史变更记录了,这时候不要慌,可以使用下面的命令试试:

git reflog

在这里插入图片描述
执行这个命令后会列出最近的代码记录,然后找到对应提交的版本号,做下cherry-pick或者git reset 就可以了。

2.3 Git 命令的分支操作

之前的所有操作都是在master分支,也就是主分支上进行的,分支操作的命令主要是用于创建分支、切换分支、查看分支、合并分支这些操作。

2.3.1 创建本地分支

#创建本地分支,但是不会切换到创建分支上,branch_name是分支的名称 
git branch branch_name
#创建本地分支,并切换到创建的分支上,branch_name是分支的名称; 如果分支已创建,则切换到分支上 
git checkout -b branch_name

2.3.2 创建远程分支

创建远程分支需要先在本仓库创建本地分支,然后推送到远程仓库,远程的分支就创建好了

git push origin branch_name

2.3.3 查看所有分支

git branch -a

2.3.4 查看远程所有分支

git branch -r

2.3.5 查看本地所有分支

git branch

2.3.6 切换分支

git checkout branch_name

2.3.7 合并分支

把另一个分支上的内容与当前分支进行合并,合并后会生成一次合并的提交记录。

#当前分支是dev2,合并dev分支内容到dev2 git merge dev 
#推送合并后dev2分支内容到远程仓库 
git push origin dev2

3.3.8 删除分支

#删除本地分支 
git branch -d dev 
#删除远程分支,origin为远程仓库名称,dev为远程分支名称 
git push origin :dev

2.4 Git 命令的标签操作

我们每一次的代码提交,都会生成一个版本号,每个版本号之间连接起来就会形成一条线,只要不断有新提交生成,这条线就会一直延伸下去,打一个标签(tag)好比在这条线作了一个标记。项目在迭代开发的时候,每开发完一个版本,就在分支上打一个tag,然后运维组依据这个tag发布测试环境、灰度环境,由测试组进行测试验证,开发组继续在原来的分支上进行迭代开发,提交内容,彼此之间不受影响。

2.4.1 查看标签

git tag

2.4.2 创建标签

#在本地打一个标签 
git tag TAG_20230214 
#推送标签到远程仓库 
git push origin TAG_20230214 

2.4.3 删除标签

#删除本地仓库上的标签 
git tag -d TAG_20230214 
#删除远程仓库上的标签 
git push origin:TAG_20230214 

2.5 Git 命令之冲突解决

2.5.1 为啥会产生冲突

代码冲突简单来说就是同一个文件的同一个位置都修改了,且内容不同,会产生冲突。例如,在文件A第十行,你添加了一个“hello world”,另外一个同事在文件A的第十行添加了一个“helloworld”,并且早于你提交远程仓库,你再提交的时候,就会发生冲突。这里需要注意的是,所谓的同一个位置可能是一行代码、也可能是几行。
在这里插入图片描述

2.5.2 解决冲突

解决冲突就是决定你和同事修改的代码是留你自己的代码还是留同事的代码,还是你们的代码需要共同保留,做一些局部的删减,这就是解决冲突的过程。解决完后将你的代码add到暂存区,然后执行

git merge --continue

然后提交就可以了,如果是cherry-pick执行

git cherry-pick --continue

如果要放弃你的修改,则执行

git merge/cherry-pick --abort

3.Android Studio Git插件搭配git命令行提效

3.1 查看git的提交记录

在这里插入图片描述

3.2 查看提交的人

在这里插入图片描述

3.3 快速查看对比本地的修改和远程分支的差异

在这里插入图片描述等等,我比较推荐使用Git命令行和Android Studio的Git插件搭配使用。效率会提升很多

总结

Git命令其实还有很多,无法一一穷尽,我们用命令行不是为了装逼,而是为了更安全、更高效的进行项目开发。由于是团队开发,所以我们在合并代码和提交代码时都需要更加小心,否则因为你的提交干掉了别人的代码,这会让别人的辛苦变成一场空;如果学好git命令行,这些问题都能很好的避免。而且命令行学好了,操作图形界面更是如鱼得水。在工作中我们可能会遇到各种各样提交代码的问题,这时候我们去学习好Git命令行,能快速的解决这类问题。将时间用在更重要的事情上。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_258357.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一种基于加密域的数字图像水印算法的设计与实现(附Matlab源码)

一种基于加密域的数字图像水印算法的设计与实现 项目介绍 毕设项目 题目:一种基于加密域的数字图像水印算法的设计与实现 随着数字媒体技术的发展,数字媒体版权的保护得到了越来越多人的重视,数字水印技术作为数字媒体版权保护的有效手段…

JavaScript 教程导读

JavaScript 是 Web 的编程语言。所有现代的 HTML 页面都使用 JavaScript,可以用于改进设计、验证表单、检测浏览器、创建cookies等。JavaScript 非常容易学。本教程将教你学习从初级到高级JavaScript知识。JavaScript 在线实例本教程包含了大量的 JavaScript 实例&a…

如何用P6软件编制项目进度计划(下)

卷首语 根据项目合同包含的工作范围进行工作分解(WBS),按照业主的要求及项目管理的需要,考虑不同阶段和层次,适时编制出项目管理所要求的的各级进度计划。 4搜集项目计划与进度控制相关信息 搜集与项目计划编制与进…

计算机SCI期刊审稿人,一般关注论文的那些问题? - 易智编译EaseEditing

编辑主要关心: (1)文章内容是否具有足够的创新性? (2)文章主题是否符合期刊的受众读者? (3)文章方法学是否合理,数据处理是否充分? (…

谷歌seo快速排名优化方法?谷歌seo排名技巧

本文主要分享关于谷歌seo排名如何快速提升的一些技巧。 本文由光算创作,有可能会被修改和剽窃,我们佛系对待这种行为吧。 谷歌seo快速排名优化方法?谷歌seo排名有什么技巧? 答案是:持续建设GPB外链可有效提升谷歌排…

TCP的拥塞控制算法之一:慢启动算法、拥塞避免算法

目录 什么是拥塞控制,为什么需要拥塞控制 慢启动 拥塞避免 什么是拥塞控制,为什么需要拥塞控制 拥塞通常是指从随着网络中的主机增加其发送速率并因为网络的原因使网络变得十分拥挤,此时会经常发生丢包现象,导致网络的传输效率…

Spring Boot集成Quartz实现定时任务的动态创建、启动、暂停、恢复、删除

一、整个 Quartz 的代码流程基本基本如下:首先需要创建我们的任务(Job),比如取消订单、定时发送短信邮件之类的,这是我们的任务主体,也是写业务逻辑的地方。创建任务调度器(Scheduler),这是用来调度任务的,主要用于启动…

【数据结构与算法】二分查找 移除元素

今日任务 数组理论基础 704.二分查找 27.移除元素 1.数组理论基础 (1)数组是存放在连续内存空间上的相同类型数据的集合。 注意: 数组下标都是从0开始的数组内存空间的地址是连续的 (2)正因为数组在内存空间的…

(考研湖科大教书匠计算机网络)第四章网络层-第四节:IP数据报的发送和转发过程

获取pdf:密码7281专栏目录首页:【专栏必读】考研湖科大教书匠计算机网络笔记导航 文章目录一:概述二:举例三:路由器可以隔离广播域本节对应视频如下 【计算机网络微课堂(有字幕无背景音乐版)】&…

记一次OOM

1,问题描述: 新上了一版代码之后,上游服务请求我们服务失败,报错:“服务不可用”,发现注册中心上服务掉线,查询日志:发现oom:Java heap space,GC overhead limit exceeded。 容易…

【R语言(二):Nomogram(诺莫图/列线图)绘制 / R语言逻辑回归分析】

R语言(二):Nomogram(诺莫图/列线图)绘制 1、基本概念 Nomogram,中文常称为诺莫图或者列线图。简单的说是将Logistic回归或Cox回归的结果进行可视化呈现。它根据所有自变量回归系数的大小来制定评分标准,给每个自变量的每个取值水平一个评分&…

Mysql使用规范(纯技术和实战建议)

1、事务隔级别: (强制):Repeatable-Read(重复读),且不能在会话操作时临时开启隔离级别。 注: Repeatable-Read(重复读)隔离级别解决不了幻读。 可用 show variables l…

内存泄漏检测组件 -- hook

目录 hook malloc与free出现的问题 builtin_return_address(N) C/CLinux服务器开发/后台架构师【零声教育】-学习视频教程-腾讯课堂 hook malloc与free出现的问题 #define _GNU_SOURCE #include <stdio.h> #include <dlfcn.h> #include <stdlib.h> /****…

上采样学习

最近邻 简单来说就是x方向和y方向分别复制 #!/usr/bin/env python # _*_ coding:utf-8 _*_ import numpy as np import torch from cv2 import cv2 from torch import nndef numpy2tensor(x: np.ndarray) -> torch.Tensor:"""(H,W) -> (1, 1, H, W)(H,W…

迁移案例实操:MySQL迁移到DM8由于有248张表存在datetime字段类型,使用dts迁移到达梦报不支持数据类型【附数据对比工具】

本文主要记录MySQL数据迁移到DM8上遇到MySQL源端表存在datetime数据类型时&#xff0c;并且包含datetime数据类型的表达上百张的的情况下&#xff0c;如何完成数据迁移的完整步骤。 1. 解决方法 将MySQL源端表的是datetime数据类型的字段修改为varchar(30)。 2. 处理步骤 &a…

以before为例 完成一个aop代理强化方法案例

观看本文 首先 您需要做好Spring aop的准备工作 具体可以参考我的文章 java Spring aop入门准备工作 首先 我们创建一个包 我这里叫 Aop 然后在Aop包下创建一个类 叫 User 参考代码如下 package Aop;public class User {public void add(){System.out.println("add....…

javaEE 初阶 — 流量控制与拥塞控制

文章目录1. 流量控制2. 拥塞控制TCP 工作机制&#xff1a;确认应答机制 超时重传机制 连接管理机制 滑动窗口 1. 流量控制 流量控制是一种干扰发送的窗口大小的机制&#xff0c;滑动窗口&#xff0c;窗口越大&#xff0c;传输的效率就越高&#xff08;一份时间&#xff0c;…

Python-第六天 Python数据容器

Python-第六天 Python数据容器一、数据容器入门1.数据容器二、数据容器&#xff1a;list(列表)1.列表的定义2.列表的下标&#xff08;索引&#xff09;3.列表的常用操作&#xff08;方法&#xff09;4.练习案例:常用功能练习5.list&#xff08;列表&#xff09;的遍历5.1 列表的…

Java基础面试题——JavaWeb专题

文章目录1.HTTP响应码有哪些2.Forward和Redirect的区别&#xff1f;3.Get和Post请求的区别4.介绍下OSI七层和TCP/IP四层的关系5.说说TCP和UDP的区别6. 说下HTTP和HTTPS的区别7.说下HTTP、TCP、Socket的关系是什么&#xff1f;8. 说下HTTP的长链接和短连接的区别9.TCP原理10. Co…

【CS224W】(task2)传统图机器学习和特征工程

note 和CS224W课程对应&#xff0c;将图的基本表示写在task1笔记中了&#xff1b;传统图特征工程&#xff1a;将节点、边、图转为d维emb&#xff0c;将emb送入ML模型训练Traditional ML Pipeline Hand-crafted feature ML model Hand-crafted features for graph data Node-l…