git笔记-简单入门

news/2025/2/4 10:47:01/

git_0">git笔记

git是一个分布式版本控制系统,它的优点有哪些呢?分为以下几个部分

  1. 与集中式的版本控制系统比起来,不用担心单点故障问题,只需要互相同步一下进度即可。
  2. 支持离线编辑,每一个人都有一个完整的版本库。
  3. 跨平台支持
  4. 性能高效

安装和初始化配置

git的安装方式有方式

  1. 带GUI的git,带有图形化界面
  2. 命令行安装

个人比较推荐命令行安装的方式,我采用的是centos 7.x的系统

  • 添加 CentOS/RHEL 7 存储库
sudo yum -y install https://packages.endpointdev.com/rhel/7/os/x86_64/endpoint-repo.x86_64.rpm
sudo yum install git -y

初始化git

  1. 配置用户名
git config --global user.email '你的邮箱'
  1. 配置邮箱
git config --global user.email '你的密码'

创建仓库

git中,创建仓库有两种方式

  1. 使用git init
git init
  1. git init reop name
git init name
  1. gitee/github已有的仓库,创建仓库(使用clone的方式)
git clone git@gitee.com:tmeermer/hnys.git

工作区和文件状态

提交流程.png

git有三个工作区域分为工作区,暂存区,本地仓库。现在来简单解释一下这三个区域

工作区:当前的工作目录,所有的操作都在这里进行

暂存区:工作区完成工作后,将产生的文件推送到暂存区,临时保存这些文件。可以理解为一个临时的杂货铺

本地仓库:这里存放最终的成品,也就是仓库。

添加和提交文件

  1. 添加文件
git add filename

添加时后面需要添加文件名,也可使用通配符进行批量提交

git  add *.txt 

现在该命令就只会提交以txt为后缀的文件了,当然也可以使用.来提交当前文件夹下的所有文件

git add .
  1. 提交文件
git commit -m "这是第一次提交"
  • -m参数的含义是说明此次提交的主要信息,如果不加上m参数,git会默认打开vim编辑器,来输入提交的信息
  1. 查看提交状态
git status;

查看提交状态.png

其中查看提交日志的命令是

git log 

也可以加上参数查看简洁的提交日志

git log --oneline

提交日志.png

其中有邮箱和名称,都是通过我们之前使用的config命令来配置的。

git_reset__147">git reset 回退版本

在日常开发的时候,我们通常都有进行版本回退的需求。就可以使用reset这个命令以下是它的每个参数含义

<a class=gitrerset.png" />

soft参数的含义是:回退到某一次的提交位置,但是工作区和暂存区的内容是保存的

·hard·参数的含义是:回到某一次的提交位置,但是工作区和暂存区的内容全部丢弃

mixed参数介于sort和hard中间,工作区的内容保留但是暂存区的内容删除

soft测试

现在来测试soft参数的命令产生的作用

echo "file1" > file1.txt
echo "file2" > file2.txt
echo "file3" > file3.txt

三个文件.png

现在创建了三个txt的文件并且使用了以下命令进行提交,分为三次

git add file1.txt
git commit -m "第一次提交"
git add file2.txt
git commit -m "第二次提交"
git add file3.txt
git commit -m "第三次提交"

查看提交结果

三次提交.png

现在是已经有三次提交了,现在回退到第二次提交 7b6b999

git reset --soft 7b6b999

回退第二次.png

可以发现真的回退到了第二次提交这个位置,而且暂存区和工作区的文件都没有被丢弃

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

在提交的过程中出现了nothing to commit, working tree clean问题,原因是:

暂存区没东西获或者东西都提交到版本库中的当前分支,且工作区

