首页 > 其他分享 >Git零基础入门与常见命令介绍

Git零基础入门与常见命令介绍

时间:2024-08-15 22:26:10浏览次数:12  
标签:git 入门 仓库 常见 Git master 提交 test 分支

Git 是一个开源的分布式版本控制系统,用于高效地处理任何大小的项目。它由Linus Torvalds为了帮助管理Linux内核开发而开发的开放源码软件。与常用的版本控制工具(如CVS、Subversion)不同,Git采用了分布式版本库的方式,不需要服务器端软件支持。

目录

1.安装Git

2.基本命令介绍

2.1创建本地仓库

2.2添加和提交

2.3回滚

3.分支

3.1创建分支

3.2切换分支

3.3合并分支

3.4变基分支

3.5优选

4.使用IDEA进行版本控制

5.远程仓库

5.1创建本地仓库

5.2推送到远程仓库

5.3克隆项目

5.4抓取和拉取


认识Git

当我们开发软件时,通常会有一个工作目录,这里是我们实际编写和修改代码的地方。每当完成了一部分新功能或者修复了一些问题,我们可以把改动暂存起来,这个暂存的地方叫做暂存区。这一步就像是为即将提交的变化做一个标记。

这些标记过的改动最终会被提交到本地仓库中。本地仓库实际上就是存储在你电脑上的一个版本控制系统,记录着项目每一次变更的历史。每次提交都像是给你的代码拍了一个快照,保存了当时的状态。

除了本地仓库外,我们还会用到远程仓库。远程仓库通常是位于服务器上的,团队成员可以通过网络将本地仓库中的更改推送到远程仓库,也可以从远程仓库拉取最新的代码到自己的本地仓库。这样一来,即使团队成员不在同一地点,也能协同工作,保持代码的一致性和最新状态。

通过这样的流程,每次完成一个小的功能点或者修复了一个bug,我们都可以将其提交并记录下来。这样做不仅方便跟踪项目的进展,还可以轻松地回滚到之前的任何状态,或者查看某个版本具体做了哪些改动。这种方式极大地提高了开发效率和代码管理的便捷性。

1.安装Git

Git - Downloading Package

安装完毕后需要先设定用户名及邮箱区分用户

git config --global user.name "Your Name"

git config --global user.email "[email protected]"

2.基本命令介绍

2.1创建本地仓库

将任意一个文件夹作为一个本地仓库,进入之后右键选择Open Git Bash here进入命令窗口

创建本地仓库的命令如下:

输入:git init

输入后,会自动生成一个 .git 目录,注意这个目录是一个隐藏目录,而当前目录就是我们的工作目录。

查看当前状态的命令如下 :

输入:git status 

如果已经成功配置为本地仓库,会出现以下状态,master为当前分支,暂无提交记录,此时仓库为空。

2.2添加和提交

如何用git进行版本控制呢,我们先在上一步创建的文件夹中创建一个文本文档,往里面写一些内容。

再次输入 :git status

发现刚刚新增的文本文件成了Untracked files状态,Untracked files是未追踪文件的意思,此时git不会记录它的变化,等于还没对他进行版本控制,将其当做一个新创建的文件,我们可以将其添加到暂存区,那么它会自动变为被追踪状态,添加到暂存区的命令如下:

输入:git add wyw.txt

或者: git add . //代表一次性添加目录下所有的文件。

然后再次输入 git status 查看当前状态,发现已经成了 to be committed , 此时代表添加到暂存区成功。

接下来就要提交到Git本地仓库了 , 在’ ‘中加入描述方便后续查看, 比如修改了什么或者新增了什么内容。

输入: git commit -m 'Initial Commit'

看到已经添加到本地仓库成功了

如何查看提交记录?

输入: git log

如果里面有多条记录的时候也可以用

git log --online #进行逐行查看,较为直观

修改之后也需要再次提交。当我们对我们的文档加入如下修改之后,再次git status 查看状态,由于文档已经被追踪了

显示有文件被修改但是还未commit

