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 教程 | 菜鸟教程

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

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

相关文章

MySQL之事务与引擎

目录 一、事物 1、事务的概念 2、事务的ACID特点 3、事务之间的相互影响 4、Mysql及事务隔离级别(四种) 5、演示 1、查询会话事务隔离级别 2、查询会话事务隔离级别 3、设置全局事务隔离级别 4、设置会话事务隔离级别 6、事务控制语句 7、演示 1、测试提交事务 2、测试事…

countDown+react+hook

道阻且长&#xff0c;行而不辍&#xff0c;未来可期 知识点一&#xff1a; new Date().getTime()可以得到得到1970年01月1日0点零分以来的毫秒数。单位是毫秒 new Date().getTime()/1000获取秒数1分钟60秒&#xff0c;1小时60分钟1hour:60*60>单位是秒 60*60*1000>单位…

Java的成员类可以被private修饰

说明 Java的成员类可以被private修饰&#xff0c;但外部类、局部类不能被private修饰。 示例 成员类用private修饰—允许 下面代码中的成员类Class2 被private修饰&#xff0c;是允许的&#xff1a; package com.thb;public class Parent {public class Class1 { }private…

ChatGPT Prompting开发实战(一)

一、关于ChatGPT Prompting概述 当我们使用ChatGPT或者调用OpenAI的API时&#xff0c;就是在使用prompt进行交互&#xff0c;用户在对话过程中输入的一切信息都是prompt&#xff08;提示词&#xff09;&#xff0c;当然工业级的prompt与人们通常理解的prompt可能不太一样。下面…

基于java swing和mysql实现的仓库商品管理系统(源码+数据库+运行指导视频)

一、项目简介 本项目是一套基于java swing和mysql实现的仓库商品管理系统&#xff0c;主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的Java学习者。 包含&#xff1a;项目源码、项目文档、数据库脚本等&#xff0c;该项目附带全部源码可作为毕设使用。 项目都经…

新SDK平台下载开源全志V853的SDK

获取SDK SDK 使用 Repo 工具管理&#xff0c;拉取 SDK 需要配置安装 Repo 工具。 Repo is a tool built on top of Git. Repo helps manage many Git repositories, does the uploads to revision control systems, and automates parts of the development workflow. Repo is…

若依vue打印的简单方法

像我们后端程序员做前端的话,有时候真不需要知道什么原理,直接塞就好了 我们选用基于hiprint 的vue-plugin-hiprint来打印 目的是为了实现点击某些行的数据,然后点击某个按钮直接弹出下面的打印 此链接 大佬是原创,我拿来总结梳理一下 插件进阶功能请移步: 链接 插件模板制作页…

Leetcode每日一题:1267. 统计参与通信的服务器(2023.8.24 C++)

目录 1267. 统计参与通信的服务器 题目描述&#xff1a; 实现代码与解析&#xff1a; 写法一&#xff1a;两次遍历 hash 原理思路&#xff1a; 写法二&#xff1a;三次遍历 原理思路&#xff1a; 1267. 统计参与通信的服务器 题目描述&#xff1a; 这里有一幅服务器分…

三维模型OBJ格式轻量化压缩并行计算处理方法浅析

三维模型OBJ格式轻量化压缩并行计算处理方法浅析 三维模型的轻量化是指通过一系列技术和算法来减小三维模型的文件大小&#xff0c;以提高模型在计算机中的加载、渲染和传输效率。并行计算是利用多个计算单元同时执行任务&#xff0c;以加速计算过程的一种技术。在三维模型的O…

基于Spring Boot的软件缺陷追踪系统的设计与实现(Java+spring boot+MySQL)

获取源码或者论文请私信博主 演示视频&#xff1a; 基于Spring Boot的软件缺陷追踪系统的设计与实现&#xff08;Javaspring bootMySQL&#xff09; 使用技术&#xff1a; 前端&#xff1a;html css javascript jQuery ajax thymeleaf 微信小程序 后端&#xff1a;Java spri…

【数据分析】统计量

