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

Git-基本操作

前言

在这里插入图片描述

安装

git --version
sudo apt-get remove git -y #卸载
sudo apt-get install git -y

基本操作

创建本地仓库

mkdir gitcode

git init
这个就可以创建本地仓库了
然后当前目录下就有一个.git的文件夹
在这里插入图片描述

配置本地仓库

就是配置用户的名称,和用户的email地址
在创建好仓库以后要做的事

git config user.name "hyb"
git config user.name "1111.@qq.com"
git config -l #给出所有的配置
git config --unset user.name #删除某个配置

在这里插入图片描述

git config --global user.name "aaa"
git config --global user.email "aaa@qq.com"

因为一个机器可以有很多的本地仓库,加了–global意思就是给所有的仓库都配置,要不默认就是给当前目录配置

git config --unset user.name 

在这里插入图片描述

加了–global的不能重置

git config --global --unset user.name 

这样就可以全局重置了
在这里插入图片描述

认识工作区,暂存区,版本库

touch ReadMe

在这里插入图片描述

当前git不能管理ReadMe
因为真正的本地仓库就是.git,也就是版本库

但是也不能放入.git文件
因为不允许更改.git
/gitcode是工作区
怎么管理工作区呢
在这里插入图片描述

这个就是工作区放入版本库的方式
修改的工作区内容会写入版本区中的对象库的一个新的git对象中
这个就可以维护版本管理
暂存区就是存入的修改的对象索引
master也是存的对象索引,分支的索引
在这里插入图片描述

添加文件

场景1

vim ReadMe
git add ReadMe 
#或者
git add .
git commit -m "添加的第一个文件"
touch file1 file2
git add file1 file2
git commit -m "添加的三个文件"
git log

显示提交记录
在这里插入图片描述

git log --preetty=oneline

打印一行
在这里插入图片描述

查看.git文件

在这里插入图片描述

index就是暂存区

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这个就是对象

git cat-file -p commitId

在这里插入图片描述
这个可以查看对象

场景2

touch file4
git add file4
touch file5
git commit -m "add"

在这里插入图片描述
这样只会提交一个
因为只add了一个

修改文件

新增,修改,删除都是对工作区的修改
git追踪的管理的是修改,不是文件

vim ReadMe
git status

在这里插入图片描述
这个意思是暂存区里面没有内容,修改在工作区

git diff ReadMe

这个就是显示工作区与暂存区的区别

在这里插入图片描述

a是改动前,b是改动后

git add ReadMe
git status
git commint -m "修改"

版本回退

git reset [--soft | --mixed | --hard] [HEAD]

在这里插入图片描述
第二行是刚刚增加的,怎么回退?
ReadMe有两个版本
在这里插入图片描述
reset 本质回退版本库中的内容

在这里插入图片描述
mixed是默认选项
所以我们看出hard三个区都会回退
那么新的再也不见了

git log --pretty=oneline #可以查看到commitID
git reset --hard  commitID

在这里插入图片描述

la

在这里插入图片描述
file文件全部都不见了,因为都回退完了,回退到只有一行的这个区间,也添加了file文件
所以一起回退了
在这里插入图片描述
这样就回退成功了
怎么反回退呢

git reset --hard commitID

在这里插入图片描述
在这里插入图片描述
直接回退到那个id就可以了
但是没有记录上id的话

在这里插入图片描述
回退的话,就不见了
就不能反回退了

git reflog就可以,这个可以记录回退指令
在这里插入图片描述
这个是一部分的id,这样就可以找到id了

git reset --hard id

找不到id就没有后悔药了

回退只是把master的指向不同的comintid而已

撤销修改情况1

如果我们在我们的⼯作区写了很⻓时间代码,越写越写不下去,觉得⾃⼰写的实在是垃圾,想恢复到上⼀个版本

在这里插入图片描述

git checkout -- ReadMe

在这里插入图片描述
git checkout – ReadMe就是回退到上一个状态,针对工作区
在这里插入图片描述

情况2

这个就要用git reset了

就是把工作区和暂存区回退到版本库的当前版本,因为版本库没有修改的,就是上一次的
我们可以用–hard,所有都回退,或者–mixed(默认),这样就变成了情况1

# HEAD是回退到当前版本,就是版本库中的版本,HEAD^是回退到上一个版本,HEAD^^回退到上两个版本
git reset HEAD ReadMe #只回退这个文件

在这里插入图片描述
这样就回退情况1了
然后

git checkout -- ReadMe

在这里插入图片描述
在这里插入图片描述

情况3

这个就是回退到上一个版本
git reset --hard
前提条件,comit之后没有push

在这里插入图片描述

目的是为了不影响远程仓库的代码

vim
git add ReadMe
git commit -m ""
git reset --hard HEAD^ #回退到上一个版本
git status
cat ReadMe

删除文件

就是删除版本库中的文件

rm file5
git add file5
git commit -m "删除file5"

在这里插入图片描述
上面的操作可以简化为两步
git rm 就是删除工作区,和暂存区

git rm file4
git status 
git commit -m "删除file4"