同样的,我们可以将其加入到暂存区,然后提交到本地仓库

git add xx.txt

git commit -m 'Modify first'

使用 git log 查看提交记录,看到已经成功提交,也能看到历史提交,head指向最新的状态

那我们如何查看提交的内容呢?

输入: git show +(commit 的唯一id,完整或者短一些的都可以)

就可以看到新增的修改内容了。

再次查看状态,此时都已成功添加了。

接下来我们看看如何使用.gitignore来完成文件忽略列表,新建一个aaa.text,和一个.gitignore,查看当前状态:这两个文件都没被追踪。

但是我们想要忽略aaa.text,不对其进行版本控制,我们可以在.gitignore里加入:

这样,aaa.text就不在git的控制之中了。

其他可以在.gitignore中编写的语句:

# 这样就会匹配所有以txt结尾的文件

*.txt

# 虽然上面排除了所有txt结尾的文件,但是这个不排除

!bbb.txt

# 也可以直接指定一个文件夹,文件夹下的所有文件将全部忽略

test/

# 目录中所有以txt结尾的文件,但不包括子目录

xxx/*.txt

# 目录中所有以txt结尾的文件,包括子目录

xxx/**/*.txt

完成.gitignore的提交

完成以上的操作,此时本地仓库的状态如下:

2.3回滚

当我们想要回退到过去的版本时,就可以执行回滚操作。

回滚前状态:

输入 :git reset --hard commitId # commit是唯一的标识

执行成功后的文件夹状态:可以看到已经回到了一开始的状态。

查看log日志也只有一条记录,证明我们已经正确回滚了。

那么又怎么取消回滚呢,假设我又想回去回滚前的版本,我们可以用git reflog来找到所有的commit,feflog中的内容不会因为回滚而消失,找到我们想要去到的回滚前的commitID,再使用一一次 git reset -- hard 就可以实现取消回滚:

输入 : git reflog 和 git reset --hard commitId

git reflog可以帮助我们找到所有的操作记录和commitId,我们直接再次reset就能搞定了。

额外的知识点:对于已经创建了,只是进行修改的文件,可以直接commit -a表示自动添加到暂存区

输入: git commit -a -m 'Modify second'

这样就省去了先add再commit的步骤,合二为一。

3.分支

分支是Git中用于开发和管理代码的重要概念之一。每个分支都是一个独立的代码版本,可以在分支上进行修改和提交,而不影响主线(通常是master分支)上的开发工作。

因此,我们可以在一个主干上分出N个分支,分别对多个分支的代码进行维护。

3.1创建分支

查看当前仓库中存在的分支:

git branch

master是默认情况下的分支,我们之前一直使用的也是master分支,我们接着来基于当前分支创建一个新的分支:

输入: git branch test #创建分支

#删除分支 git branch -d test

对文件进行修改然后提交

查看log发现这时候,master实现了新的提交,而我们刚刚创建的test分支没有发生修改,还是之前提交的状态。现在 master和test是两个互不影响的分支了

3.2切换分支

切换分支的命令如下

输入: git checkout test #进行分支切换

切换成功了test分支,此时test分支里的wyw.txt是修改前的版本,与master分支里的版本不一样了。

接下来,我们对test分支进行修改,然后commit

使用 git log -all -graph --oneline #查看所有分支的记录

此时,这两个分支的同一个文件内容就不一样了,他们的内容是相互隔离的。

3.3合并分支

回到master分支,合并分支的命令如下:

输入 : git merge 分支名

进行合并,但此处会有报错,由于我们在两个分支都进行了同一个文件的修改,到底保留谁的修改呢,还是都保留?

查看冲突在哪的命令如下:

输入:git diff

也可以通过查看文件夹看到,

我们保留两个分支的修改

然后再次提交,输入以下命令:

git commit -a -m '描述'

git log --all --graph --oneline #查看记录

现在我们可以看到test 和master 已经合并了。注意,这里并不是直接合并,只是把test分支的内容同步到master分支上,是提交的内容合并到master,并不是分支的合并。

