git操作深入之创建版本库、本地仓库管理

本文详细介绍了如何使用Git进行版本控制,包括安装配置、基本操作如添加、提交文件等,并讲解了如何撤销修改、删除文件等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

从8月7日起,连不上github了,一直到今天都只是备份到暂存区,一方面是由于项目时间紧,另一方面,samartgit,确实没看懂具体的操作意味着什么。现在项目既然可以告以段落了,还是真尽快的用起来!

4月份起用,托管到github,在samrtgit下只会stage...commit.另外github,实在是有些慢,也不知道是没实现,还是真的慢的原因。所以这次从头再战git,参考https://www.liaoxuefeng.com/wiki/896043488029600/896827951938304教程,并且托管到gitee.

具体步骤:

  • git安装就不说了。

  • 设置全局变量:

$ git config --global user.name "Your Name"
$ git config --global user.email "email@example.com"

因为Git是分布式版本控制系统,所以,每个机器都必须自报家门:你的名字和Email地址。git config命令的--global参数,用了这个参数,表示你这台机器上所有的Git仓库都会使用这个配置,当然也可以对某个仓库指定不同的用户名和Email地址。如下图:

  • 创建一个版本库

版本库又名仓库,英文名repository,可以简单理解成一个目录。这个目录里面的所有文件都可以被Git管理起来,每个文件的修改、删除,Git都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻可以“还原”。整体的仓库管理的结构,详见《RTThread项目之写在前面的话及GIT准备》2020-4-3。

1、选择一个合适的地方,创建一个空目录:如下图:

注:pwd用于显示当前目录。

2、通过git init命令把这个目录变成Git可以管理的仓库:

瞬间Git就把仓库建好了,而且告诉你是一个空的仓库(empty Git repository),细心的读者可以发现当前目录下多了一个.git的目录,这个目录是Git来跟踪管理版本库的,没事千万不要手动修改这个目录里面的文件,不然改乱了,就把Git仓库给破坏了。

如果你没有看到.git目录,那是因为这个目录默认是隐藏的,用ls -ah命令就可以看见。

3、往仓库添加文件

首先这里再明确一下,所有的版本控制系统,其实只能跟踪文本文件的改动,比如TXT文件,网页,所有的程序代码等等,Git也不例外。版本控制系统可以告诉你每次的改动,比如在第5行加了一个单词“Linux”,在第8行删了一个单词“Windows”。而图片、视频这些二进制文件,虽然也能由版本控制系统管理,但没法跟踪文件的变化。

千万不要使用Windows自带的记事本编辑任何文本文件。原因是Microsoft开发记事本的团队使用了一个非常弱智的行为来保存UTF-8编码的文件,他们自作聪明地在每个文件开头添加了0xefbbbf(十六进制)的字符,你会遇到很多不可思议的问题,比如,网页第一行可能会显示一个“?”,明明正确的程序一编译就报语法错误,等等,都是由记事本的弱智行为带来的。建议你下载Notepad++代替记事本,不但功能强大,而且免费!记得把Notepad++的默认编码设置为UTF-8 without BOM即可:

 

创建好文件后,用命令 git add 告诉Git,把文件添加到仓库:

用命令 git commit 告诉Git,把文件提交到本地仓库:每提交一次,就是一个版本快照。一旦你把文件改乱了,或者误删了文件,还可以从最近的一个 commit 恢复,然后继续工作。

解释一下git commit命令,-m后面输入的是本次提交的说明,可以输入任意内容,当然最好是有意义的,这样你就能从历史记录里方便地找到改动记录。git commit命令执行成功后会告诉你,1 file changed:1个文件被改动(我们新添加的check.txt文件);1 insertions:插入了1行内容(check.txt有两行内容)。

为什么Git添加文件需要addcommit一共两步呢?因为commit可以一次提交很多文件,所以你可以多次add不同的文件,比如:

