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

目录

一、了解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.rhkb.cn/news/109682.html

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

相关文章

ModaHub魔搭社区:将图像数据添加至Milvus Cloud向量数据库中

将图像数据添加至向量数据库中 图像分割裁剪完成后,我们就可以将其添加至 Milvus Cloud 向量数据库中了。为了方便上手,本项目中使用了 Milvus Lite 版本,可以在 notebook 中运行 Milvus 实例。接下来,使用 PyMilvus 连接至 Milvus Lite 提供的默认服务器。 这一步骤中,…

量化:pandas基础

文章目录 简介Series构造 DataFrame构造列的查改增删填充默认值用loc与iloc取数据条件选择 简介 pandas是 Python 的核心数据分析支持库&#xff0c;提供了快速、灵活、明确的数据结构。 pandas主要的两种数据结构为Series和DataFrame&#xff0c;分别用于处理一维和二维数据。…

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

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

常见API架构介绍

常见API架构介绍 两个服务间进行接口调用&#xff0c;通过调用API的形式进行交互&#xff0c;这是常见CS架构实现的模式&#xff0c;客户端通过调用API即可使用服务端提供的服务。相较于SPI这种模式&#xff0c;就是服务端只规定服务接口&#xff0c;但具体实现交由第三方或者自…

https 的ssl证书过期处理解决方案(lighthttpd)

更换证书&#xff1a;lighthttpd 配置文件位置&#xff1a;/opt/vmware/etc/lighttpd/lighttpd.conf &#xff08;配置文件的最底部 G快速来到底部&#xff09; 方案一&#xff1a;阿里云申请免费的证书 这里公司内网环境没有配置域名&#xff0c;可以创建一个临时域名&…

【JS真好玩】自动打字机效果

目录 一、前言二、布局分析三、总体样式四、中间部分五、底部5.1 div5.2 label5.3 input 六、JS让它动起来6.1定时器6.2 字符串处理6.2.1 slice6.2.2 splice6.3.3 split 七、总结 一、前言 大家好&#xff0c;今天实现一个自动打字机效果&#xff0c;旨在实现一些网上很小的de…

uniapp国际化npm install vue-i18n报错

npm install vue-i18n //npmyarn add vue-i18n //yarn在vue2环境下&#xff0c;默认安装 npm install vue-i18n 的版本是 vue-i18n9.1.9&#xff0c;所以报错。 npm view vue-i18n versions --json 用以上命令查看版本&#xff1a; vue2建议5.0版本 npm install vue-i1…

python可视化matplotlib——绘制正弦和余弦

这是一个使用matplotlib库绘制正弦和余弦函数曲线的代码示例。代码中导入了需要的库&#xff0c;并设置了x轴和y轴的标签字体为华文楷体。然后&#xff0c;使用numpy生成一组x轴上的值t&#xff0c;并使用正弦函数生成对应的y轴值s&#xff0c;再使用余弦函数生成对应的y轴值z。…

【LeetCode-中等题】24. 两两交换链表中的节点

文章目录 题目方法一&#xff1a;递归方法二&#xff1a;三指针迭代 题目 方法一&#xff1a;递归 图解&#xff1a; 详细版 public ListNode swapPairs(ListNode head) {/*递归法:宗旨就是紧紧抓住原来的函数究竟返回的是什么?作用是什么即可其余的细枝末节不要细究,编译器…

docker高级(redis集群三主三从)

1. 新建6个docker容器redis实例 docker run -d --name redis-node-1 --net host --privilegedtrue -v /redis/share/redis-node-1:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6381docker run -d --name redis-node-2 --net host --privilegedtrue -v /…

Docker安装MySQL、Redis如何自启?

1、问题&#xff1a; Docker自启&#xff1a;http://t.csdn.cn/L2v55 重新启动虚拟机&#xff0c;Docker自动启动之后&#xff0c;发现MySQL、Redis都没有启动。 docker ps 没查到有启动的容器。 docker ps -a 查看所有的容器。 2、先使用 su root 命令&#xff0c;切换到root…