分支管理

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Git 分支管理__创建、切换、合并分支初体验

git branch #打印本地所有的分支

master是主分支,一直都存在的
head默认指向master分支,就是工作分支
head指向的分支,就是当前工作的分支
在这里插入图片描述
这个*的意思就是master正在工作

git branch dev #创建dev分支

在这里插入图片描述
master还是工作分支

cat .git/HEAD

就可以知道当前HEAD指向的分支
在这里插入图片描述

在这里插入图片描述
而master就是指向的最新的一次提交
dev也是指向的最新的一次提交
我们来让dev成为工作分支

git checkout dev #切换分支
git branch
cat .git/HEAD

在这里插入图片描述

这样工作分支就变成了dev

vim readme
git add readme
git commit -m “aaaa”
git checkout master
git branch
在这里插入图片描述
在这里插入图片描述
cat readme
在这里插入图片描述
master的代码没有新的代码
dev有新的代码
现在开始合并dev和master分支
合并要在master分支上

git checkout master
git merge dev

在这里插入图片描述
在这里插入图片描述
这样就合并好了
这个就是把master指向了dev的最新的一次提交

删除分支

但是不能在dev分支上删除dev,必须在其他分支上才可以

git branch -d dev 
git branch

在这里插入图片描述

合并冲突

在这里插入图片描述

git branch dev1
git checkout dev1
git checkout -b dev1 #等于上面两个命令
git branch
vim readme
git add .
git status
git commit -m "aaaa"
git checkout master
vim readme
git add .
git commit -m "aaa"

在这里插入图片描述
这样合并就会有冲突了
在这里插入图片描述
vim readme
在这里插入图片描述
后面四行就是冲突代码,这个要手动解决,因为已经都搞在文件中了
手动删除
在这里插入图片描述
修复完冲突后,还要提交一次
git status
git add .
git commit -m “aaa”

在这里插入图片描述

git log --graph  --abbrev-commit

在这里插入图片描述
这个就是主和从分支的提交记录,是时间线
红色是主分支

合并模式

在这里插入图片描述

以前合并的模式默认是Fast-Forward

git log --graph  --abbrev-commit

在这里插入图片描述
红色不一定就是master
Fast-Forward就是指向dev2最新的一次提交,问题是看不出来是merge还是正常提交
合并冲突的时候不是Fast-Forward模式,因为最后是master提交的
在这里插入图片描述

git merge --no-ff -m "aaa" dev2 

在这里插入图片描述
在这里插入图片描述
非Fast-Forward模式就是–no-ff,最终master指向的是master新的提交,就是 -m “aaa”

分支策略

在这里插入图片描述
在这里插入图片描述

bug分支

假如我们现在正在dev2 分⽀上进⾏开发,开发到⼀半,突然发现master 分⽀上⾯有bug,需要解决。在Git中,每个bug都可以通过⼀个新的临时分⽀来修复,修复后,合并分⽀,然后将临时⽀删除。

在这里插入图片描述

因为dev2是用来开发新需求的,不是解决bug的,所以要用新的分支解决bug
在这里插入图片描述

我们发现工作区的master的ReadMe自动就跟着别的分支修改而修改了

git checkout dev2
git stash #将工作区里面的内容进行存储
tree .git

在这里插入图片描述

就是把工作区中的修改存入stash里面
但是不会把新建文件存入stash
在这里插入图片描述

git checkout -b fix_bug

然后开始修复bug
git add .
git commit -m “aa”
git checkout master
git merge --no-ff -m “aaaaa”
这样就修改到了主分支了
在这里插入图片描述
git chackout dev2
cat readme
在这里插入图片描述

写的代码不见了,因为放入了存储区里面

怎么获取呢

git stash list
stash 里面存了什么

git stash pop
在这里插入图片描述
在这里插入图片描述
这样就恢复过来了
但是还是没有改bug呢
因为dev2就是基于bug创建的分支
不影响master
开始提交
git add .
git commit -m “aaaa”
然后开始合并
但是会合并冲突呢
因为dev2没有解决bug
所以要人工解决冲突吗
这是bug呢,万一master还继续越改bug越多呢
我们可以先在dev2上合并主分支,这样就不会影响master了
dev2上解决合并冲突
git merge --no-ff -m “aaa” master
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
然后解决冲突
然后提交
git add .
git commit -m “aaaa”
然后切换到master合并dev2
git checkout master
git merge --no-ff -m “aaa” dev2

在这里插入图片描述
在这里插入图片描述
然后删除分支
git branch -d dev2 fix_bug

强制删除分支

就是没有在merge之前删除

git branch -D

merge之后的删除分支

git branch -d
git checkout -b dev3
vim readme
git add .
git commit -m "aa"
git checkout master
git branch -d dev3 #报错
git branch -D dev3

在这里插入图片描述

远程操作

创建远程仓库

ReadMe文件就是写这个仓库的详细描述

在这里插入图片描述
在这里插入图片描述

点击issue,然后新建issue
在这里插入图片描述
就会这样了
就是把问题写在这里,让其他成员看到这些问题
在这里插入图片描述