$ git add file1.txt
$ git add file2.txt file3.txt
$ git commit -m "add 3 files."

注:1、git命令必须在仓库目录所在位置执行;否则就会报错。

2、添加某个文件时,该文件必须在当前目录下存在,也就是事先创建好,再添加。可以用 ls或dir 查看仓库目录下的文件。

修改文件后,可用 git status 命令看看结果。用notepad++修改后的文件要点保存。如下图,可以看到,已经提示修改了。

git diff 命令查看到底修改了哪里???因为是开发日志,用了中文,所以没显示出来

git diff head -- file,查看的是工作区和版本库里面文件最新版本的区别,注意  -- 后面是有个空格的。,

知道了作了什么修改后,再把它提交到仓库就放心多了,提交修改和提交新文件是一样的。

注:若操作不当,可能会出现:

fatal(致命的): Unable to create 'F:/SixBirld/birld_last/.git/index.lock': File exists.

Another git process seems to(好像) be running in this repository, e.g.
an editor opened by 'git commit'. Please make sure all processes
are terminated then try again. If it still fails(失败), a git process
may have crashed(破坏) in this repository earlier:(先前)
remove the file manually to continue.
解决:使用  $ rm -f .git/index.lock 删除后即可

git log 可以查看最近提交的版本。如下图:

也可以加上--pretty=oneline参数:b7a02fa....是commitID的版本号,是用哈希算出来的版本号。

每提交一个新版本,实际上Git就会把它们自动串成一条时间线。如果使用可视化工具查看Git历史,就可以更清楚地看到提交历史的时间线:

用 git reset 命令,回退版本:

首先,Git必须知道当前版本是哪个版本,在Git中,用HEAD表示当前版本,上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100

--hard参数:Resets the index and working tree(重置索引树和工作树). Any changes to tracked files(跟踪文件) in the working tree since(自) <commit> are discarded(放弃).

来自https://git-scm.com/docs/git-reset

恢复回退前版本:需要知道commitID

若实在是忘记了用  git reflog 命令来调取之前使用过的命令:

扩展:

工作区的概念:就是仓库的目录。

版本库(Repository):隐藏目录.git

Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD。如下《RTThread项目之写在前面的话及GIT准备》中本地库代码管理

前面讲了我们把文件往Git版本库里添加的时候,是分两步执行的:

第一步是用git add把文件添加进去,实际上就是把文件修改添加到暂存区;

第二步是用git commit提交更改,实际上就是把暂存区的所有内容提交到当前分支。

因为我们创建Git版本库时,Git自动为我们创建了唯一一个master分支,所以,现在,git commit就是往master分支上提交更改。

你可以简单理解为,需要提交的文件修改通过 git add 放到暂存区,然后,一次性提交暂存区的所有修改。提交后,暂存区就是空的了。

撤销修改:

场景1:

git checkout -- file 可以丢弃工作区的修改,如下:可以看到新加的this is a test ,没有了。

命令git checkout -- file 意思就是,把 file 文件在工作区的修改全部撤销,这里有两种情况:

一种是 file 自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;

另一种是 file 已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。

此种情况实测再用此命令是不起作用的。如下图:

总之,就是让这个文件回到最近一次git commitgit add时的状态。

场景2:

针对以上的另一种情况:已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。

git reset HEAD <file> 命令,先回到场景1,再处理场景1的方式实现撤销:

场景3:对已经提交到仓库的情况,只能版本回退。

 

删除:

一般情况下,你通常直接在文件管理器中把没用的文件删了,或者用rm命令删了:

格式为:rm file

有两个选择,一是确实要从版本库中删除该文件,那就用命令git rm删掉,并且git commit:(此种情况下,就恢复不了)

注:用git rm file,可以直接删除文件,不用再rm file,如下图:

另一种情况是:手动在目录里删除了文件,但没有执行git rm 还是可以恢复的。因为版本库里还有。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

guangod

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值