Git基础教程-常用命令整理:学会Git使用方法和错误解决

news2024/11/25 15:27:40

目录

一、了解Git的基本概念

二、Git的安装和配置

Git的安装

Git的配置

用户信息

文本编辑器

差异分析工具

查看配置信息

三、Git的基本操作

基本原理

基本操作命令

基本操作示例

场景一:创建新仓库

场景二:拉取并编辑远程仓库

四、常见问题及解决方法

解决冲突

git add文件夹时 添加无用文件

如何将一个分支上的修改转移到另一个分支上

未commit操作时

已commit操作时

git 拉取指定 tag 版本

warning: CRLF will be replaced by LF in 出现的原因和解决办法

远程分支删除了但是本地还能查询到

五、Git图形界面工具

六、参考资料


这里是Git初级使用教程!Git是一种分布式版本控制系统,广泛应用于软件开发行业。它可以帮助您更好地管理代码,跟踪代码的变更历史,并使团队协作更加高效。在这篇教程中,我们将介绍Git的基本概念、安装和使用方法,帮助你快速上手Git。

一、了解Git的基本概念

在开始使用Git之前,我们需要了解一些基本概念:

  • 仓库(Repository):仓库是你用于存储代码的地方。在Git中,你可以在本地创建一个仓库,也可以从远程服务器克隆一个已有的仓库。
  • 分支(Branch):分支是用来隔离不同开发线的。在同一个仓库中,可以创建多个分支,每个分支都可以独立地进行修改和提交。
  • 提交(Commit):提交是您对代码进行的修改操作。每次提交都会生成一个新的版本,并记录修改的内容和时间。
  • HEAD:HEAD是当前分支的引用。它指向最新提交的版本,也是进行下一次修改的起点。
  • 工作区:就是你在电脑里能看到的代码目录。
  • 暂存区:英文叫 stage 或 index。一般存放在 .git 目录下的 index 文件(.git/index)中,所以我们把暂存区有时也叫作索引(index)。
  • 版本库:工作区有一个隐藏目录 .git,这个不算工作区,而是 Git 的版本库。

二、Git的安装和配置

Git的安装

根据你的操作系统,可以参考Git官方文档或者相关的安装指南进行安装。

Git下载地址:Git - Downloads

安装完成后,可以通过以下命令验证Git是否成功安装:

git --version

如果显示了Git的版本号,说明安装成功。

Git的配置

Git 提供了一个叫做 git config 的工具,专门用来配置或读取相应的工作环境变量。

  • /etc/gitconfig 文件:系统中对所有用户都普遍适用的配置(位于git安装目录)。若使用 git config 时用 --system 选项,读写的就是这个文件。
  • ~/.gitconfig 文件:用户目录下的配置文件只适用于该用户(windows路径:C:\Users\你的用户名\.gitconfig)。若使用 git config 时用 --global 选项,读写的就是这个文件。
  • 当前项目的 Git 目录中的配置文件(也就是工作目录中的 .git/config 文件):这里的配置仅仅针对当前项目有效。每一个级别的配置都会覆盖上层的相同配置,所以 .git/config 里的配置会覆盖 /etc/gitconfig 中的同名变量。

用户信息

配置个人的用户名称和电子邮件地址:

$ git config --global user.name "runoob"
$ git config --global user.email test@runoob.com

如果用了 --global 选项,那么更改的配置文件就是位于你用户主目录下的那个,以后你所有的项目都会默认使用这里配置的用户信息。

如果要在某个特定的项目中使用其他名字或者电邮,只要去掉 --global 选项重新配置即可,新的设定保存在当前项目的 .git/config 文件里。

文本编辑器

设置Git默认使用的文本编辑器, 一般可能会是 Vi 或者 Vim。如果你有其他偏好,比如 Emacs 的话,可以重新设置::

$ git config --global core.editor emacs

差异分析工具

还有一个比较常用的是,在解决合并冲突时使用哪种差异分析工具。比如要改用 vimdiff 的话:

$ git config --global merge.tool vimdiff

Git 可以理解 kdiff3,tkdiff,meld,xxdiff,emerge,vimdiff,gvimdiff,ecmerge,和 opendiff 等合并工具的输出信息。

查看配置信息

要检查已有的配置信息,可以使用 git config --list 命令:

$ git config --list
http.postbuffer=2M
user.name=runoob
user.email=test@runoob.com

有时候会看到重复的变量名,那就说明它们来自不同的配置文件(比如 /etc/gitconfig 和 ~/.gitconfig),不过最终 Git 实际采用的是最后一个。

三、Git的基本操作

基本原理

命令图示:

  • workspace:工作区
  • staging area:暂存区/缓存区
  • local repository:版本库或本地仓库
  • remote repository:远程仓库

 Git 常用的是以下 6 个命令:git clonegit pushgit add 、git commitgit checkoutgit pull。

基本操作命令

创建仓库:如果您想在本地创建一个新的Git仓库,可以使用以下命令:

git init

这会在当前目录下创建一个新的Git仓库。一般用于初始化新的git仓库。团队开发大多数时候不需要使用这个命令,直接从远程仓库克隆即可。

克隆仓库:如果您想从远程服务器克隆一个已有的仓库,可以使用以下命令:

git clone 你的远程仓库地址

这将把远程仓库的所有内容下载到本地。

拉取修改:拉取远程仓库最新的提交,可以使用以下命令:

git pull 

git pull 其实就是 git fetch 和 git merge FETCH_HEAD 的简写。完整命令格式如下:

git pull <远程主机名> <远程分支名>:<本地分支名>

一般不需要使用完整格式,直接使用简单命令即可。

添加文件:要将文件添加到Git仓库中,需要先使用以下命令将其标记为待提交状态:

git add 文件名

提交修改:提交修改是将待提交状态的修改内容提交到Git仓库中,使用以下命令:

git commit -m "提交信息"

请注意,每次提交都需要提供一条简短的提交信息,以便于后续跟踪和查看修改历史。在团队开发中,你的提交信息将被团队其他人看到,并且做为审查提交修改代码的重要依据之一。多人开发时提交代码(commit)前优先使用拉取(pull)否则很容易造成本地冲突

推送分支:如果您对本地仓库的修改需要与远程仓库同步,可以使用以下命令将本地分支推送到远程仓库:

git push origin 分支名

其中,origin是远程仓库的别名,分支名是您要推送的分支的名称。

当你要提交当前分支的修改时,可以简化命令:

git push

创建分支命令

git branch branchname

切换分支命令:

git checkout branchname

当你切换分支的时候,Git 会用该分支的最后提交的快照替换你的工作目录的内容, 所以多个分支不需要多个目录。branchname处替换成你的分支名,一般建议使用英文。

没有参数时,git branch 会列出你在本地所有的分支名。并标注出当前分支名

合并分支命令:

git merge 

这个命令可以指定一个分支合并到当前分支来,比如想将开发分支devbranch合并到当前分支:

​git merge devbranch

如果合并发生冲突,需要我们手动解决,解决完成后,我们可以用 git add 要告诉 Git 文件冲突已经解决。

删除分支命令

git branch -d branchname

查看提交记录的方法

git log [选项] [分支名/提交哈希值]

git log 命令用于查看 Git 仓库中提交历史记录。

git log 显示了从最新提交到最早提交的所有提交信息,包括提交的哈希值、作者、提交日期和提交消息等。常用的选项包括:

  • -p:显示提交的补丁(具体更改内容)。
  • --oneline:以简洁的一行格式显示提交信息。
  • --graph:以图形化方式显示分支和合并历史。
  • --decorate:显示分支和标签指向的提交。
  • --author=<作者>:只显示特定作者的提交。
  • --since=<时间>:只显示指定时间之后的提交。
  • --until=<时间>:只显示指定时间之前的提交。
  • --grep=<模式>:只显示包含指定模式的提交消息。
  • --no-merges:不显示合并提交。
  • --stat:显示简略统计信息,包括修改的文件和行数。
  • --abbrev-commit:使用短提交哈希值。
  • --pretty=<格式>:使用自定义的提交信息显示格式。