中的文件都被git跟踪了(都git add .

解决方案:修改需要提交的文件中的任何一处(空格都行),然后重新add,commit。

hard测试

现在来测试hard参数会产生什么样的效果,分为了三个文件夹进行测试

echo "file1" > file1.txt
echo "file2" > file2.txt
echo "file3" > file3.txt

先创建三个txt文件,都进行依次提交

git add file1.txt 
git commit -m "这是第一次提交"
git add file2.txt 
git commit -m "这是第二次提交"
git add file3.txt 
git commit -m "这是第三次提交"

hard三次提交.png

进行回退操作,回退至d7a1e8a

hard测试.png

测试发现,暂存区和工作区的文件的file3.txt都被丢弃了。

hard参数的话,需要慎用!

mixed测试

现在来测试mixed参数,还是添加三个txt文件

echo "file1" > file1.txt
echo "file2" > file2.txt
echo "file3" > file3.txt

依次进行提交

git add file1.txt 
git commit -m "这是第一次提交"
git add file2.txt 
git commit -m "这是第二次提交"
git add file3.txt 
git commit -m "这是第三次提交"

进行回退操作,回退至第二次提交:d02077e

git reset --mixed d02077e

查看暂存区和目录下的文件状态

mixed测试.png

可以发现工作区的文件还在,但是暂存区的不存在了,此时HEAD指针指向了第二次提交的位置。

git_diff__280">git diff 查看差异

当需要查看工作区和暂存区的内容是否有差异时,需要使用以下命令查看差异

git diff

<a class=git diff.png" />

需要查看之前任意的几个版本的差异

git diff HEAD~X HEAD

也可直接使用来查看最后一个版本之前的差异

git diff HEAD
git diff HEAD~ HEAD

还可以在后面加上文件名,只查看该文件的差异

git diff HEAD~1 HEAD file2.txt

每次提交都有一个哈希值,也可以使用这个值来判断这两次提交之间的差异

git diff d7a1e8a 9a857be

差异.png

git_rm__321">使用git rm 删除文件

在使用git时,想删除本地工作区和暂存区的文件时,如果使用Linux的系统命令的话会比较麻烦

rm file1.txt

rm删除.png

删除完查看状态,可以发现在工作区的文件已显示被删除了,还需要使用以下命令来更新,这里的提交是要告诉暂存区,在下一次提交的时候file1.txt已经被删除了!

git add .
git commit -m "delete file1.txt"

rm删除后更新.png

但是git给我们提供了 git rm 命令,可以让操作变得更简单

git rm file

测试一下、

git rm file2.txt

girm删除.png

这次可以发现,暂存区和工作区都同步被删除了,这就是 git rm命令的作用。

<a class=gitrm总结.png" />

gitgnore_361">.gitgnore忽略文件

这个文件的作用是,让我们忽略掉一些不应该加入到版本库中的文件,这样可以让我们的版本库变得更加干净和更小

忽略文件.png

这是我们需要忽略的文件,以免带来不必要的风险

现在向我们的本地仓库中添加.gitignore文件

echo "acess.log" > .gitignore
vim .gitignore
// 添加如下内容
access.log
*.log

添加到暂存区

git add .

提交到本地仓库

git commit -am "full submit"

查看效果

忽略文件测试.png

可以发现我们创建的日志文件并没有被提交到缓存区。

如果打算要忽略全部的日志文件,可以参考以下写法

*.log
# 忽略temp目录下的文件
temp/

关联本地仓库和远程仓库

之前演示的都是本地仓库进行的提交和各种测试,但是在实际的生产环境中往往都是需要连接到远程仓库进行提交和各种其他操作。但是先决条件是配置好了ssh密钥,平台可以选择github/gitee。其中gitee相当于国内的gihub,速度较快。

  • 登录gitee设置ssh公钥(已省略,具体步骤可自行查阅)

网址:gitee

  • clone远程仓库到本地,并且同步提交到远程的master分支
git remote -v 查看有没有远程仓库
git init .
git clone git@gitee.com:tmeermer/c-language-practice-code.git
//注:项目地址形式为:https://gitee.com/xxx/xxx.git或者 git@gitee.com:xxx/xxx.git
git add .
git commit -m "commit"
git push origin master 
将本地的master分支推送到远程的master分支,如果不存在则会覆盖

提交到远程.png

分支管理

git中的分支可以看作一棵树上的枝干,最粗壮的是主分支,其他分支都是从分支。git中的主分支叫做master,通常主分支都是用来发布重大更新的,其他开发和测试的过程都是在开发分支上完成的。测试通过后才会合并进主分支。

  1. git如何查看当前分支?
git branch
  1. git如何创建分支?
git checkout dev
git status
  1. git中如何切换分支?
git checkout branch--name
  1. git中如何合并分支?
git memger branch--name
  1. git中如何删除无用的分支?
git branch -d branch--name

git_476">git解决合并冲突

现在来模拟两个两个分支修改了同一处的情况,这样会导致git发生合并冲突,从而合并失败

冲突模拟.png

在以上操作中,我们在两个分支中提交了一样的内容,导致了冲突。

git init myproject# 创建master分支
git checkout -b master# 向文件内写入内容
echo "This is a line added in feature-branch." > example.txtvim example.txt
```
"This is a line added in feature-branch."
测试
```
git add .
git commit -m "feat commit "# 创建feat-branch 分支
git checkout -b feat-branchvim example.txt
```
"This is a line added in feature-branch."
测试
```
git add .
git commit -m "feat commit "git checkout mastergit merge master# 合并分支失败
git status 

<a class=git冲突.png" />

现在解决冲突需要修改

切换到master分支git checkout master
vim example.txt找到冲突的行修改的行进行修改git add .
git commit -m "commit this a master"切换到feat分支
git checkout feat-branch 
修改冲突的位置
git add .
git commit -m "commit this a feat-branch"最后合并冲突
git merge master

解决冲突.png

以上就是如何解决git分支冲突的方法。

回退和rebase

分支的合并可以使用git merge 命令来进行合并,并且还会保存所有的提交记录。git 还有另一种合并分支的方式就是使用rebase

git rebase feat-branch

rebase的翻译叫做变基,在git中我们可以这么理解

首先rebase只能在主分支上提交吗?其实不是的

它可以在任意分支上执行,如果是在main分支上执行

git rebase dev

则main上的提交记录会变基到dev分支的末尾

如果是在dev分支上提交

git rebase main

dev的两条提交记录都会变基到Main分支上。只是顺序不同罢了

<a class=gitrabase.png" />


http://www.ppmy.cn/news/1569210.html

相关文章

HarmonyOS应用开发快速入门

本节内容将帮助开发者学习如何构建一个全新的HarmonyOS应用&#xff0c;学习使用DevEco Studio创建新项目、使用预览器预览页面、了解基础组件如Image、Text等。 文章目录 一、介绍二、创建一个新项目三、页面结构总览四、自定义文本视图五、创建Image组件 一、介绍 根据本教程…

【25考研】考研366是否能进北航计算机复试?该怎么准备?

366分对于北航来说可能有擦边进复试的风险&#xff0c;建议同学还是尽早准备复试&#xff0c;争取逆风翻盘&#xff0c;顺利上岸&#xff01; 北航计算机复试有机试&#xff0c;而且是先机试&#xff0c;第二天再进行复试。 一、复试内容 根据以往的经验&#xff0c;材料提交的…

【含文档+PPT+源码】基于小程序的智能停车管理系统设计与开发

项目介绍 本课程演示的是一款基于小程序的智能停车管理系统设计与开发&#xff0c;主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的 Java 学习者。 1.包含&#xff1a;项目源码、项目文档、数据库脚本、软件工具等所有资料 2.带你从零开始部署运行本套系统 3…

【Uniapp-Vue3】解决uni-popup弹窗在安全区显示透明问题

我们在使用uni-popup时&#xff0c;如果想要给弹出内容添加一个背景颜色&#xff0c;我们会发现在安全区域是不显示该背景颜色的。 首先根据如下的目录结构找到uni-popup.vue文件 在该文件中找到bottom配置&#xff0c;将红箭头所指代码注释掉 下面的安全区域就没有了&#xff…

联想拯救者Y9000P IRX8 2023 (82WK) 原厂Win11 家庭中文版系统 带一键还原功能 安装教程

安装完重建winre一键还原功能&#xff0c;和电脑出厂时的系统状态一模一样。自动机型专用软件&#xff0c;全部驱动&#xff0c;主题壁纸&#xff0c;自动激活&#xff0c;oem信息等。将电脑系统完全恢复到出厂时状态。 支持机型 (MTM) : 82WK 系统版本&#xff1a;Windows 1…

【Linux】从硬件到软件了解进程

个人主页~ 从硬件到软件了解进程 一、冯诺依曼体系结构二、操作系统三、操作系统进程管理1、概念2、PCB和task_struct3、查看进程4、通过系统调用fork创建进程&#xff08;1&#xff09;简述&#xff08;2&#xff09;系统调用生成子进程的过程〇提出问题①fork函数②父子进程关…

mysqldump+-binlog增量备份

注意&#xff1a;二进制文件删除必须使用help purge 不可用rm -f 会崩 一、概念 增量备份&#xff1a;仅备份上次备份以后变化的数据 差异备份&#xff1a;仅备份上次完全备份以后变化的数据 完全备份&#xff1a;顾名思义&#xff0c;将数据完全备份 其中&#xff0c;…

win32汇编环境,窗口程序中使用进度条控件

;运行效果 ;win32汇编环境,窗口程序中使用进度条控件 ;进度条控件主要涉及的是长度单位&#xff0c;每步步长&#xff0c;推进的时间。 ;比如你的长度是1000&#xff0c;步长是100&#xff0c;每秒走1次&#xff0c;则10秒走完全程 ;比如你的长度是1000&#xff0c;步长是10&am…