3.4变基分支

我们准备一个master分支和一个test分支,并且提交一个在master分支中的修改。此时日志如下。

然后我们去到test中进行一次修改,再查看log,此时两个分支都得到了修改。

如果我们想要test变基到master上,执行以下命令即可:

输入: git rebase master

如果没有冲突,则成功变基,查看log,与合并不同,现在test与master合并到了一条线,合并是分支回到主干的过程,而变基是直接修改分支开始的位置,比如我们希望将test变基到master上,那么test会将分支起点移动到master最后一次提交位置,变基后,test分支相当于同步了此前master分支的全部提交如下图所示:

3.5优选

现在我们有一个master2和一个master3分支,我们可以通过优选使得其将他分支上的提交作用于当前分支上,比起变基和合并有更大的灵活性,可以选择自己想要的分支。

我们想让master2分支作用于test分支,于是我们去到test分支中,输入以下命令:

git cherry-pick commitId  #commitId是想要优选的唯一的id,此处放入master2的id

这样,就成功地完成了一次优选。

4.使用IDEA进行版本控制

如何在idea中进行版本控制呢,我们先加入我们当前项目的代码:

然后根据我们.gitignore文件中的内容,项目中的部分文件是不会被追踪的,呈现出不一样的颜色如下:

下面这个颜色属于未追踪状态。

idea右上角中间的按钮为commit提交:

然后完成初次提交

idea下方可以观察到提交状态:

继续添加一个文件并且commit:

可以看到控制台也是在执行git命令的。

如何创建分支呢?在下图的新建分支;右键分支可以选择切换分支。

在分支上继续修改,提交可以看到如下状态

5.远程仓库

我们已经在本地编写好了代码,如何把本地仓库推送到远程仓库?

5.1创建本地仓库

加入内容,同步到本地仓库

5.2推送到远程仓库

在此之前我们要有一个GitHub仓库或者码云等仓库,复制这里的https地址:

然后输入命令:

git remote add (仓库名) (http)地址  

此处地址一定要写对,错误的地址也会直接执行而不会给我们报错。

然后输入:

git push 远程仓库名称 本地分支名称[:远端分支名称]

此时远端还没有分支,我们第一次使用可以不加上远端分支名称,远端会自动创建一个master分支 git push origin master

中间需要使用token登录。

成功推送了。

再次修改文件再提交,如下图所示,本地的master已经到了第二个版本,远程仓库还是第一个版本,然后就需要再次提交到远程仓库以保持版本一致,此处也不需要再次提交验证凭证了,git帮我们记住了我们提交的token。

每一次提交代码都要带上分支名字,会显得有点麻烦,我们可以将本地的分支与远程的分支绑定起来,绑定后就不需要指定分支名称了。命令如下:

git push --set-upstream origin master:master

git push origin

出现以下这样的远程仓库和本地仓库处于同一行的状态,就说明我们已经绑定成功。

5.3克隆项目

如果我们已经存在一个远程仓库的情况下,我们需要在远程仓库的代码上继续编写代码,这个时候怎么办呢?可以使用克隆操作来将远端仓库的内容全部复制到本地:

使用如下命令:

git clone + 项目地址  #克隆

5.4抓取和拉取

如果多人在同时开发一个远程仓库的时候,比如A完成了他的模块,A就提交代码并推送到远程仓库,B完成了他的模块,B也提交代码并推送到远程仓库,如果A先提交了,到B提交的时候,B的本地仓库中的内容和远程仓库就不一致了,这时候我们就需要用pull操作,获取远程仓库中最新的提交。

比如当我尝试push到远程仓库的时候,会报错本地仓库内容与远程仓库内容不一致。

我们可以用以下命令解决这样的冲突问题:

先输入:git fetch 远程仓库名称 #抓取:只获取但不合并远端分支,

然后手动合并:git merge 分支名 #手动合并才能提交

或者直接输入 : git pull 远程仓库 #拉取:获取+合并,等于上述二合一。

这样就可以完成同步,多人开发。