git blame [选项] <文件路径>

git blame 命令用于逐行显示指定文件的每一行代码是由谁在什么时候引入或修改的。可以追踪文件中每一行的变更历史,包括作者、提交哈希、提交日期和提交消息等信息。

常用的选项包括:

  • -L <起始行号>,<结束行号>:只显示指定行号范围内的代码注释。
  • -C:对于重命名或拷贝的代码行,也进行代码行溯源。
  • -M:对于移动的代码行,也进行代码行溯源。
  • -C -C 或 -M -M:对于较多改动的代码行,进行更进一步的溯源。
  • --show-stats:显示包含每个作者的行数统计信息。

显示文件每一行的代码注释和相关信息:

git blame <文件路径>

只显示指定行号范围内的代码注释:

git blame -L <起始行号>,<结束行号> <文件路径>

对于重命名或拷贝的代码行进行溯源:

git blame -C <文件路径>

对于移动的代码行进行溯源:

git blame -M <文件路径>

显示行数统计信息:

git blame --show-stats <文件路径>

更多内容可以使用 git blame --help 查看完整的帮助文档,了解更多选项和使用方式。

基本操作示例

场景一:创建新仓库

使用当前目录作为 Git 仓库,我们只需使它初始化。

git init

该命令执行完后会在当前目录生成一个 .git 目录。

如果想使用我们指定的目录作为Git仓库。

git init newdir

初始化后,会在 newdir 目录下会出现一个名为 .git 的目录,所有 Git 需要的数据和资源都存放在这个目录中。

如果当前目录下有几个文件想要纳入版本控制,需要先用 git add 命令告诉 Git 开始对这些文件进行跟踪,然后提交:

$ git add *.c
$ git add README
$ git commit -m '初始化项目版本'

以上命令将目录下以 .c 结尾及 README 文件提交到仓库中。

注: 在 Linux 系统中,commit 信息使用单引号 ',Windows 系统,commit 信息使用双引号 "。

所以在 git bash 中 git commit -m '提交说明' 这样是可以的,在 Windows 命令行中就要使用双引号 git commit -m "提交说明"。

场景二:拉取并编辑远程仓库

我们使用 git clone 从现有 Git 仓库中拷贝项目(类似 svn checkout)。

克隆仓库的命令格式为:

git clone 远程仓库地址

如果我们需要克隆到指定的目录,可以使用以下命令格式:

git clone 远程仓库地址 指定文件夹目录

比如,要克隆 Ruby 语言的 Git 代码仓库 Grit,可以用下面的命令:

$ git clone git://github.com/schacon/grit.git

执行该命令后,会在当前目录下创建一个名为grit的目录,其中包含一个 .git 的目录,用于保存下载下来的所有版本记录。

如果要自己定义要新建的项目目录名称,可以在上面的命令末尾指定新的名字:

$ git clone git://github.com/schacon/grit.git mygrit

这样你新建的文件夹名就会变为mygrit而不是默认的仓库名(grit)。

新建开发分支

git branch devbranch

 切换到开发分支

​git checkout devbranch

 编辑代码,编辑完成后将目录下所有文件添加到暂存区:

git add .

提交修改

$ git commit -m '我提交了什么内容'

 切换回原本的分支

​git checkout master

 首先拉取下最近的修改,将本地分支状态和远程分支同步

git pull

 将开发分支合并到当前分支

​git merge devbranch

 如果有冲突文件(远程有人和你修改了同一个文件),需要用git diff解决冲突,解决完成后用git add命令将解决完的文件添加到暂存区并提交(git commit)。

最后,将本地的修改同步给远程仓库

git push

四、常见问题及解决方法

解决冲突

