您的位置:首页 > 文旅 > 旅游 > Git的基础操作

Git的基础操作

2024/12/26 15:40:08 来源:https://blog.csdn.net/wjmhlh/article/details/132703248  浏览:    关键词:Git的基础操作

环境:Linux操作系统-Centos

创建本地仓库

首先创建一个目录,命名为:gitcode

mkdir gitcode

进入gitcode目录,创建本地仓库

git init

此时,就会创建出了一个空的仓库在当前目录下了,此时目录下就有git的目录了

配置Git

首先重要的是需要配置我们创建出来的仓库的名称Email

git config [--global] user.name "Your Name"
git config [--global] user.email "email@example.com"
# 把 Your Name 改成你的昵称
# 把 email@example.com 改成邮箱的格式,只要格式正确即可

其中--global 是⼀个可选项。如果使用了该选项,表示这台机器上所有的Git仓库都会使用这个
配置。如果你希望在不同仓库中使用不同的name或 e-mail ,可以不要--global 选项,但要
注意的是,执行命令时必须要在仓库里。

配置完后,可以使用以下命令来查看配置项

git config -l

当想要删除name和email时:

git config [--global] --unset user.name
git config [--global] --unset user.email

Git中的工作区、暂存区、版本库

工作区:是在电脑上你要写代码或文件的目录。
暂存区:英文叫stage或index。⼀般存放在 .git 目录下的index文件(.git/index)中,我们
把暂存区有时也叫作索引(index)。

版本库:又名仓库,英文名 repository 。⼯作区有⼀个隐藏目录 .git ,它不算⼯作区,而
是Git的版本库。这个版本库里面的所有文件都可以被Git管理起来,每个文件的修改、删除,Git都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻可以“还原”。

首先在当前目录("gitcode")下创建出一个新的文件:"ReadMe",注意此时的git并不能直接管理“ReadMe”文件。

此时,.git就是版本库,用于管理指定的文件,而处于gitcode的文件就是工作区了,而暂存区其实是存在于版本库中的。

当需要管理的文件,从工作区到版本库中被管理起来,简单的流程是:工作区的内容在被修改(增删改操作)后, 使用add,会在版本库中的一个叫objects的对象库中保存(每一次add就每次创建出一个新的对象,对应着每一个版本),此时在暂存区会通过索引,从对象库(objects)中找到对应的版本,然后使用commit(提交)到master中,也是通过索引。此时就被git管理起来了。

添加文件

使用 git add 来添加文件到暂存区中:

对于git来说,可以添加一个或多个文件到暂存区:

git add [file1] [file2] ...

也可以将当前目录下所有文件添加到暂存区:

git add .

随后使用 git commit 来添加到master中:

git commit也可以同时提交多个文件到仓库中:

git commit [file1] [file2] ... -m "message"

提交文件后,我们可以使用 git log 来查看提交的历史:

加上参数:--pretty=oneline ,可以简化历史内容:

查看 .git 文件

首先查看一下 .git 的目录结构:

可以看到,在 .git 的目录中,存在着index索引(暂存区)和objects对象库,还有HEAD(默认指向master分支的指针)。

查看一下masert的内容:

会看到一串长长的数据,这段数据就是最新提交的commit id。

通过命令: git cat-file -p commit id,就可以查看对应的版本库对象的内容:

在内容中,出现了一行:tree 0e6b........945的数据,使用同样的方法查看:

发现出现了历史修改过的版本文件等等,再次查看对应的commit id

就会发现,我们可以查看历史版本了!!!历史修改过的版本,被git记录下来了。

总结:在 .git 的目录下,我们可以查看到暂存区和Head,对Head指向的master进行查看,可以找到最新保存的commit id,查看这个commit id可以找到以往文件的保存的commit id,通过这些id,可以查看到历史修改过的版本。

继续添加文件

带着对上述的工作区、暂存区和版本库的理解,继续添加文件:

创建出file1,然后add添加file1,然后继续创建fiel2,接着直接commit提交:

可以看到,虽然有两个新的在工作区的文件,但是因为只将 file1 add 到了暂存区中,因此在提交commit的时候,也只会提交file1,即"1 file changed"。

修改文件

Git追踪管理的是修改的内容,而不是整个文件!接下来对“ReadMe”文件再次修改:

