当前位置: 首页 > article >正文

git笔记-简单入门

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

  • yum安装git
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 回退版本

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

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 查看差异

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

git diff

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 删除文件

在使用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命令的作用。

gitrm总结.png

.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解决合并冲突

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

冲突模拟.png

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

git init myproject

# 创建master分支
git checkout -b master

# 向文件内写入内容
echo "This is a line added in feature-branch." > example.txt

vim example.txt
```
"This is a line added in feature-branch."
测试
```
git add .
git commit -m "feat commit "

# 创建feat-branch 分支
git checkout -b feat-branch

vim example.txt
```
"This is a line added in feature-branch."
测试
```
git add .
git commit -m "feat commit "


git checkout master

git merge master

# 合并分支失败
git status 

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分支上。只是顺序不同罢了

gitrabase.png


http://www.kler.cn/a/527486.html

相关文章:

  • 【计算机网络】设备更换地区后无法访问云服务器问题
  • Windows程序设计9:文件的读写操作
  • Windows系统本地部署deepseek 更改目录
  • AI学习指南HuggingFace篇-Hugging Face 的环境搭建
  • 列表(列表是什么)
  • 我是如何写作的?
  • C++ memset设置数组内容和memcpy拷贝数组内容的介绍与使用
  • 洛谷 P10288 [GESP样题 八级] 区间 C++ 完整题解(STL二分法)
  • MySQL为什么默认引擎是InnoDB ?
  • 【Leetcode算题记录】枚举技巧(枚举右,维护左)
  • VisionMamba安装
  • Java小白入门教程:三种注释+快捷方式
  • 三傻排序的比较(选择,冒泡,插入)
  • C++——类和对象(下)
  • js基础(黑马)
  • 基于Scrapy采集豆瓣电影Top250的详细数据
  • Java小白入门教程:类?方法?变量?
  • 【LLM-agent】(task1)简单客服和阅卷智能体
  • Hugging Face 推出最小体积多模态模型,浏览器运行成为现实!
  • 学习Python编程,需要哪些编程语言基础?如何开始学习Python?
  • 概述、 BGP AS 、BGP 邻居、 BGP 更新源 、BGP TTL 、BGP路由表、 BGP 同步
  • Python微服务框架Nameko | python 小知识
  • 实现使用K210单片机进行猫脸检测,并在检测到猫脸覆盖屏幕50%以上时执行特定操作
  • Koa 基础篇(二)—— 路由与中间件
  • 事务04之死锁,锁底层和隔离机制原理
  • 【C++语言】卡码网语言基础课系列----4. A+B问题IV