在多人协作开发的过程中,Git 冲突是不可避免的问题。当两个或多个开发者在同一文件中修改了相同的内容时,Git 无法自动解决冲突,需要人工介入解决。

在使用 Git 提交代码时,可能会出现以下提示,表示存在冲突:

Automatic merge failed; fix conflicts and then commit.

要解决 Git 冲突,首先需要找到冲突发生的位置。在代码中出现以下标志性语句时,表示存在冲突:

diff
<<<<< HEAD  
 ...  
 >>>>> other-branch

 其中,HEAD 表示当前分支,other-branch 表示与其他分支发生冲突的分支。在代码中找到这样的标志,就可以定位到冲突的位置。

解决 Git 冲突需要手动编辑代码,将不同分支的修改合并到一起。具体步骤如下:

打开包含冲突的文件的编辑器,查找标志冲突的代码行,例如:

diff
<<<<< HEAD  
 ...  
 >>>>> other-branch

在合并后的代码行添加特殊注释,表示该行已解决冲突。例如:

arduino
// Conflict resolved manually by [your name]  

比较不同分支的修改内容,选择您认为合适的修改内容,手动合并到同一代码行。

保存文件并关闭编辑器。使用git add 添加文件到暂存区,之后便可以提交到远程仓库。

git add文件夹时 添加无用文件

配置Git忽略文件:如果您希望某些文件不被Git跟踪,可以在仓库根目录下创建一个名为.gitignore的文件,并添加列出要忽略的文件路径。例如:

*.log  
*.bak  
temp/

这将忽略所有以.log和.bak为后缀的文件,以及名为temp/的文件夹。

如何将一个分支上的修改转移到另一个分支上

未commit操作时

首先把所有修改都git add进暂存区,先不要git commit,然后:

git stash                    //把暂存区内的修改存储起来
git checkout dev             //切换到正确的分支
git stash pop                //将存储的修改取出来

已commit操作时

如果已经commit了呢?

git reset HEAD^              // 撤回到刚刚commit之前的状态

git 拉取指定 tag 版本

git clone 指定的tag

git clone --branch [tag] [git地址]

已有仓库切换 tag

git checkout [tag]

warning: CRLF will be replaced by LF in 出现的原因和解决办法

主要原因是,不同系统下,文件的换行符是用不同字符表示的。

Linux采用换行符LF表示下一行;

Windows采用回车+换行CRLF表示下一行;

Mac OS采用回车CR表示下一行。

解决方法是,切换git对待换行符的方式。

git config core.autocrlf

查询当前应对策略。

为true时,Git会将你add的所有文件视为文本问价你,将结尾的CRLF转换为LF,而checkout时会再将文件的LF格式转为CRLF格式。

为false时,line endings不做任何改变,文本文件保持其原来的样子。

为input时,add时Git会把CRLF转换为LF,而check时仍旧为LF。

使用如下语句,让git忽略对换行符的判断。

git config core.autocrlf false

远程分支删除了但是本地还能查询到

运行命令同步分支状态:

git remote prune origin

五、Git图形界面工具

常用的Git图形界面工具一般有SourceTree、Github Desktop、TortoiseGit。Windows开发环境下我比较推荐使用TortoiseGit,可以安装汉化语言包。

SourceTree使用教程:Sourcetree 使用教程 | 菜鸟教程

Github Desktop使用教程:GitHub Desktop 使用入门 - GitHub 文档

TortoiseGit使用教程:TortoiseGit的安装及使用 - 知乎

六、参考资料

Git官方命令手册:Git - Reference

pdf文档版本:https://www.runoob.com/manual/github-git-cheat-sheet.pdf

菜鸟教程:Git 教程 | 菜鸟教程

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

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

相关文章

Java“牵手”1688商品跨境属性数据,1688API接口申请指南