然后创建

在这里插入图片描述

这个就是合并分支的申请

克隆远程仓库-HTTPS

git clone http地址

在这里插入图片描述

在这里插入图片描述

git remote #查看远程仓库的默认名字
git remote -v #查看更详细

在这里插入图片描述
fetch是拉的操作

克隆远程仓库-SSH

码云——》设置–》SSH公钥

没有SSH的话,是不能git clone SSH的
先创建这个
第⼀步:创建SSHKey。在⽤⼾主⽬录下,看看有没有.ssh⽬录,如果有,再看看这个⽬录下有没有
id_rsa 和id_rsa.pub 这两个⽂件,如果已经有了,可直接跳到下⼀步。如果没有,需要创建SSHKey:

在这里插入图片描述
发现有.SSH目录
在这里插入图片描述
这个文件不是我们想要的

然后开始创建这两个文件

ssh-keygen -t rsa -C "2689241679@qq.com"

这里的邮箱要和马文配置的邮箱一致

在这里插入图片描述

然后再进入ssh目录·查看,公钥和私钥
在这里插入图片描述
在这里插入图片描述

这个就是公钥,全部复制下来
在这里插入图片描述
这样就可以在码云上添加公钥了
在这里插入图片描述
然后就是克隆操作了

git clone SSH

在这里插入图片描述

向远程仓库推送

先配置user.name
和user.email

但是这个name和email都必须和码云一样

在这里插入图片描述
name就是@后面的内容

git config --global user.name "hyb91"
git config --global user.email "xxxx"
vim file.txt
git add .
git commit -m "aaa"
git push origin master:master #第一个是本地分支,第二个是远程分支
git push origin master   #分支一样可以省略

在这里插入图片描述

拉取远程仓库

就是pull
就是让远程仓库领先于本地仓库就可以pull了

别人push了就可以领先了
还有就是远程仓库也可以修改文件(不允许)
在这里插入图片描述

git pull origin master:master  #拉取和合并
git pull origin master

忽视特殊文件

在⽇常开发中,我们有些⽂件不想或者不应该提交到远端,⽐如保存了数据库密码的配置⽂件,那怎么让Git知道呢?在Git⼯作区的根⽬录下创建⼀个特殊的名填进去,Git就会⾃动忽略这些⽂件了。不需要从头写.gitignore ⽂件,然后把要忽略的⽂件.gitignore ⽂件,gitee在创建仓库时就可以为我们⽣成,不过需要我们主动勾选⼀下

在这里插入图片描述

也可以自己在里面创建.gitignore文件

vi .gitignore

# 可以直接写文件名
*.so
*.init

在这里插入图片描述
发现新的a.so文件没有显示
因为没有追踪,因为有.gitignore

git add -f a.so  #强制把忽略的文件提交,尽量不要使用这个
# 可以直接写文件名
*.so
*.init!b.so  #这个的意思就是排除b.so,b.so可以提交

加上叹号,就是不忽略这个文件

git check-ignore -v d.so

这个就是查看文件被忽略的原因
在这里插入图片描述

配置命令别名

比如给命令git status 取别名变为git st

git config --global alias.st status

这样就可以了

git config --global alias.lpa 'log --pretty=oneline --abbrev-commit'

总结

相关文章:

  • 人工智能数学基础(一):人工智能与数学
  • 什么是公共数据?公共数据开放后如何提高新质生产力发展?
  • SQL知识点合集---第二弹
  • 软考-软件设计师中级备考 5、数据结构 树和二叉树
  • 高级数据库对象全面解析:视图、存储过程与触发器
  • HTML5 WebSocket:实现高效实时通讯
  • 喷泉码技术在现代物联网中的应用的总结和参考文献
  • 人工智能数学基础(二):初等数学
  • UniApp 实现分享功能
  • uniapp打包apk如何实现版本更新
  • “数字驱动·智建未来——2025河北省建筑电气与智能化技术交流大会”
  • C++实时统计数据均值、方差和标准差
  • python如何用递归函数求1+2+3+4+5的值
  • 【linux】一文掌握 Tmux 的各种指令(Tmux备忘清单)
  • 开源CMS系统的SEO优化功能主要依赖哪些插件?
  • Android Studio 2024版,前进返回按钮丢失解决
  • mysql模糊多次OR查询某一个字段,针对这个字段进行查询分组
  • 软件评测:从多维度看其界面、功能、性能稳定性如何?
  • ubantu18.04(Hadoop3.1.3)之Flink安装与编程实践(Flink1.9.1)
  • AWS虚拟专用网络全解析:从基础到高级实践
  • 国家统计局:一季度全国规模以上文化及相关产业企业营业收入增长6.2%
  • 第1现场|无军用物资!伊朗港口爆炸已遇难40人伤1200人
  • 国家发改委:建立实施育儿补贴制度
  • 超级干细胞有助改善生育治疗
  • 上海浦东单价超10万楼盘228套房源开盘当天售罄,4月已有三个新盘“日光”
  • 滨江集团去年营收约691亿元,尚未结算的预收房款1253亿元