浅谈一下Git的使用

目录

1、对于Git的理解

2、安装Git

3、使用Git

3.1 一些必备的Linux命令

3.2 提交一个文件到仓库

3.3 撤销和删除

3.4、Git的一些其他操作

3.5、分支

4、Git常用命令总结

5、最后


1、对于Git的理解

Git是一个分布式版本管理系统!!!

与Git密不可分的是仓库,仓库在电脑中的表现形式为文件夹;这里demo文件夹就是一个Git仓库;

 打开文件夹里面有1个txt文件和1个.git文件夹(如果看不到是隐藏了,打开隐藏即可);

Git里面有三个概念,工作区、暂存区(stage)和仓库;

工作区简单点理解就是这个文件夹中除了.git文件夹以外的部分,这里是readme.txt文件;

暂存区(stage)和仓库为了便于理解可以把它看作是.git文件夹,实际上.git文件夹是Git用来管理这个仓库的;

2、安装Git

1、安装Git,去官网下载安装包,直接百度Git就可以出来;

2、安装完成后鼠标右击后会发现集成了下面两个命令; Git Bash 是Linux操作,Git GUI是图形化操作,一般我们使用Git Bash,这也是本文中介绍的;值得注意的是,当在哪个文件夹中点击,当前的Git路径就是哪个,所以我们可以在任何我们想要的地方创建Git仓库;

3、使用Git

3.1 一些必备的Linux命令

mkdir demo    创建demo文件夹;

cd    改变文件路径;

touch readme.txt    创建readme.txt文件;

pwd    显示当前路径;

3.2 提交一个文件到仓库

Git init --初始化仓库; 将demo文件夹初始化成一个Git仓库;

打开readme.txt文件,写入两句话

git is a distributed version control system.

git is a free system.

使用cat <file> 命令可以查看文件内容;

git status --查看当前Git的状态,能更好的指导我们下一步操作;

可以看到readme.txt文件未被追踪,可以使用git add <file>去添加;

git add --将工作区的文件添加到暂存区(stage);

 这里可以看到git的状态发生了变化,文件已经被add到暂存区(stage)但是没被提交;

现在我们使用git commit 命令进行提交,-m是一个备注,就是记录我们这次改变做了什么,这里是新建了一个文件;

然后我们查看一下Git的状态,没有东西提交,工作树是干净的,提交完成;

现在让我们看一下demo文件夹;

 有一个绿色的对号,提交完成;

修改readme.txt,添加一句话:git is fast.

 文件夹的状态发生了变化,使用git status查看一下Git的状态;

 可以看到,readme.txt文件被修改,使用add <file> 添加到暂存区,这和我们上面第一次提交文件的步骤是一样的;

总结:Git提交文件需要先add添加到暂存区,然后再commit提交,commit后面要写提交信息;当文件发生改动时,要再次执行add和commit;

3.3 撤销和删除

接上一步操作,修改了readme.txt文件但是没有add,查看一下Git的状态

这里有两个提示:

使用 add <file> 添加到暂存区;

使用 git restore <file> 放弃修改;

使用git restore命令并查看文件内容;

 可以看到放弃了修改;然后我们重新修改再add到暂存区并查看Git状态;

 可以看到已被添加到暂存区(stage)

提示可以使用git restore --stage <file> 来撤销操作;

使用该命令

 可以看到又回到了add之前的状态;

如果再commit之后还能修改吗?让我们试一下

 再提交之后查看Git状态,没有撤销命令的提示,所以再commit之后是不能进行撤销的;那么如果commit了不想要的文件到仓库了怎么办?只能delete了;

删除文件,主要工作区文件和commit到仓库的文件;

使用rm <file>  删除工作区文件,这是Linux命令;

使用git rm <file>删除git仓库中的文件,需要注意的是,再git rm之后要commit;

新建一个test.txt文件并提交到Git仓库;

 使用git rm <file> 进行删除;

 查看Git状态,提示删除;

提示可用git restore --staged <file> to unstage, 这和前面撤销add的命令一样,这也就解释了为什么再git rm之后还要commit,这一步只是提交到了暂存区;

然后我们commit到仓库;

总结:在commit之前都可以进行撤销操作,可根据界面的提示进行操作;

撤销:

未add:git restore <file>  或着 git checkout -- <file>;

add后:git restore --stage <file> 或者 git reset HEAD <file>;