1688平台商品详情跨境属性数据接口是开放平台提供的一种API接口&#xff0c;通过调用API接口&#xff0c;开发者可以获取1688商品的标题、价格、库存、月销量、总销量、库存、详情描述、图片&#xff0c;重量&#xff0c;详情描述等详细信息 。 获取商品详情接口API是一种用于…

《Linux内核源码分析》(3)调度器及CFS调度器

《Linux内核源码分析》(3)调度器及CFS调度器 文章目录 《Linux内核源码分析》(3)调度器及CFS调度器一、调度器1、调度器2、调度类sched_class结构体3、优先级4、内核调度策略 二、CFS调度器1、CFS调度器基本原理2、调度子系统各个组件模块3、CFS调度器就绪队列内核源码 一、调度…

影响屏蔽箱使用效果的因素有哪些?

屏蔽箱到底是用来屏蔽什么的&#xff1f;屏蔽箱主要是为无线制造行业&#xff0c;如手机、平板、遥控器、无线网卡、蓝牙设备、路由器、GPS行业、智能家居等提供隔离测试环境&#xff0c;屏蔽外界对被测产品的干扰&#xff0c;让信号经过特殊处理和被测产品通讯。 影响屏蔽效果…

Java“牵手”1688商品详情数据,1688API接口申请指南

1688平台商品详情接口是开放平台提供的一种API接口&#xff0c;通过调用API接口&#xff0c;开发者可以获取1688商品的标题、价格、库存、月销量、总销量、库存、详情描述、图片等详细信息 。 获取商品详情接口API是一种用于获取电商平台上商品详情数据的接口&#xff0c;通过…

【C++】详解声明和定义

2023年8月28日&#xff0c;周一下午 研究了一个下午才彻底弄明白... 写到晚上才写完这篇博客。 目录 声明和定义的根本区别结构体的声明和定义声明结构体 定义结构体类的声明和定义函数的定义和声明声明函数 定义函数变量声明和定义声明变量定义变量 声明和定义的根本区别 …

CSS学习笔记01

CSS笔记01 什么是CSS CSS&#xff08;Cascading Style Sheets &#xff09;&#xff1a;层叠样式表&#xff0c;也可以叫做级联样式表&#xff0c;是一种用来表现 HTML 或 XML 等文件样式的计算机语言。字体&#xff0c;颜色&#xff0c;边距&#xff0c;高度&#xff0c;宽度…

掌握C/C++协程编程,轻松驾驭并发编程世界

一、引言 协程的定义和背景 协程&#xff08;Coroutine&#xff09;&#xff0c;又称为微线程或者轻量级线程&#xff0c;是一种用户态的、可在单个线程中并发执行的程序组件。协程可以看作是一个更轻量级的线程&#xff0c;由程序员主动控制调度。它们拥有自己的寄存器上下文…

leetcode 1022.从根到叶的二进制数之和

⭐️ 题目描述 &#x1f31f; leetcode链接&#xff1a;https://leetcode.cn/problems/sum-of-root-to-leaf-binary-numbers/description/ 代码&#xff1a; class Solution { public:int sum (TreeNode* root , int num 0) {if (root nullptr) {return 0;}int cur num r…

视频汇聚/视频云存储/视频监控管理平台EasyCVR安全检查的相关问题及解决方法

安防视频监控/视频集中存储/云存储/磁盘阵列EasyCVR平台可拓展性强、视频能力灵活、部署轻快&#xff0c;可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等&#xff0c;以及支持厂家私有协议与SDK接入&#xff0c;包括海康Ehome、海大宇等设备的SDK等。平台既具备传统安…

C++day6(多态实现动物园的讲解员和动物表演的相关介绍、用函数模板实现不同数据类型的交换功能)

1.比喻&#xff1a;动物园的讲解员和动物表演 想象一下你去了一家动物园&#xff0c;看到了许多不同种类的动物&#xff0c;如狮子、大象、猴子等。现在&#xff0c;动物园里有一位讲解员&#xff0c;他会为每种动物表演做简单的介绍。 在这个场景中&#xff0c;我们可以将动…

git clone 报SSL证书问题