1. 均值、众数描述数据的集中趋势度量&#xff0c;四分位差、极差描述数据的离散程度。 2. 标准差、四分位差、异众比率度量离散程度&#xff0c;协方差是度量相关性。 期望值分别为E[X]与E[Y]的两个实随机变量X与Y之间的协方差Cov(X,Y)定义为&#xff1a; 从直观上来看&…

ppt转pdf免费的工具哪个好用?ppt在线转pdf的方法分享

在工作和学习中&#xff0c;将PPT文件转换为PDF格式具有重要意义。PDF文件的大小较小&#xff0c;适用于各种平台和设备&#xff0c;保持了原始文件的内容和格式&#xff0c;具有广泛的可读性和兼容性。那么小编就来为大家详细地说一说“ppt转pdf免费的工具哪个好用?ppt在线转…

US-DAS1、US-P2A单路及双路插头式比例放大器

US-P1、US-P2A、US-P2F插头式安装比例放大器控制不带电反馈的双路比例电磁铁的比例阀&#xff0c;如直动式或先导式比例方向阀的驱动控制。 工作电源24VDC标准&#xff1b; 兼容指令10V、4-20mA、0~10V、0~5V(电位器控制&#xff09;&#xff1b; 输出电流0~2A&#xff1b; …

JavaScript—面向对象、作用域

C#&#xff1a;从类继承 js&#xff1a;从对象继承 什么叫继承&#xff1f; 模板&#xff08;类&#xff09; 原型继承&#xff08;实体&#xff09; 有一个对象存在&#xff0c;构造函数设置原型为这个对象 创建出来的对象就继承与这个对象&#xff08;从对象那里继承&am…

作业人员护目镜佩戴自动识别

作业人员护目镜佩戴自动识别通过pythonyolo深度学习算法模型&#xff0c;作业人员护目镜佩戴自动识别利用布设摄像头并结合图像算法能够实时监测作业人员是否佩戴护目镜。一旦发现未佩戴的情况立即发出警告&#xff0c;并及时记录异常情况。在YOLOv1提出之前&#xff0c;R-CNN系…

【Python Flask+Nginx】实现HTTP、WS (两步实现,简单易懂)

目录 一、创建Flask应用 二、部署Nginx 2.1 下载Nginx 2.2 修改Nginx配置文件 2.3 启动Nginx 三、测试 一、创建Flask应用 首先我写了如下一个基于Flask的Demo&#xff0c;该Demo包含两个接口一个是HTTP接口&#xff08;http://127.0.0.1:5000&#xff09;&#xff0c…

数字孪生赋能工业制造,为制造业带来新机遇与挑战

数字孪生技术是利用模拟仿真技术将实体对象数字化的技术。它基于虚拟现实、人工智能和云计算等技术&#xff0c;能够创建与真实物体相同的数字模型&#xff0c;并通过实时监测和分析手段&#xff0c;为制造企业提供关于该物体的全面数据&#xff0c;从而优化产品开发和生产过程…

springboot服务端接口外网远程调试,并实现HTTP服务监听

文章目录 前言1. 本地环境搭建1.1 环境参数1.2 搭建springboot服务项目 2. 内网穿透2.1 安装配置cpolar内网穿透2.1.1 windows系统2.1.2 linux系统 2.2 创建隧道映射本地端口2.3 测试公网地址 3. 固定公网地址3.1 保留一个二级子域名3.2 配置二级子域名3.2 测试使用固定公网地址…

.NET 8 Preview 7 中的 ASP.NET Core 更新

作者&#xff1a;Daniel Roth 排版&#xff1a;Alan Wang .NET 8 Preview 7 现在已经发布&#xff0c;其中包括了对 ASP.NET Core 的许多重要更新。 以下是预览版本中新增功能的摘要&#xff1a; 服务器和中间件 防伪中间件 API 编写 最小 API 的防伪集成 Native AOT 请求委托…

NEOVIM学习笔记

GitHub - blogercn/nvim-config: A pretty epic NeoVim setup 一直使用vim&#xff0c;每次到了新公司都要配置半天&#xff0c;而且常常配置失败&#xff0c;很多插件过期不好用。偶然看到别人的NEO VIM&#xff0c;就试着用了一下&#xff0c;感觉还不错。 用来开发和阅读C代…