Git入门级指南

news2024/10/7 5:26:20

Git入门级指南

在软件开发和版本控制中,Git是一种非常流行且强大的工具。本文将为你提供关于Git的基本知识,并提

供一些实例来演示如何正确使用Git来管理代码。

关于git的简介

Git是一种分布式版本控制系统,它可以跟踪和管理项目中的代码变更。与其他版本控制系统不同,Git具

有强大的分支和合并功能,使得多人协作和并行开发更加容易。Git还具备高效的性能和出色的安全性,被

广泛应用于各种规模的项目中。

安装

在官网安装对应的版本即可:https://git-scm.com/downloads

安装:无脑下一步即可,安装完毕即可使用了!

在这里插入图片描述

在这里插入图片描述

git的基本概念

  1. 仓库(Repository)是存储代码的地方。在本地计算机上创建仓库,或利用代码托管平台(如GitHub或GitLab)上的远程仓库。
  2. 提交(Commit)是对代码的快照。每次提交都会记录代码的修改,并为其提供一个唯一的标识符。
  3. 分支(Branch)是在仓库中并行开发的不同版本。通过创建和切换分支,可以同时进行多个任务和实验。
  4. 合并(Merge)将一个分支的修改合并到另一个分支。这是多人协作和集成工作的关键步骤。
  • 工作区:仓库的目录。工作区是独立于各个分支的。
  • 暂存区:数据暂时存放的区域,类似于工作区写入版本库前的缓存区。暂存区是独立于各个分支的。
  • 版本库:存放所有已经提交到本地仓库的代码版本
  • 版本结构:树结构,树中每个节点代表一个代码版本。

git的常用命令

全局设置

git config --global user.name xxx:设置全局用户名,信息记录在~/.gitconfig文件中
git config --global user.email xxx@xxx.com:设置全局邮箱地址,信息记录在~/.gitconfig文件中
git init:将当前目录配置成git仓库,信息记录在隐藏的.git文件夹中

常用命令

git add XX :将XX文件添加到暂存区
git commit -m "给自己看的备注信息":将暂存区的内容提交到当前分支
git status:查看仓库状态
git log:查看当前分支的所有版本
git push -u (第一次需要-u以后不需要) :将当前分支推送到远程仓库
git clone git@github.com:xxx/XXX.git:将远程仓库XXX下载到当前目录下
git branch:查看所有分支和当前所处分支

查看命令

git diff XX:查看XX文件相对于暂存区修改了哪些内容
git status:查看仓库状态
git log:查看当前分支的所有版本
git log --pretty=oneline:用一行来显示
git reflog:查看HEAD指针的移动历史(包括被回滚的版本)
git branch:查看所有分支和当前所处分支
git pull :将远程仓库的当前分支与本地仓库的当前分支合并

删除命令

git rm --cached XX:将文件从仓库索引目录中删掉,不希望管理这个文件
git restore --staged xx:==将xx从暂存区里移除==
git checkout — XX或git restore XX:==将XX文件尚未加入暂存区的修改全部撤销==

代码回滚

git reset --hard HEAD^ 或git reset --hard HEAD~ :将代码库回滚到上一个版本
git reset --hard HEAD^^:往上回滚两次,以此类推
git reset --hard HEAD~100:往上回滚100个版本
git reset --hard 版本号:回滚到某一特定版本

远程仓库

git remote add origin git@github.com:xxx/XXX.git:将本地仓库关联到远程仓库
git push -u (第一次需要-u以后不需要) :将当前分支推送到远程仓库
git push origin branch_name:将本地的某个分支推送到远程仓库
git clone git@github.com:xxx/XXX.git:将远程仓库XXX下载到当前目录下
git push --set-upstream origin branch_name:设置本地的branch_name分支对应远程仓库的branch_name分支
git push -d origin branch_name:删除远程仓库的branch_name分支
git checkout -t origin/branch_name 将远程的branch_name分支拉取到本地
git pull :将远程仓库的当前分支与本地仓库的当前分支合并
git pull origin branch_name:将远程仓库的branch_name分支与本地仓库的当前分支合并
git branch --set-upstream-to=origin/branch_name1 branch_name2:将远程的branch_name1分支与本地的branch_name2分支对应