删除:

工作区:rm <file>;

仓库:git rm <file>, 之后还要进行commit;

3.4、Git的一些其他操作

使用git diff <file>查看文件更改了什么,diff即difference

在readme.txt文件中再加一句话; 可以很清楚的看到我们对readme.txt进行的操作;

使用git log查看进行的所有操作,如果不能退出可以按键盘上的Q键

从开始到现在我们提交的所有操作都可以看到;如果嫌麻烦,可以使用精简版的命令

git log --pretty=oneline

 注意每次提交都有一长串字母+数字,这是commit id,它是一串16进制的是数字,可以理解为每一个版本的版本号,通过它可以找到对应的版本,有点类似于指针。使用git reset 可以回退到上个版本,git reset --hard HEAD^   --回退一个版本,HEAD^^  --回退两个,回退100个--HEAD~100;   // HEAD是一个仓库的指针,它指向哪,当前就显示什么(拙见);

 查看现在的readme.txt文件内容;

 readme.txt中的内容也发生了变化,回退到了3个版本之前,现在的readme.txt是3个版本之前的了,能不能回到现在呢?当然可以,前面说了commit id --唯一的版本号

使用  git reset -- hard <commit id>  // commit id 不用全部输入完,只输入前几位就行,因为它们很难相同,系统会自动进行查找;

 可以看到又变了回来,并且readme.txt中的内容也发生了改变,这就是版本管理系统,可以随时随地的看到任何一个历史版本;这里有一个问题,如果commit id 找不到怎么办?往前翻,但是如果你clear了,那就是个bad news了;别急,毕竟它是Git,

使用git reflog 命令;

commit id 又出来了;

总结:使用git reset --hard <commit id>可以查看不同的提交版本,git reflog可以查看已清除的commit id;

3.5、分支

前面进行的操作中,我们经常会见到一个东西 HEAD -> master,head指向的是master(主分支)这个分支;在工作中我们可以创建自己的分支,然后合并到项目的主分支上面去,我们自己的分支和主分支之间是互不干扰的;有点类似于分组做小组作业我们做自己的部分,然后最后整合到一起,彼此之间都互不影响;

创建分支

 git checkout -b <branch name>   或者 git switch -c <branch name>

// 创建并切换分支,它相当于git branch <branch name>, git checkout <branch name>两句命令;

切换分支

git checkout <branch name> 或者 git switch <branch name>

 可以看到顺利的创建并且切换;

使用git branch 可以查看仓库的所有分支,但前所在分支前面有一个*;

 之前我们的操作都是在master分支上面进行的,现在我们在dev分支上面进行操作;

在readme.txt文件中添加一句话,然后add commit;

 然后切换到master分支并查看realme.txt文件的内容;

 可以看到我们刚才添加的内容并没有出现;由此可以看出dev分支和master分支是互不影响的,那么如何将dev分支上面的操作合并到master主分支上面呢?

使用git merge <branch> // 将指定分支内容合并到当前分支;

 再次查看readme.txt内容;

 可以看到内容发生了变化; 

注意:merge 合并分支有两种模式

一种是Fast-forward(默认模式),这种是直接将HEAD指针指向dev,删除分支后就会去掉分支信息;

一种是关闭Fast-forward(no-ff),这种模式在git后会产生一个新的commit;

使用git log --graph 可以看到分支图合并;

git log --graph --pretty=oneline --abbrev-commit 简化提交信息;

 可以看到HEAD直接指向了master和dev;

这里我们先删除dev分支;

使用git branch -d <branch name> 删除;

 重新创建一个分支并且重新提交一个test.txt的文件,然后使用关闭Fast-forward模式合并;

 使用git merge --no-ff -m "merge with no-ff" dev

因为会产生一次新的提交,所以有-m备注信息;

 查看分支合并图;

能够清楚的看到做出了合并,而Fast-forward看不出来;

如果两个分支提交的文件都发生了变化呢?

在这里我们分别在master分支和dev2分支上面更改readme.txt文件并commit;

 现在我们分别在两个分支上面对readme.txt文件进行了修改,现在尝试合并;

 提示自动合并readme.txt文件,有冲突,要先处理冲突然后再提交;