标签:git,入门,仓库,常见,Git,master,提交,test,分支
From: https://blog.csdn.net/wywcool/article/details/141223661

相关文章

  • PCB入门笔记—绘制一个只有两个排针的PCB全流程记录—立创EDA专业版
    PCB绘制入门......
  • github 博客
    https://chirpy.cotes.page/posts/getting-started/#option-2-github-forksudoapt-getinstallruby-fullbuild-essentialzlib1g-devecho'#InstallRubyGemsto~/gems'>>~/.zshrcecho'exportGEM_HOME="\(HOME/gems"'>......
  • 函数(子程序)的常见、易混淆概念详解【对初学者有帮助】
    C语⾔中的函数也被称做子程序,意思就是⼀个完成某项特定的任务的⼀小段代码。C语⾔标准中提供了许多库函数,点击下面的链接可以查看c语言的库函数和头文件。C/C++官⽅的链接:https://zh.cppreference.com/w/c/header目录一、函数头与函数体二、实参与形参三、return的用法事......
  • Linux驱动入门实验班——SR04超声波模块驱动(附百问网视频链接)
    目录一、工作原理1.触发信号2.回响信号二、接口图​三、编写思路1.构造file_operations结构体2.实现函数,填充结构体3.编写入口函数4.编写中断处理函数5.编写定时器超时函数6.编写出口函数7.声明入口、出口函数以及协议 四、应用程序五、注意事项:六、源码驱动......
  • HarmonyOS入门基础笔记
    今天先来写一下,新手学习HarmonyOS时候可能会遇到的问题报错:hvigorERROR:[ArkTsCompilerError[ArkTSCompilerError]:ArKTS:ERRORFailedtoexecutees2abc.ErrorMessage:pandargs:Invalidoption"target-api-sub-version"这是在调试预览(Previewer)的时候遇到的报错,使......
  • 服务治理与 Nacos Discovery 入门
    导言微服务架构中,服务治理是至关重要的,它通过服务注册与发现机制,使得微服务可以自动注册和发现其他服务,从而简化了服务间的调用与管理。本文将详细介绍服务治理的核心概念及其在Nacos平台中的实现。1.服务治理概述服务治理是微服务架构的核心,用于管理服务的注册与发......
  • 洛谷题单指南-常见优化技巧-P2866 [USACO06NOV] Bad Hair Day S
    原题链接:https://www.luogu.com.cn/problem/P2866题意解读:每个牛能看到的右边比他矮的牛,直到有比他高的挡住为止,因此只用找每个牛右边第一个比他高的牛的位置即可计算中间比他矮的有多少。解题思路:典型的单调栈应用,注意,常规的单调栈可以用来:1、找每个数左边第一个比他小的数的......
  • 洛谷题单指南-常见优化技巧-P4147 玉蟾宫
    原题链接:https://www.luogu.com.cn/problem/P4147题意解读:找到一个只包含'F'的最大的子矩形。解题思路:方法1:设R为0,F为1,先计算二维前缀和,再枚举所有子矩形左上角(x1,y1)、右下角(x2,y2),计算子矩形的区间和,更新最大值,只能得到部分分。方法2:对于二维矩阵每个点,定义三个属性:h[][]......
  • 【Java】 IO流使用方法 (常见方法)
    Java系列文章目录补充内容Windows通过SSH连接Linux第一章Linux基本命令的学习与Linux历史文章目录Java系列文章目录一、前言二、学习内容:三、问题描述四、解决方案:4.1File的使用4.2防止乱码问题五、总结:5.1学习总结:一、前言学习文件IO流学习文档的使用具......
  • .NET辅助角色服务入门简介
    在日常开发中,并不是所有的功能都是用户可见的,还在一些背后默默支持的程序,这些程序通常以服务的形式出现,统称为辅助角色服务。今天以一个简单的小例子,简述基于.NET开发辅助角色服务的相关内容,仅供学习分享使用,如有不足之处,还请指正。 概述 根据项目需求不同,创建长时间运行的......