Git-基本操作

前言

安装

xml 复制代码
git --version
sudo apt-get remove git -y #卸载
sudo apt-get install git -y

基本操作

创建本地仓库

xml 复制代码
mkdir gitcode

git init

这个就可以创建本地仓库了

然后当前目录下就有一个.git的文件夹

配置本地仓库

就是配置用户的名称,和用户的email地址

在创建好仓库以后要做的事

bash 复制代码
git config user.name "hyb"
git config user.name "1111.@qq.com"
git config -l #给出所有的配置
git config --unset user.name #删除某个配置
bash 复制代码
git config --global user.name "aaa"
git config --global user.email "aaa@qq.com"

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

bash 复制代码
git config --unset user.name 

加了--global的不能重置

bash 复制代码
git config --global --unset user.name 

这样就可以全局重置了

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

bash 复制代码
touch ReadMe

当前git不能管理ReadMe

因为真正的本地仓库就是.git,也就是版本库

但是也不能放入.git文件

因为不允许更改.git

/gitcode是工作区

怎么管理工作区呢

这个就是工作区放入版本库的方式

修改的工作区内容会写入版本区中的对象库的一个新的git对象中

这个就可以维护版本管理

暂存区就是存入的修改的对象索引

master也是存的对象索引,分支的索引

添加文件

场景1

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

显示提交记录

bash 复制代码
git log --preetty=oneline

打印一行

查看.git文件

index就是暂存区



这个就是对象

bash 复制代码
git cat-file -p commitId

这个可以查看对象

场景2

bash 复制代码
touch file4
git add file4
touch file5
git commit -m "add"

这样只会提交一个

因为只add了一个

修改文件

新增,修改,删除都是对工作区的修改

git追踪的管理的是修改,不是文件

bash 复制代码
vim ReadMe
git status

这个意思是暂存区里面没有内容,修改在工作区

bash 复制代码
git diff ReadMe

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

a是改动前,b是改动后

bash 复制代码
git add ReadMe
git status
git commint -m "修改"

版本回退

bash 复制代码
git reset [--soft | --mixed | --hard] [HEAD]

第二行是刚刚增加的,怎么回退?

ReadMe有两个版本

reset 本质回退版本库中的内容

mixed是默认选项

所以我们看出hard三个区都会回退

那么新的再也不见了

bash 复制代码
git log --pretty=oneline #可以查看到commitID
git reset --hard  commitID
bash 复制代码
la

file文件全部都不见了,因为都回退完了,回退到只有一行的这个区间,也添加了file文件

所以一起回退了

这样就回退成功了

怎么反回退呢

bash 复制代码
git reset --hard commitID


直接回退到那个id就可以了

但是没有记录上id的话

回退的话,就不见了

就不能反回退了

git reflog就可以,这个可以记录回退指令

这个是一部分的id,这样就可以找到id了

git reset --hard id

找不到id就没有后悔药了

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

撤销修改情况1

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

bash 复制代码
git checkout -- ReadMe

git checkout -- ReadMe就是回退到上一个状态,针对工作区

情况2

这个就要用git reset了

就是把工作区和暂存区回退到版本库的当前版本,因为版本库没有修改的,就是上一次的

我们可以用--hard,所有都回退,或者--mixed(默认),这样就变成了情况1

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

这样就回退情况1了

然后

bash 复制代码
git checkout -- ReadMe


情况3

这个就是回退到上一个版本

git reset --hard

前提条件,comit之后没有push

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

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

删除文件

就是删除版本库中的文件

bash 复制代码
rm file5
git add file5
git commit -m "删除file5"

上面的操作可以简化为两步

git rm 就是删除工作区,和暂存区

bash 复制代码
git rm file4
git status 
git commit -m "删除file4"

分支管理



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

bash 复制代码
git branch #打印本地所有的分支

master是主分支,一直都存在的

head默认指向master分支,就是工作分支

head指向的分支,就是当前工作的分支

这个*的意思就是master正在工作

bash 复制代码
git branch dev #创建dev分支

master还是工作分支

bash 复制代码
cat .git/HEAD

就可以知道当前HEAD指向的分支

而master就是指向的最新的一次提交

dev也是指向的最新的一次提交

我们来让dev成为工作分支

bash 复制代码
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分支上

bash 复制代码
git checkout master
git merge dev


这样就合并好了

这个就是把master指向了dev的最新的一次提交

删除分支

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

bash 复制代码
git branch -d dev 
git branch

合并冲突

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

这样合并就会有冲突了

vim readme