由于已经将”ReadMe“提交到了仓库中,而仓库中的ReadMe和我们工作区的ReadMe是不同的,因此先来查看一下当前仓库状态:git status

  • Changes not staged for commit:暂存区是干净的,没有内容
  • modified:   ReadMe  意思是被修改的文件是ReadMe.

通过查看了仓库状态,得知哪些文件内容被修改了,接下来是查看一下被修改前后的差别:

git diff [file] 命令用来显示暂存区和工作区文件的差异,显示的格式正是Unix通用的diff格式。也可以使用 git diff HEAD -- [file] 命令来查看版本库和工作区文件的区别:

  • diff --git a/ReadMe b/ReadMe:意思是  a表示修改前的内容,b表示的是修改的内容。
  • --- a/ReadMe      +++ b/ReadMe   意思是 ---也表示修改前,+++修改后。
  • @@ -1 +1,5 @@   意思是  -1表示改动前的第一行,+1表示改动后的第一行,5表示从+1开始改动到第五行结束。

查看到修改前后的变化,确认无误,可以放心提交了!

[wjmhlh@VM-12-9-centos gitcode]$ git commit -m "modified ReadMe"
[master 891d516] modified ReadMe1 file changed, 5 insertions(+), 1 deletion(-)

提交后,查看仓库状态:

[wjmhlh@VM-12-9-centos gitcode]$ git status
# On branch master
nothing to commit, working directory clean

版本回退

执行 git reset 命令用于回退版本,可以指定退回某⼀次提交的版本。要解释⼀下“回退”本质是要将版本库中的内容进行回退,⼯作区或暂存区是否回退由命令参数决定:

git reset [--soft | --mixed | --hard] [HEAD]

--mixed 为默认选项,使用时可以不用带该参数。该参数将暂存区的内容退回为指定提交版本内容工作区文件保持不变。
 --soft 参数对于工作区和暂存区的内容都不变,只是将版本库回退到某个指定版本
 --hard 参数将暂存区与工作区都退回到指定版本。切记⼯作区有未提交的代码时不要用这个命令,因为⼯作区会回滚,你没有提交的代码就再也找不回了,所以使⽤该参数前⼀定要慎重

HEAD 说明:
◦ 可直接写成commitid,表示指定退回的版本
◦ HEAD表示当前版本
◦ HEAD^上⼀个版本
◦ HEAD^^上上⼀个版本
◦ 以此类推...


• 可以使用〜数字表示:
◦ HEAD~0表示当前版本
◦ HEAD~1上⼀个版本
◦ HEAD^2上上⼀个版本
◦ 以此类推

另外:对于git reset中的版本回退,如果版本库是空的,那么在回退到版本库一致的时候,暂存区和工作区会变为空。

查看历史提交记录:git log --pretty=oneline

撤销修改

情况一:对于工作区的代码,还没有add

git checkout -- [file] 命令让工作区的⽂件回到最近⼀次 add 或 commit 时的状态

撤销前:

撤销后:

情况二:已经add,但是没用有commit

将文件内容修改后,add一下,通过git status查看,是否存在暂存区。

首先,因为没用commit,因此版本库中是空的,因此,可以使用git reset回退到当前版本的内容,因此这会导致暂存区变成空的了。这样就会回到第一种情况。

情况三:add后,commit了

首先,更新文件ReadMe内容:

接着,将其add和commit:

此时的情况就是,版本库中,最新的版本就是有XXX code的ReadMe,而上一个版本是没有的。

使用git reset --hard HEAD^,就能将工作区、暂存区和版本库回退到上个版本。不过这个操作是有条件的,就是你还没有把⾃⼰的本地版本库推送到远程,也就是没有push操作!

 删除操作

如果想要删除git管理的文件,使用rm命令是不行的。

首先创建了个文件,将其add和commit

想要删除file1,有两个方法:

第一种方法:①先使用rm删除file1 ②使用git add file1,将工作区的变动提交。③git commit -m "" 进行提交。

第二种方法:①使用git rm file1进行删除,此时是在暂时区删除的。

②最后提交一下,即可删除。

简单总结

①在git结构中,分有工作区、暂存区和版本库。

②添加文件:git add file--将一个或多个文件添加到暂存区中。git commit -m "XXX" 将文件添加到版本库中。使用git log或者git log --pretty=oneline查看提交历史

git reset 命令用于回退版本。git checkout -- [file] 命令让工作区的⽂件回到最近⼀次 add 或 commit 时的状态

④使用git rm file进行删除,最后commit提交。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com