【通用消息通知服务】0x3 - 发送我们第一条消息(Websocket)

【通用消息通知服务】0x3 - 发送我们第一条消息 项目地址: A generic message notification system[Github] 实现接收/发送Websocket消息 Websocket Connection Pool import asyncio from asyncio.queues import Queue from asyncio.queues import QueueEmpty from contextli…

Java 版 spring cloud 工程系统管理 工程项目管理系统源码 工程项目各模块及其功能点清单

工程项目各模块及其功能点清单 一、系统管理 1、数据字典&#xff1a;实现对数据字典标签的增删改查操作 2、编码管理&#xff1a;实现对系统编码的增删改查操作 3、用户管理&#xff1a;管理和查看用户角色 4、菜单管理&#xff1a;实现对系统菜单的增删改查操…

C++ IO流

文章目录 一.C语言的输入与输出二.流是什么三.CIO流1.C标准IO流2.C文件IO流&#xff08;1&#xff09;文件操作步骤&#xff08;2&#xff09;以二进制的形式操作文件&#xff08;3&#xff09;以文本的形式操作文件&#xff08;4&#xff09;使用>>和<<对文件进行…

get请求报错400 非法参数

get请求报错400 非法参数 背景&#xff1a;get请求数据&#xff0c;SpringBoot提供接口&#xff0c;返回400&#xff0c;报错非法参数此种情况排除接口本身错误之外&#xff0c;检查参数中有没有特殊字符 " < > [ \ ] ^ { | } 我这边就是因为其中一个参数中有中括…

Spring MVC 四:Context层级

这一节我们来回答上篇文章中避而不谈的有关什么是RootApplicationContext的问题。 这就需要引入Spring MVC的有关Context Hierarchy的问题。Context Hierarchy意思就是Context层级&#xff0c;既然说到Context层级&#xff0c;说明在Spring MVC项目中&#xff0c;可能存在不止…

怎么建设ITIIL运维管理体系?

市场上大多数ITIL解决方案都过于复杂&#xff0c;让我们举一个客户希望实施ITIL方案的例子。首先&#xff0c;客户要通过ITIL咨询来定义ITIL流程&#xff0c;并使其与业务目标保持一致。接下来就是购买ITIL软件&#xff1b;大多数ITIL解决方案将事件、问题和变更管理作为不同的…

STM32CubeMX配置STM32G0 Standby模式停止IWDG(HAL库开发)

1.打开STM32CubeMX选择好对应的芯片&#xff0c;打开IWDG 2.打开串口1进行调试 3.配置好时钟 4.写好项目名称&#xff0c;选好开发环境&#xff0c;最后获取代码。 5.打开工程&#xff0c;点击魔术棒&#xff0c;勾选Use Micro LIB 6.修改main.c #include "main.h"…

【InsCode】InsCode打造的JavaSE与Linux命令互融的伪Linux文件系统小项目

&#x1f9d1;‍&#x1f4bb;作者名称&#xff1a;DaenCode &#x1f3a4;作者简介&#xff1a;啥技术都喜欢捣鼓捣鼓&#xff0c;喜欢分享技术、经验、生活。 &#x1f60e;人生感悟&#xff1a;尝尽人生百味&#xff0c;方知世间冷暖。 &#x1f4d6;所属专栏&#xff1a;Ja…

浅谈 Linux 下 vim 的使用

Vim 是从 vi 发展出来的一个文本编辑器&#xff0c;其代码补全、编译及错误跳转等方便编程的功能特别丰富&#xff0c;在程序员中被广泛使用。 Vi 是老式的字处理器&#xff0c;功能虽然已经很齐全了&#xff0c;但还有可以进步的地方。Vim 可以说是程序开发者的一项很好用的工…