Git 笔记:基本操作&工作流程

Posted UQI-LIUWJ

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Git 笔记:基本操作&工作流程相关的知识,希望对你有一定的参考价值。

1 git 工作流程

一般工作流程如下:

  • 克隆 Git 资源作为工作目录。
  • 在克隆的资源上添加或修改文件。
  • 如果其他人修改了,你可以更新资源。
  • 在提交前查看修改。
  • 提交修改。
  • 在修改完成后,如果发现错误,可以撤回提交并再次修改并提交。

 

2 Git 基本操作

Git 的工作就是创建和保存你项目的快照,以及与之后项目的快照进行对比。

2.1 git 创建仓库

        使用 git init 命令来初始化一个 Git 仓库,Git 的很多命令都需要在 Git 的仓库中运行,所以 git init 是使用 Git 的第一个命令。

        所有 Git 需要的数据和资源都存放在创建的.get文件夹中。

 git init

         会在当前目录下创建一个.git文件夹(前面说的版本库)

git init new

在当前目录下新建一个new 文件夹,在new文件夹里面创建一个.git 文件夹

 2.2 git clone

        使用 git clone 从现有 Git 仓库中拷贝项目XXX

git clone XXX



git clone https://github.com/liuwj2000/ls.git
git clone https://github.com/liuwj2000/ls

        如果我们需要拷贝到指定的目录 YYY,可以使用如下命令

git clone XXX YYY

2.3 git add

        git add 命令可将该文件添加到暂存区。

        如果当前目录下有几个文件想要纳入版本控制,需要先用 git add 命令告诉 Git 开始对这些文件进行跟踪,然后用git commit提交:

git add *.c
git add README
git commit -m "初始化项目版本"

         以上命令将目录下以 .c 结尾及 README 文件提交到仓库中。

2.3.1 添加多个文件

git add [file1] [file2] ...

2.3.2 添加指定目录到暂存区(包括子目录):

git add [dir]

2.3.3  添加当前目录下的所有文件到暂存区:

git add .

2.4 git status

 git status 命令用于查看在你上次提交之后是否有对文件进行再次修改。

比如我创建了3个文件 1.txt  2.txt  3.txt,将 1.txt和2.txt git add 到暂存区,然后我在命令行中输入

git status

那么有:

 

 2.4.1 git status -s

获得简短的输出结果

??表示没有git add

 A表示 已经git add了

2.4.2 修改了已经git add 的file,但是没有再次git add 

如果我们修改了1.txt,但是没有再git add,会怎么样呢?

git status 是多了中间这一段:

git status -s 的话,是 1.txt 的状态变成了AM

 

AM 状态的意思是这个文件在我们将它添加到缓存之后又有改动

2.5 git diff

2.5.1 git diff 内容理解

2.5.2 git diff

  • 当工作区有改动,暂存区为空,git diff的对比是“工作区与最后一次commit提交的仓库的共同文件”
  • 当工作区有改动,暂存区不为空,diff对比的是“工作区与暂存区的共同文件”。

2.5.3 git diff --cached / git diff --staged

对比暂存区(已add但未commit文件)和最后一次commit(HEAD)之间的所有不相同文件

2.5.4 git diff HEAD

对比工作区与最后一次commit之间的所有不相同文件

2.5.5 git diff HEAD~X或git diff HEAD^^^…(后面有X个^符号,X为正整数)

对比近一次提交的版本与 倒数第X个版本的所有不相同文件

2.5.6 git diff <分支名1> <分支名2> 

比较两个分支上最后 commit 的内容的差别

2.6 git commit

        使用 git add 命令将内容写入暂存区。

        git commit 命令则将暂存区内容添加到本地仓库中。

2.6.1 基本用法

提交暂存区到本地仓库中:

git commit -m [message]

 [message] 可以是一些备注信息。

如果你没有设置 -m 选项,Git 会尝试为你打开一个编辑器以填写提交信息。

 提交暂存区的指定文件到仓库区:

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

2.6.2 -a 

-a 参数设置修改文件后不需要执行 git add 命令,直接来提交

git commit -a

        在 Linux 系统中,commit 信息使用单引号 ',Windows 系统,commit 信息使用双引号 "。

        所以在linux中,我们需要 git commit -m 'XXX' ,在 Windows中,我们需要 git commit -m "XXX"。

2.7 git reset

git reset 命令用于回退版本,可以指定退回某一次提交的版本。

2.7.1 --mixed

--mixed 为默认,可以不用带该参数.

用于重置暂存区的文件与上一次的提交(commit)保持一致,工作区文件内容保持不变

2.7.2 --soft

用于回退到某个版本

2.7.3 --hard

        撤销工作区中所有未提交的修改内容,将暂存区与工作区都回到上一次版本,并删除之前的所有信息提交

2.7.4 基本用法

git reset  [HEAD] 
HEADHEAD~0 

当前版本

