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.mzph.cn/news/61715.shtml

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

相关文章

开源PHP 代挂机源码,可对接QQ、网易云、哔哩哔哩、QQ空间、等级加速等等

本程序运行环境PHP5.6 95dg/config.php修改系统数据库 进入数据库绑定 你搭建的域名即可 部署完成 进入数据库 找到data 输入绑定授权域名即可进行授权打开此网站 网站是无对接接口 需要您自行找对接接口即可 本源码有点乱 有实力的铁铁 可以修改一下哦&#xff01;

Spring MVC介绍

MVC模式是什么 MVC 模式&#xff0c;全称为 Model-View-Controller&#xff08;模型-视图-控制器&#xff09;模式&#xff0c;它是一种软件架构模式&#xff0c;其目标是将软件的用户界面&#xff08;即前台页面&#xff09;和业务逻辑分离&#xff0c;使代码具有更高的可扩展…

造测试数据

对应sql&#xff1a; from openpyxl import Workbook from faker import Faker# 创建一个Workbook对象 workbook Workbook() # 获取默认的活动工作表 sheet workbook.active# 创建一个Faker对象 fake Faker()# 写入表头 header [Name, Address, Email] sheet.append(heade…

ChatGPT 与 Python进行动态可视化分析

Python数据分析目前最为热门的岗位操作。 想使用Python进行可视化分析,但是又不想写代码,测试,验证。可以交给ChatGPT,open AI 来进行操作。 这样的动态图显示,我们只需要给ChatGPT发送一个指令,人工智能就能很快的实现这一操作。 请使用Python与Echarts做一个动态可视…

【LeetCode】3. 无重复字符的最长子串

3. 无重复字符的最长子串&#xff08;中等&#xff09; 方法&#xff1a;滑动窗口 哈希表 思路 这道题主要用到思路是&#xff1a;滑动窗口 什么是滑动窗口&#xff1f; 其实就是一个队列,比如例题中的 abcabcbb&#xff0c;进入这个队列&#xff08;窗口&#xff09;为 ab…

Vue安装过程的困惑解答——nodejs和vue关系、vue的项目结构

文章目录 一、为什么在使用vue前要下载nodejs&#xff1f;二、为什么安装nodejs后就能使用NPM包管理工具&#xff1f;三、为什么是V8引擎并且使用C实现&#xff1f;四、为什么会安装淘宝镜像&#xff1f;五、什么是webpack模板&#xff0c;为什么需要他&#xff1f;六、vue项目…

GIT命令只会抄却不理解?看完原理才能事半功倍!

系列文章目录 手把手教你安装Git&#xff0c;萌新迈向专业的必备一步 GIT命令只会抄却不理解&#xff1f;看完原理才能事半功倍&#xff01; 系列文章目录一、Git 的特征1. 文件系统2. 分布式 二、GIT的术语1. 区域术语2. 名词术语1. 提交对象2. 分支3. HEAD4. 标签&#xff0…

无涯教程-Android - Linear Layout函数

Android LinearLayout是一个视图组&#xff0c;该视图组将垂直或水平的所有子级对齐。 Linear Layout - 属性 以下是LinearLayout特有的重要属性- Sr.NoAttribute & 描述1 android:id 这是唯一标识布局的ID。 2 android:baselineAligned 此值必须是布尔值&#xff0c;为…

chatGPT训练过程

强化学习基础 强化学习是指智能体在不确定环境中最大化其获得的奖励从而达到自主决策的目的。其执行过程为&#xff1a;智能体依据策略决策从而执行动作&#xff0c;然后感知环境获取环境的状态&#xff0c;进而得到奖励(以便下次再到相同状态时能采取更优的动作)&#xff0c;…

(数学) 剑指 Offer 39. 数组中出现次数超过一半的数字 ——【Leetcode每日一题】

❓ 剑指 Offer 39. 数组中出现次数超过一半的数字 难度&#xff1a;简单 数组中有一个数字出现的次数超过数组长度的一半&#xff0c;请找出这个数字。 你可以假设数组是非空的&#xff0c;并且给定的数组总是存在多数元素。 示例 1: 输入: [1, 2, 3, 2, 2, 2, 5, 4, 2] 输…