git命令下运行 git config --global http.sslVerify false 然后再进行重新clone代码

06.DenseCap

目录 前言泛读摘要IntroductionRelated Work小结 精读模型模型构架全卷积定位层卷积锚点边界回归边界采样双线性插值 识别网络RNN 损失函数训练与优化 实验数据集&#xff0c;预处理DenseCap评价标准基线区域和图像级统计之间的差异RPN vs EdgeBoxesQualitative results 区域ca…

美团面试拷打:ConcurrentHashMap 为何不能插入 null?HashMap 为何可以?

周末的时候,有一位小伙伴提了一些关于 ConcurrentHashMap 的问题,都是他最近面试遇到的。原提问如下(星球原贴地址:https://t.zsxq.com/11jcuezQs ): 整个提问看着非常复杂,其实归纳来说就是两个问题: ConcurrentHashMap 为什么 key 和 value 不能为 null?ConcurrentH…

NFTScan | 08.21~08.27 NFT 市场热点汇总

欢迎来到由 NFT 基础设施 NFTScan 出品的 NFT 生态热点事件每周汇总。周期&#xff1a;2023.08.21~ 2023.08.27 NFT Hot News 01/ NFT 品牌体验平台 Recur 将于 11 月 16 日彻底关闭&#xff0c;此前曾获 5000 万美元融资 8 月 21 日&#xff0c;NFT 品牌体验平台 Recur 在 X…

MySQL数据库学习【基础篇】

&#x1f4c3;基础篇 下方链接使用科学上网速度可能会更加快一点哦&#xff01; 请点击查看数据库MySQL笔记大全 通用语法及分类 DDL: 数据定义语言&#xff0c;用来定义数据库对象&#xff08;数据库、表、字段&#xff09;DML: 数据操作语言&#xff0c;用来对数据库表中的…

【业务功能篇86】微服务-springcloud-系统性能压力测试-jmeter-性能优化-JVM参数调优

系统性能压力测试 一、压力测试 压力测试是给软件不断加压&#xff0c;强制其在极限的情况下运行&#xff0c;观察它可以运行到何种程度&#xff0c;从而发现性能缺陷&#xff0c;是通过搭建与实际环境相似的测试环境&#xff0c;通过测试程序在同一时间内或某一段时间内&…

2023高教社杯数学建模思路 - 案例:FPTree-频繁模式树算法

文章目录 算法介绍FP树表示法构建FP树实现代码 建模资料 ## 赛题思路 &#xff08;赛题出来以后第一时间在CSDN分享&#xff09; https://blog.csdn.net/dc_sinor?typeblog 算法介绍 FP-Tree算法全称是FrequentPattern Tree算法&#xff0c;就是频繁模式树算法&#xff0c…

Unity关键概念

Unity是一款跨平台的游戏引擎和开发工具&#xff0c;用于创建2D和3D游戏、交互式内容和应用程序。它提供了一个强大的开发环境&#xff0c;使开发者能够轻松地设计、开发和部署高质量的游戏和应用程序。 以下是Unity的几个关键概念&#xff1a; 游戏对象&#xff08;Game Obj…

公文大师:如何写出高效、准确与有说服力的官方文件

在当今的工作环境中&#xff0c;公文的重要性不言而喻。它们是组织、政府和企业之间沟通的桥梁&#xff0c;是决策的基石。但是&#xff0c;你是否曾为如何写好一篇公文而感到困惑&#xff1f;是否曾被复杂的官方术语或格式所困扰&#xff1f;如果你的答案是肯定的&#xff0c;…

Unity创建一个可移动的2D角色

文章目录 创建角色与场景创建地面 角色控制脚本检测地面 运行结果 创建角色与场景 我们首先创建一个角色&#xff0c;这里我新建了一个胶囊体用来当Player&#xff0c;一个Square用来当地面。 接下来&#xff0c;为角色增加碰撞体和刚体&#xff0c;为地面增加碰撞体。然后我…