我们先查看一下readme.txt文件的内容

 可以看到最后一句话有冲突,我们手动修改;

 按照上面的提示是进行commit的操作,但是再commit之前是需要add的,所以我们要进行add操作,如果不知道怎么做我们可以查看一下git的状态;

 这时Git告诉我们有未合并的路径,可以使用git merge --abort 放弃合并或者使用git add <file>标记解决方案;

使用git add <file>提交

 使用 commit结束合并;

 合并完成,然后我们看一下合并的分支图;

 合并情况类似于no-ff;

因为两次操作针对的都是test.txt文件,但是修改后test.txt文件不同,所以需要我们进行处理;

目前为止进行的所有操作都在Git本地仓库,并没有推送到GitHub或者gitee,下面将推送到gitee;

先从远程克隆一个仓库,clone的目的就是把本地仓库和gitee中的仓库关联起来;

 test文件夹就是从远程克隆的仓库;

 

 使用git push origin <branch name> 可以推送到远程仓库的指定分支;

 

 gitee中就会出现推送;

使用git remote 查看远程仓库中的分支,只能看到master分支;

 从GitHub或者gitee中clone仓库时只会clone master主分支,别的分支需要自己对应起来;

使用git switch -c <branch name> origin/<branch name>;

 提示成功和远程的dev分支对应起来;

 发现本地仓库中的内容也发生了改变,这些就是远程仓库中的dev分支的内容;

 新建一个readme.py文件并推送到dev分支;

 

gitee中的dev分支中也出现了readme.py 文件; 

使用git stash 可以隐藏当前的工作状态,可以先处理一些紧急的事情;

当前状态时待commit,使用git stash 

 使用git stash list 可以看到当前隐藏了几个;

 使用git stash apply 可以恢复但是不删除stash隐藏的内容,删除用git stash drop;

使用git stash pop可以在应用后直接删除;

总结:使用git stash可以隐藏当前的工作状态;当同一个文件再不同的分支上面都发生了修改时,可能会导致合并冲突,这时需要我们手动修改,然后在提交;push到远程仓库也是一样,如果本地仓库中的文件和远程仓库中的文件发生冲突,要先git pull抓取最新的提交然后手动修改冲突后再push;

4、Git常用命令总结

git init    初始化文件夹为Git仓库;

git clone <gitee or github>    从远程clone仓库到本地;

git add <file>    提交指定文件到暂存区;

git add .    提交所有文件到暂存区;

git commit -m "备注信息"    提交到本地仓库;

git status    查看Git状态;

git checkout --<file>  /  git restore <file>    撤销文件修改; 

git reset HEAD <file>  /  git restore --staged <file>    撤销提交到暂存区的文件;

rm <file>    删除工作区中的文件;

rm -r <directory name>    删除工作区中文件夹;

git rm <file>    删除本地仓库中文件;

git diff <file>    查看文件更改内容;

git log    查看提交日志;

git log --graph    查看分支合并图;

git reflog    每一次命令的记录;

git reset --hard HEAD^    回退一个版本;HEAD^^    回退两个版本 ……;

git reset --hard <commit id>    前进到指定版本;

git branch    查看仓库分支;

git branch name    新建一个分支,但是不切换;

git checkout <branch name>  /  git switch <branch name>    切换分支;    

git checkout -b <branch name>  /  git switch -c <branch name>    创建并切换分支;

git branch -d <branch name>    删除分支;

git merge <branch name>    将指定文件夹合并到当前文件夹;

git merge --no-ff -m "merge with no-ff" <branch name>    以普通模式合并;

git cherry-pick <commit id>    复制一个特定的提交到当前分支;

git stash    保存当前工作状态;

git stash list    查看隐藏的工作状态;

git stash apply    恢复但是不删除隐藏的工作状态;

git stash drop    删除隐藏的工作状态;

git stash pop    恢复后自动删除隐藏的工作状态;

git remote    查看远程仓库信息;

git push origin <branch name>    推送到远程指定分支;

git checkout -b <branch name> origin/<branch name>    创建远程分支到本地仓库;

git push origin --delete <branch name>    删除远程分支;

git pull    抓取远程最新提交;

git rebase    将未push的分支整理成一条直线;

5、最后

 本篇博客是我自己的一个学习回顾,本次学习的是廖雪峰老师的Git教程,想要更深入的了解可参考廖老师的教程,这里附上链接:https://www.liaoxuefeng.com/wiki/896043488029600

除此之外,gitee后面也提供了很多的Git学习入口。

 

评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值