matlab使用教程(26)—常微分方程的求解

1.求解非刚性 ODE 本页包含两个使用 ode45 来求解非刚性常微分方程的示例。MATLAB 提供几个非刚性 ODE 求解器。 • ode45 • ode23 • ode78 • ode89 • ode113 对于大多数非刚性问题&#xff0c;ode45 的性能最佳。但对于允许较宽松的误差容限或刚度适中的问题&…

DataLoader的使用

示例代码&#xff1a; import torchvision from torch.utils.data import DataLoader from torch.utils.tensorboard import SummaryWriter# 准备的测试数据集 test_data torchvision.datasets.CIFAR10("./dataset", trainFalse, transformtorchvision.transforms.…

控制goroutine 的并发执行数量

goroutine的数量上限是1048575吗&#xff1f; 正常项目&#xff0c;协程数量超过十万就需要引起重视。如果有上百万goroutine&#xff0c;一般是有问题的。 但并不是说协程数量的上限是100多w 1048575的来自类似如下的demo代码: package mainimport ( "fmt" "ma…

CXL 内存交织(Memory Interleaving)

&#x1f525;点击查看精选 CXL 系列文章&#x1f525; &#x1f525;点击进入【芯片设计验证】社区&#xff0c;查看更多精彩内容&#x1f525; &#x1f4e2; 声明&#xff1a; &#x1f96d; 作者主页&#xff1a;【MangoPapa的CSDN主页】。⚠️ 本文首发于CSDN&#xff0c…

Web后端开发(请求响应)上

请求响应的概述 浏览器&#xff08;请求&#xff09;<--------------------------(HTTP协议)---------------------->&#xff08;响应&#xff09;Web服务器 请求&#xff1a;获取请求数据 响应&#xff1a;设置响应数据 BS架构&#xff1a;浏览器/服务器架构模式。…

uniapp项目实战系列(3):底部导航栏与头部导航栏的配置

目录 系列往期文章&#xff08;点击跳转&#xff09;uniapp项目实战系列(1)&#xff1a;导入数据库&#xff0c;启动后端服务&#xff0c;开启代码托管&#xff08;点击跳转&#xff09;uniapp项目实战系列(2)&#xff1a;新建项目&#xff0c;项目搭建&#xff0c;微信开发工具…

33、Flink之hive介绍与简单示例

Flink 系列文章 1、Flink 部署、概念介绍、source、transformation、sink使用示例、四大基石介绍和示例等系列综合文章链接 13、Flink 的table api与sql的基本概念、通用api介绍及入门示例 14、Flink 的table api与sql之数据类型: 内置数据类型以及它们的属性 15、Flink 的ta…

「MySQL-05」MySQL Workbench的下载和使用

目录 一、MySQL workbench的下载和安装 1. MySQL workbench介绍 2. 到MySQL官网下载mysql workbench 3. 安装workbench 二、创建能远程登录的用户并授权 1. 创建用户oj_client 2. 创建oj数据库 3. 给用户授权 4. 在Linux上登录用户oj_client检查其是否能操作oj数据库 三、使用…

C++ 友元

朋友可访问自己的东西&#xff0c;大概就这么个意思。即某类的友元类可访问该类的所有变量以及函数&#xff0c;或友元函数可以访问该类的变量以及函数&#xff0c;在朋友眼中没有任何隐藏&#xff0c;可谓时赤裸相对&#xff0c;肝胆相照&#xff0c;生生挚友。 注意&#xf…

聊聊检索增强,LangChain一把梭能行吗?

背景 ChatGPT诞生之初&#xff0c;大家仿佛从中看到了未来&#xff1a;可以拿着大语言模型&#xff08;LLM&#xff09;这把锤子&#xff0c;锤遍业务上的钉子。其中最被看好的场景&#xff0c;莫过于搜索&#xff0c;不仅是微软、谷歌、百度这样的大公司将LLM用到自己的搜索业…