后面四行就是冲突代码,这个要手动解决,因为已经都搞在文件中了

手动删除

修复完冲突后,还要提交一次

git status

git add .

git commit -m "aaa"

bash 复制代码
git log --graph  --abbrev-commit

这个就是主和从分支的提交记录,是时间线

红色是主分支

合并模式

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

bash 复制代码
git log --graph  --abbrev-commit

红色不一定就是master

Fast-Forward就是指向dev2最新的一次提交,问题是看不出来是merge还是正常提交

合并冲突的时候不是Fast-Forward模式,因为最后是master提交的

bash 复制代码
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自动就跟着别的分支修改而修改了

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

就是把工作区中的修改存入stash里面

但是不会把新建文件存入stash

bash 复制代码
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之前删除

bash 复制代码
git branch -D

merge之后的删除分支

bash 复制代码
git branch -d
bash 复制代码
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地址

bash 复制代码
git remote #查看远程仓库的默认名字
git remote -v #查看更详细

fetch是拉的操作

克隆远程仓库-SSH

码云------》设置--》SSH公钥

没有SSH的话,是不能git clone SSH的

先创建这个

第⼀步:创建SSHKey。在⽤⼾主⽬录下,看看有没有.ssh⽬录,如果有,再看看这个⽬录下有没有

id_rsa 和id_rsa.pub 这两个⽂件,如果已经有了,可直接跳到下⼀步。如果没有,需要创建SSHKey:

发现有.SSH目录

这个文件不是我们想要的

然后开始创建这两个文件

bash 复制代码
ssh-keygen -t rsa -C "2689241679@qq.com"

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

然后再进入ssh目录·查看,公钥和私钥

这个就是公钥,全部复制下来

这样就可以在码云上添加公钥了

然后就是克隆操作了

bash 复制代码
git clone SSH

向远程仓库推送

先配置user.name

和user.email

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

name就是@后面的内容

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

拉取远程仓库

就是pull

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

别人push了就可以领先了

还有就是远程仓库也可以修改文件(不允许)

bash 复制代码
git pull origin master:master  #拉取和合并
git pull origin master

忽视特殊文件

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

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

vi .gitignore

bash 复制代码
# 可以直接写文件名
*.so
*.init

发现新的a.so文件没有显示

因为没有追踪,因为有.gitignore

bash 复制代码
git add -f a.so  #强制把忽略的文件提交,尽量不要使用这个
bash 复制代码
# 可以直接写文件名
*.so
*.init

!b.so  #这个的意思就是排除b.so,b.so可以提交

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

bash 复制代码
git check-ignore -v d.so

这个就是查看文件被忽略的原因

配置命令别名

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

bash 复制代码
git config --global alias.st status

这样就可以了

bash 复制代码
git config --global alias.lpa 'log --pretty=oneline --abbrev-commit'

总结

相关推荐
QYR_113 小时前
机械制造用固体润滑涂层市场分析:2032年全球市场规模预计达8.78亿元,CAGR为6.2%
大数据·人工智能·物联网
数字化顾问4 小时前
(144页PPT)数字化转型汽车企业数智化战略规划(附下载方式)
大数据
zttbee4 小时前
git命令
git
智慧物业老杨5 小时前
数字底座,重构小区治理秩序
大数据
计算机编程指导师5 小时前
【计算机毕设选题推荐】基于Hadoop的宫颈癌变进程光谱数据分析系统源码 毕业设计 选题推荐 毕设选题 数据分析 机器学习
大数据·hadoop·python·数据分析·spark·毕业设计·宫颈癌变
guhunyihan6 小时前
无代码系统搭建平台,探索恐象 AI 带来的开发新范式
大数据·人工智能
计算机编程指导师6 小时前
【计算机毕设选题推荐】基于Hadoop+Spark的化妆品销售大数据分析系统源码 毕业设计 选题推荐 毕设选题 数据分析 机器学习
大数据·hadoop·python·spark·毕业设计·课程设计·化妆品
benchmark_cc7 小时前
前复权数据每天可能变化,历史数据库应该覆盖还是保留原始价格?
大数据·python·pandas·量化交易·股票数据·quantdash
计算机编程指导师7 小时前
计算机毕设选题推荐:Hadoop大数据下的个体肥胖健康风险评估与可视化系统源码 毕业设计 毕设选题 数据分析 机器学习
大数据·hadoop·python·spark·毕业设计·课程设计·肥胖健康风险
m0_715674437 小时前
数据分类分级的范式转换:从规则匹配到场景化高准确率一键部署
大数据·网络·人工智能·网络安全