Git基本命令 <一>

git基础命令

一、创建版本库

版本库(repository),也称仓库,可以理解为一个目录,这个目录下的所有文件都可以被Git管理起来,每个文件的修改、删除,Git都能追踪,以便任何时刻都可以追踪历史,或者在将来某个时刻可以“还原”。

创建仓库,在git bash界面中进入任一文件夹,文件夹可以为空,也可以有内容。

git init

仓库创建后,在文件夹下会多出一个.git的目录,由于文件名前为‘.’的是隐藏文件,所以默认不显示该文件。通过ls -al命令可以查询。

版本管理系统,只能追踪文本文件的改动,如TXT,程序代码等,Git可以告诉你每一次具体的改动,如在第一行新加了一个单词。但对于图片、视频这些二进制文件,虽然也能有版本管理系统管理,但没法追踪文件具体的变化,

1.1将文件放入本地仓库

第一步,将文件Git Command.md文件添加到暂存区(Stage)。

git add Git Command.md

若上述命令执行后没有返回任何结果,则说明执行成功。Unix的哲学“没有消息就是好消息”。

第二步,将暂存区中的所有内容提交到当前分支。

git commit -m "your explanation regarding this commit"

-m:是指将关于此次commit的提示信息上传。

-a:忽略git add这一步,直接使用git commit -a 提交

综上,将文件提交到仓库一共两步。若是认为两步比较复杂,可以加-a参数直接提交。

git commit -am "your explanation regarding this commit"

注意: -am只能用于已有内容修改的上传,若新增一个文件,此时直接使用git commit -am会报错

二、时光机穿梭

通过git status命令查看仓库当前的状态:

On branch master
Your branch is ahead of 'origin/master' by 1 commit.
  (use "git push" to publish your local commits)

nothing to commit, working tree clean

返回结果为nothing to commit,working tree clean。说明当前的仓库与文件夹是一致的,没有未提交内容。

若要查看本地仓库与文件夹的差异,可以使用git diff查看具体的difference

2.1 版本回退

当然,身为版本管理系统,自然可以跳转到某个时刻的版本,前提条件是在跳转到的时刻,你自己保存过,也就是玩游戏中的快照。

git commit就是起到保存快照的作用,你可以跳转到任意一次commit时的版本。

通过git log可以查看快照的历史记录。
git log.png

黄色字体commit 后的一串数字是SHA1计算出的数字,为16进制,这样做是为了避免多人协作时版本号发生冲突。而且git会将每次commit的版本串成时间轴。

(HEAD -> master)表示现在文件夹的内容对应着这条commit的版本,也就是当前版本。

在Git中HEAD表示当前版本,HEAD^表示上一版本,HEAD^^ 表示上上版本,上20版本用HEAD~20表示。

回退命令为:git reset

$ git reset --hard HEAD^
HEAD is now at 8e84a25 2021.9.20 morning

现在查看文件夹中的内容,可以发现已经回退到之前的版本了。如果想回退回去,那我们使用git log会发现原来的版本已经不存在了,最新的版本即是最后一次回退到的版本。

好比你从21世纪坐时光穿梭机来到了19世纪,想再回去已经回不去了,肿么办?

方法1:只要你此次的git窗口没有关闭,你可以向上找到之前版本的commit id,按id返回指定的版本。

git reset.png

版本号可以只写前几位,git会自动补全,但也不能只写一两位。

方法2:如果你关闭了git窗口,一段时间后又想回到未来,就必须找到commit的id。Git提供了git reflog来记录每一次命令

git reflog.png

如图左侧就是每一次commit的前7位id,通过这些就可以回到未来了。

2.2 工作区和暂存区

工作区(Working Directory):

就是电脑中直接可以看到的目录,例如我在E盘根目录下建的git-test子目录。

之前初始化git仓库时,若目录为空,系统返回的正是working tree clean

版本库(Repository):

工作区有一个隐藏目录git,这个是git的版本库。版本库中存放了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master,以及指向master的一个指针HEAD

git版本库.jpg

上面的git add命令正是将修改提交到暂存区(Stage),然后通过git commit一次性将暂存区中的所有内容提交到当前分支。

Git跟踪管理的是修改而并非文件

2.3 撤销修改

2.3.1 丢弃工作区的修改

第一种情况:当你对文件进行了错误的修改,在没有提交暂存区前,此时使用git status,结果如下:

ahead of add.png

此时我想撤回工作区中错误的修改,可以直接使用git checkout -- filename

若无返回信息,则表示撤销成功,此时我们看文件中已经恢复到修改前的状态。

第二种情况 :当你对文件进行了错误的修改,而且已经将此次修改提交到了暂存区但还没提交到分支,使用git status,结果如下:

ahead of commit.png

此时你又做了修改,要撤回工作区的修改,可以直接使用git checkout -- filename

总之,这条命令就是让工作区回到最近的一次commitadd的状态。

2.3.2 丢弃暂存区的修改

故事是这样的,老板第二天开会要项目的展示,你不得不熬夜加班赶做项目,熬到凌晨4点好不容易完成了项目,你下意识的在注释中写了句问候老板的话,又下意识的使用了git add提交到了暂存区,正当你准备提交到分支时,你突然清醒过来。

别慌,Git也为此做了准备,git reset HEAD <file>可以把暂存区的修改回退到工作区,当我们用HEAD时,表示最新的版本。

使用后,就回到了刚刚对工作区进行修改,但却没有提交到缓存区时的状态,如下图所示。

ahead of add.png

别急,此时你的文件中对老板的问候依然存在,需要对工作区的修改进行撤销。git checkout -- filename

2.3.3 丢弃版本库的修改

就是你把问候的内容通过commit推到了本地分支。这个时候参考2.1版本回退,即git reset --hard <commit id>

git reset --hard HEAD^

2.4 删除文件

但你直接删除工作区的文件时,如果没有同时删除版本库中对应的文件,git会显示不一致。如下图所示,会提示你没有将修改提交到暂存区(删除文件也是一种修改)

git delete.png

接下来可以使用git rm filename或者git add .来将暂存区的该文件删除。最后使用git commit -m "message"来将版本库中的文件彻底删除。

来更新版本库。

如果你不小心删错了文件,可以使用git checkout -- filename,将版本库中的版本替换工作区的版本。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值