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 "[email protected]"
git config -l #给出所有的配置
git config --unset user.name #删除某个配置
bash 复制代码
git config --global user.name "aaa"
git config --global user.email "[email protected]"

因为一个机器可以有很多的本地仓库,加了--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 "[email protected]"

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

然后再进入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'

总结

相关推荐
24k小善3 分钟前
FlinkJobmanager深度解析
java·大数据·flink·云计算
Betty_蹄蹄boo20 分钟前
如何搭建spark yarn模式的集群
java·大数据·spark
和算法死磕到底20 分钟前
ubantu18.04(Hadoop3.1.3)之Flink安装与编程实践(Flink1.9.1)
大数据·flink
MXsoft61829 分钟前
监控易一体化运维:巧用排班管理,提升运维协同效能
大数据·服务器·数据库
小研学术1 小时前
如何开展有组织的AI素养教育?
大数据·人工智能·ai·大模型·deepseek·ai素养
TracyCoder1232 小时前
ElasticSearch深入解析(五):如何将一台电脑上的Elasticsearch服务迁移到另一台电脑上
大数据·elasticsearch·jenkins
Lucky GGBond2 小时前
解决 Elasticsearch 启动错误:failed to obtain node locks
大数据·elasticsearch·搜索引擎
柳如烟@2 小时前
Hadoop伪分布式模式搭建全攻略:从环境配置到实战测试
大数据·hadoop·分布式·mysql