分支命令

git branch branch_name:创建新分支
git branch:查看所有分支和当前所处分支
git checkout -b branch_name:创建并切换到branch_name这个分支
git checkout branch_name:切换到branch_name这个分支
git merge branch_name:将分支branch_name合并到当前分支上
git branch -d branch_name:删除本地仓库的branch_name分支
git push --set-upstream origin branch_name:设置本地的branch_name分支对应远程仓库的branch_name分支
git push -d origin branch_name:删除远程仓库的branch_name分支
git checkout -t origin/branch_name 将远程的branch_name分支拉取到本地
git pull :将远程仓库的当前分支与本地仓库的当前分支合并
git pull origin branch_name:将远程仓库的branch_name分支与本地仓库的当前分支合并
git branch --set-upstream-to=origin/branch_name1 branch_name2:将远程的branch_name1分支与本地的branch_name2分支对应

stash暂存


git stash:将工作区和暂存区中尚未提交的修改存入栈中
git stash apply:将栈顶存储的修改恢复到当前分支,但不删除栈顶元素
git stash drop:删除栈顶存储的修改
git stash pop:将栈顶存储的修改恢复到当前分支,同时删除栈顶元素
git stash list:查看栈中所有元素

git config --global [user.name](http://user.name) xxx:设置全局用户名,信息记录在~/.gitconfig文件中
git config --global user.email [xxx@xxx.com](mailto:xxx@xxx.com):设置全局邮箱地址,信息记录在~/.gitconfig文件中
git init:将当前目录配置成git仓库,信息记录在隐藏的.git文件夹中

常用的操作步骤

在我们完成一个项目的时候,往往需要把代码上传到如GitHub等代码托管平台,除了备份代码方便回滚意外,也方便同组的其他伙伴更新代码,那么我们会常常用到以下命令以及操作步骤:

  1. 创建仓库和提交:
    • 在本地计算机上,使用命令git init创建一个新的Git仓库。
    • 使用git add命令添加要提交的文件。
    • 使用git commit -m "commit message"将更改提交到仓库。
  2. 分支创建和切换:
    • 使用git branch branch_name命令创建一个新的分支。
    • 使用git checkout branch_name命令切换到指定的分支。
  3. 修改代码和提交:
    • 在分支上进行代码修改。
    • 使用git status命令查看修改的文件。
    • 使用git push命令将修改提交到仓库。
  4. 合并分支:
    • 切换到接收更改的分支。
    • 运行git merge branch_to_merge命令将指定分支的修改合并到当前分支。
    • 解决合并冲突(如果有)。
    • 使用git commit命令提交合并后的代码。

重要概念解析

系统架构图

先看一张git操作的结构图

在这里插入图片描述

测试连通性:ssh -T git@github.com

生成ssh:ssh-keygen -t rsa -C 邮箱

分支

分支操作

查看分支:git branch(git branch -v)
创建分支:git branch 分支名
切换分支:git checkout 分支名
创建分支并切换:git checkout -b 分支名
合并分支:git merge 分支名
删除分支:git branch -d 分支名(不能删除当前所在分支,需要切换到另一个分支才能删除)
强行删除分支:git branch -D 分支名
细节:
    1.如果在分支A中进行了写操作(增删改),但此操作局限在工作区中进行(没有add和commit),在master中能够看到该操作。
    如果在分支A中进行了写操作,并且commit到了对象区,则master中无法观察到此文件
    2.如果在分支A中进行了写操作,但此操作局限在工作区中进行,则删除分支不需要合并


分支合并

分支名:指向当前的提交(commit)
HEAD:指向当前分支(HEAD->分支名)

如果一个分支靠前(new),一个分支落后(master),则如果不冲突,master可以通过merge直接追赶上new,称为fast forward。
fast forward本质上就是分支指针的移动:
    1.两个分支fast forward归于一点commit
    2.丢失分支信息(git log --graph看不见两个分支的路径,因为被合并了)
git merge默认使用fast forward,但我们可以手动禁止:git merge --no-ff 分支名
    1.两个分支不会归于一个commit,主动合并的分支,会前进一步
    2.分支信息不会丢失(git log --graph)


冲突

冲突:如果两个分支在同一个时刻,且两个分支同时修改了同一个文件的同一行,在合并时会引起冲突
如何解决冲突?(拿master和new分支举例)
    1.先在某个分支(例如master)中打开这个文件,把内容修改为最终需要的内容
    2.git add 文件名(这里的add并不是从工作区到暂存区,而是告诉git冲突已经解决)
    3.git commit -m "文件注释"
解决冲突会造成两次提交,即sha1值会出现两个:1次是最终提交,1次是将对方分支(new)的提交信息获取过来
这时候观察文件内容,master中的文件内容是最终修改后的内容,而new中的文件内容是解决冲突前的内容
这时候直接把new分支合并到master分支即可
这时候可能有人会问了,同样修改了同一行为什么最后这次合并不要解决冲突呢?
这其实是因为master分支的最终提交和new在解决冲突之前的提交不处于同一时刻,所以直接合并即可
简而言之:如果一方落后,则落后方可以直接通过merge合并到处于前面的分支


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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

前端安全问题及解决方案

随着互联网的高速发展,信息安全问题已经成为行业最为关注的焦点之一。总的来说安全是很复杂的一个领域,在移动互联网时代,前端人员除了传统的 XSS、CSRF 等安全问题之外,还时常遭遇网络劫持、非法调用 Hybrid API 等新型安全问题。…

(2023最新)互联网1010道Java面试真题汇总

我相信各位小伙伴们都发现了,现在的 IT 的环境并不如以前了,似乎是迎来“寒冬”,再加上最近上热搜的阿里云大裁员事件,又将 Java 开发岗推上了一个新的难度。而被裁员的人,不得不降薪重新找到一份工作,而经…

Django框架-5

路由系统 通过URL(Uniform Resource Locator,统一资源定位符)可以访问互联网上的资源——用户通过 浏览器向指定URL发起请求,Web服务器接收请求并返回用户请求的资源,因此可以将URL视为用户与服务器之间交互的桥梁。 …

MATLAB中scatter函数用法

目录 语法 说明 ​示例 scatter函数的功能是绘制散点图。 语法 scatter(x,y) scatter(x,y,sz) scatter(x,y,sz,c) scatter(___,"filled") scatter(___,mkr) scatter(tbl,xvar,yvar) scatter(tbl,xvar,yvar,"filled") scatter(ax,___) scatter(___,Nam…

Mybatis面试题--MyBatis延迟加载

Mybatis是否支持延迟加载? 答:Mybatis支持延迟记载,但默认没有开启 什么叫做延迟加载? 查询用户的时候,把用户所属的订单数据也查询出来,这个是立即加载 查询用户的时候,暂时不查询订单数据&…

【C/C++】拷贝构造函数的调用 使用方法

创作不易&#xff0c;本篇文章如果帮助到了你&#xff0c;还请点赞 关注支持一下♡>&#x16966;<)!! 主页专栏有更多知识&#xff0c;如有疑问欢迎大家指正讨论&#xff0c;共同进步&#xff01; &#x1f525;c系列专栏&#xff1a;C/C零基础到精通 &#x1f525; 给大…

Linux--询问符:-i

功能&#xff1a; 执行某个操作时&#xff0c;Linux会询问用户是否确定执行操作。只有输入yes或者y才能成功执行操作。输入no或者n或者enter则操作失败 示例&#xff1a; ①确认操作 ②反悔操作

美工面试题目(合集)

美工面试题目篇1 1、目前常用的WEB标准静态页面语言是。(4分) 2、改变元素的外边距用&#xff0c;改变元素的内填充用。(6分) 3、在Table中&#xff0c;TR是&#xff0c;TD是。(6分) 4、如果给一行两列的表格(table)定义高度样式&#xff0c;在标签中定义最合理&#xff0c…

js中改变this指向的三种方式

js中改变this指向的三种方式 1、call方法2、apply方法3、bind方法 1、call方法 使用 call 方法调用函数&#xff0c;同时指定函数中 this 的值&#xff0c;使用方法如下代码所示&#xff1a; <script>const obj {uname: 刘德华}function fn(x, y) {console.log(this) …

Java Stream 流进行根据元素某一属性过滤计算其他属性实例

设计一个测试类Tuser package org.example;import com.alibaba.fastjson.annotation.JSONField;import java.io.Serializable;public class Tuser implements Serializable {//用户名private String name;//平台名称private String sys;//登录次数private int times;//一个合并…

如何使用计算机视觉检测钓鱼攻击?

无论你是喜欢、还是厌恶、亦或害怕&#xff0c;以ChatGPT为代表的新兴人工智能&#xff08;AI&#xff09;平台&#xff0c;目前正在更加深入地迈向公共领域。它们不仅表现为各种聪明的聊天机器人&#xff0c;而且能够在幕后以多种创新方式被广泛使用。其中&#xff0c;最为典型…

audio2face 与ue5结合实时语音嘴型同步

audio2face部分 1.安装audio2face以及localserver 2.打开streamingplayer的demo场景 3.localhost/NVIDIA/Assets/Audio2face/blendshape_solve目录下找到male_bs_arkit.usd拖拽到场景 4.选中场景中的male_bs_arkit.usd将分页切换到A2F data convert分页 5.参数设置 6.设置…

mysql用户相关操作

一、如何查看系统存在多少用户&#xff1f; 相关命令&#xff1a; SELECT COUNT(*) FROM mysql.user; SELECT User FROM mysql.user; DESC mysql.user; 二、如何查看用户是否设置密码&#xff1f; 在 MySQL 中&#xff0c;用户密码是被加密的&#xff0c;不可以直接查看用户…

cmake构建一个项目,同时依赖一个静态库项目和一个动态库项目

目录切到build中&#xff0c;然后cmake ..&#xff0c;生成VS解决方案 chengChu 文件夹 SET(LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/lib) set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON) #windows构建动态库时 , 加上这个会生成dll文件的同时生成lib文件&#xff0c;否则只…

FirmAE源码粗读(五)

文章目录 简介参考阅读libnvramsem系列函数sem_getsem_locksem_unlock nvram_init系列函数nvram_initnvram_set_default 感言 简介 鸽王来咯 这一篇写的是FirmAE中源于firmadyne的libnvram&#xff08;经过了一定修改&#xff09;&#xff0c;不得不说这一部分是很有意义的工作…

国产32位MCU低成本烟机变频风机方案

家用油烟机主要由风机系统&#xff0c;控制系统&#xff0c;滤油装置&#xff0c;外壳和悬吊装置组成&#xff0c;其中风机系统是油烟机的心脏&#xff0c;通常由电机和叶轮组成&#xff0c;一台油烟机功率的大小&#xff0c;也是由风机系统决定的&#xff0c;控制系统是烟机最…

JVM-垃圾回收器

垃圾回收器 Serial 新生代垃圾回收器&#xff0c;单线程&#xff0c;会产生STW&#xff08;Stop The World&#xff09;&#xff0c;采用拷贝算法。 它在停止线程时&#xff0c;并不是直接将线程强行停止&#xff0c;而是等线程运行到一个安全点&#xff08;Safe Point&…

超级实用!详解Node.js中的lodash模块和async模块

文章目录 7. lodash 模块安装 Lodash数组处理对象处理函数式编程 8. async 模块安装 Async异步流程控制串行执行&#xff08;Series&#xff09;并行执行&#xff08;Parallel&#xff09;循环迭代&#xff08;Each&#xff09; 控制流程和错误处理瀑布流控制&#xff08;Water…

强化学习:策略梯度法

策略梯度法的思路 之前我们是用表格的形式来表达策略&#xff0c;现在我们同样可以用函数来表达策略。之前学的所有的方法都是被称为 value-based&#xff0c;接来下学的叫 policy-based 。接下来我们来看一下 策略梯度法的思路。之前学的的策略全都是用表格来表示的&#xff0…

win 安装 C++运行环境 - MinGW

目录 一、下载二、安装四、检查是否安装成功五、参考文章 一、下载 官网地址&#xff1a;https://www.mingw-w64.org/downloads/ 1.1点击【MingW-W64-builds】 1.2点击【Github】 1.3下载 如果下载太慢&#xff0c;可以使用GitHub Proxy 代理加速 (ghproxy.com) 二、安装 …