本文章为Git+Github版本控制的学习笔记,学习参考为GeekHour发布的Git教程视频。 视频地址:【GeekHour】一小时Git教程

一、添加和提交文件

git status 命令

查看当前Git仓库状态的命令,包含如下:

  • 当前分支:On branch <branch-name>,显示当前所在的分支名称。

  • 已提交变更:Changes to be committed,列出已经添加到暂存区但尚未提交的文件列表。

  • 未暂存变更:Changes not staged for commit,列出已被修改但尚未添加到暂存区的文件列表。

  • 未跟踪文件:Untracked files,列出在工作区但尚未被 Git 跟踪的文件列表。

在文件夹下新建file1.txt,内容如下:

image-20240908144535868

执行git status

image-20240908144625195

git add 命令

将文件或修改添加到暂存区。执行该命令可以将指定的文件或文件夹的修改从工作区(Working Directory)添加到暂存区,以便在下一次提交时包含这些修改。

将上面的file1.add提交至暂存区:

image-20240908144855251

  1. 添加多个文件:git add <file1> <file2> ...,将多个指定的文件添加到暂存区。例如,git add index.html style.css 将同时添加 index.htmlstyle.css 两个文件到暂存区。

  2. 添加所有修改:git add .git add -A,将所有修改过的文件添加到暂存区,包括新添加的和已修改的文件。

  3. 添加文件夹:git add <directory>,将指定的文件夹及其内容添加到暂存区。

git commit 命令

用于将暂存区的修改提交到本地仓库的命令。执行该命令可以创建一个新的提交,记录当前仓库的状态和变更。

注:git commit只会提交暂存区的文件到本地仓库,并不会提交工作区的其他文件。

file1.txt提交至本地仓库(若提交时未使用git commit -m <提交信息>,则会打开编辑器编辑提交信息):

image-20240908145415797

若工作区中还含有其他没有加入暂存区的文件,则不会被提交到本地仓库:

image-20240908145653394

git log 命令

查看提交信息。

image-20240908150048375

二、回退仓库版本

在Git文件管理中,回退本地仓库的版本可以使用git reset命令。

  • Soft模式:git reset --soft <commit>: 这个选项将当前分支的 HEAD 指针移动到指定的 <commit>,但不修改暂存区和工作区。这意味着之前的提交被标记为未暂存状态,可以通过 git commit 命令重新提交之前的修改。

  • Hard模式:git reset --hard <commit>: 这个选项将当前分支的 HEAD 指针移动到指定的 <commit>,并丢弃该提交之后的所有修改。这包括暂存区和工作区的修改,所以慎用这个选项,因为丢失的修改将无法恢复。

  • Mixed模式:git reset --mixed <commit>git reset <commit>(默认选项): 这个选项将当前分支的 HEAD 指针移动到指定的 <commit>,并重置暂存区以包含该提交之前的修改,但不影响工作区。这意味着之前的提交被标记为未暂存状态,并且之后的修改将保留在工作区,可以通过 git add 命令重新将修改添加到暂存区。

如果误操作,则可以使用git reflog查看误操作之前的版本号,并使用git reset命令回到该版本即可。

三、查看文件差异

比较工作区和暂存区差异

首先创建了file1.txtfile2.txtfile3.txt,(内容为“file1“、”file2“、”file3“)并将前两个文件加入缓存区。如果这时对file2.txt的内容进行修改,并使用git diff命令查看差异,则显示如图。

image-20240908164329819

image-20240908164442847

image-20240908164508859

再将修改后的file2.txt上传至缓存区,则不再有差异:

image-20240908164634857

比较工作区和本地仓库、暂存区和本地仓库差异

将上述file2.txt内容恢复,并commit三个文件到本地仓库。

修改file1.txt内容,并执行git diff HEAD

image-20240908165020905

将修改后的file1.txt上传至缓存区,执行git diff --cached

image-20240908165238599

比较两个版本之间的差异

image-20240908165512316

四、删除文件

删除文件并将删除信息更新至缓冲区可以使用如下方法:

使用命令或图形操作直接删除文件,并执行git add <文件名>

但是实际使用中更推荐使用git rm方法。

git rm 是 Git 提供的一个命令,用于从 Git 仓库中移除文件或目录。git rm 命令有一些不同的选项来控制其行为。以下是 git rm 命令的常见用法和一些常用选项的解释:

  • 移除文件:git rm 文件名,该命令会将指定的文件从 Git 仓库中移除,并将其从工作目录中删除。

  • 移除目录:git rm -r 目录名,使用 -r 选项可以递归地移除整个目录及其内容。

  • 移除文件但保留在工作目录中:git rm --cached 文件名,使用 --cached 选项可以将文件从 Git 仓库中移除,但仍然保留在工作目录中。

  • 强制移除文件:git rm -f 文件名,使用 -f 选项可以强制移除文件,即使该文件已经被修改或已添加到暂存区中。

如果你想在移除文件的同时提交更改,可以使用 git rm 命令移除文件,然后使用 git commit 命令提交更改。

image-20240908171137116

五、忽略文件

.gitignore文件介绍

.gitignore 文件是一个用于指定需要在 Git 仓库中忽略的文件和目录的规则文件。当 Git 进行版本控制时,它会查找并读取 .gitignore 文件,并根据文件中的规则来判断哪些文件应该被忽略,不纳入版本控制。这样可以避免将不必要的、自动生成的或敏感的文件添加到 Git 仓库中。

通常情况下,.gitignore 文件可以用于忽略以下类型的文件:

  1. 编译产生的中间文件:例如,.o.obj.class 等。

  2. 运行时生成的日志和临时文件:例如,.log.tmp.pid 等。

  3. 编辑器和 IDE 自动生成的文件:例如,.vscode/.idea/*.swp 等。

  4. 系统和软件自动生成的文件:例如,.DS_Store(macOS)、Thumbs.db(Windows)等。

  5. 编译器或解释器的输出文件:例如,可执行文件、.exe.jar.dll 等。

  6. 敏感文件或目录:例如,密码文件、私钥文件、证书文件、数据库文件等。

使用.gitignore文件

现在在工作区添加两个文件temp.tmpNotAddTemp.tmp,其中后者为我们不想被Git版本控制的文件,在未写入.gitignore文件前,执行git status

image-20240908172156276

写入如下.gitignore文件:

image-20240908172225400

再次执行git status以及提交:

image-20240908172411414

使用通配符

现在在工作区添加a.logb.log,并在.gitignore中添加信息:

image-20240908172655740

执行操作显示如下: image-20240908172821903

注意

  1. .gitignore只对现在没有添加到版本库中的文件有效,如果现在已经向本地仓库添加过a.log,再修改.gitignore文件(添加*.log)。除非从仓库中删除a.log,否则.gitignore无法对其生效。

  1. .gitignore文件中添加文件夹的方法:

    image-20240908173319156

  2. .gitignore下的部分规则:

    # 跟踪所有的a.log,即使在前面被忽略
    !a.log
    ​
    # 只忽略当前目录的a.log,但不忽略其他目录的a.log
    /a.log
    ​
    # 忽略任何目录下的tmp文件夹
    tmp/
    ​
    # 忽略tmp目录下的.tmp文件,不忽略tmp/today/a.tmp文件
    tmp/*.tmp
    ​
    # 忽略tmp及其子目录下的.tmp文件
    tmp/**/*.tmp