(最典型的用法就是 git reset HEAD了,表示取消已经暂存的内容)

(换言之,git reset 的作用

HEAD^HEAD~1 上一个版本
HEAD^^ HEAD^2 上上一个版本
HEAD^^^HEAD^3 上上上一个版本
以此类推

 2.8 git rm

用于删除文件

git rm <file>
将文件从暂存区和工作区中删除
git rm -f <file>

如果删除之前修改过并且已经放到暂存区域的话,则必须要用强制删除选项 -f。

强行从暂存区和工作区中删除修改后的 runoob.txt 文件:

git rm --cached <file>
把文件从暂存区域移除,但仍然希望保留在当前工作目录中

 2.9 git mv

用于移动或重命名一个文件、目录或软连接

git mv [file] [newfile]

3  Git 工作区、暂存区和版本库

工作区在电脑里能看到的目录
暂存区(stage ,index)一般存放在 .git 目录下的 index 文件(.git/index)中,所以我们把暂存区有时也叫作索引(index)。
版本库工作区有一个隐藏目录 .git,这个不算工作区,而是 Git 的版本库。

3.1 工作区、暂存区和版本库之间的关系 

 

  • 图中左侧为工作区,右侧为版本库。在版本库中标记为 "index" 的区域是暂存区(stage/index),标记为 "master" 的是 master 分支所代表的目录树。

  • 图中我们可以看出此时 "HEAD" 实际是指向 master 分支的一个"游标"。所以图示的命令中出现 HEAD 的地方可以用 master 来替换。

  • 图中的 objects 标识的区域为 Git 的对象库,实际位于 ".git/objects" 目录下,里面包含了创建的各种对象及内容。

  • 当对工作区修改(或新增)的文件执行 git add 命令时,暂存区(index)的目录树被更新,同时工作区修改(或新增)的文件内容被写入到对象库中的一个新的对象中,而该对象的ID被记录在暂存区的文件索引中。

  • 当执行提交操作(git commit)时,暂存区(index)的目录树写到版本库(对象库)中,master 分支会做相应的更新。即 master 指向的目录树就是提交时暂存区的目录树

  • 当执行 git reset HEAD 命令时,暂存区(index)的目录树会被重写,被 master 分支指向的目录树所替换,但是工作区不受影响。

  • 当执行 git rm --cached <file> 命令时,会直接从暂存区(index)删除文件,工作区则不做出改变。

  • 当执行 git checkout . 或者 git checkout -- <file> 命令时,会用暂存区全部或指定的文件替换工作区的文件。这个操作很危险,会清除工作区中未添加到暂存区中的改动。

  • 当执行 git checkout HEAD . 或者 git checkout HEAD <file> 命令时,会用 HEAD 指向的 master 分支中的全部或者部分文件替换暂存区以及工作区中的文件。这个命令也是极具危险性的,因为不但会清除工作区中未提交的改动,也会清除暂存区中未提交的改动。

4 git 配置(git config)

git config 专门用来配置或读取相应的工作环境变量。

这些环境变量,决定了 Git 在各个环节的具体工作方式和行为。

4.1 三种配置

这些环境变量可以存放在以下三个不同的地方:

/etc/gitconfig 文件

系统中对所有用户都普遍适用的配置。

若使用 git config 时用 --system 选项,读写的就是这个文件。

~/.gitconfig 文件:

用户目录下的配置文件只适用于该用户。

若使用 git config 时用 --global 选项,读写的就是这个文件。

.git/config 文件

当前项目的 Git 目录中的配置文件

这里的配置仅仅针对当前项目有效。

        每一个级别的配置都会覆盖上层的相同配置,所以 .git/config 里的配置会覆盖~/.gitconfig 和 /etc/gitconfig 中的同名变量。

4.2 配置用户信息

配置个人的用户名称和电子邮件地址:

(设置提交代码时的用户信息)

 如果用了 --global 选项,那么更改的配置文件就是位于你用户主目录下的那个,以后你所有的项目都会默认使用这里配置的用户信息。

如果要在某个特定的项目中使用其他名字或者电邮,只要去掉 --global 选项重新配置即可,新的设定保存在当前项目的 .git/config 文件里。

4.3 查看配置信息

git config --list 

在配置里面,可以看到刚才配置的name和e-mail信息

 4.3.1 查看特定配置信息

 

参考资料:git diff的最全最详细的4大主流用法_快乐李同学的博客-CSDN博客_gitdiff

Git 基本操作 | 菜鸟教程 (runoob.com)

以上是关于Git 笔记:基本操作&工作流程的主要内容,如果未能解决你的问题,请参考以下文章

VSCode自定义代码片段15——git命令操作一个完整流程

Git 笔记:基本操作&工作流程

Git & Gitee 学习笔记 (详细)

Git & Gitee 学习笔记 (详细)

学会Git玩转Github笔记——Github基本概念 & 仓库管理

《Git小书》笔记:1 前言