[学习笔记] Git+Github版本控制(二)
本文章为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
,内容如下:
执行git status
:
git add 命令
将文件或修改添加到暂存区。执行该命令可以将指定的文件或文件夹的修改从工作区(Working Directory)添加到暂存区,以便在下一次提交时包含这些修改。
将上面的file1.add
提交至暂存区:
添加多个文件:
git add <file1> <file2> ...
,将多个指定的文件添加到暂存区。例如,git add index.html style.css
将同时添加index.html
和style.css
两个文件到暂存区。添加所有修改:
git add .
或git add -A
,将所有修改过的文件添加到暂存区,包括新添加的和已修改的文件。添加文件夹:
git add <directory>
,将指定的文件夹及其内容添加到暂存区。
git commit 命令
用于将暂存区的修改提交到本地仓库的命令。执行该命令可以创建一个新的提交,记录当前仓库的状态和变更。
注:
git commit
只会提交暂存区的文件到本地仓库,并不会提交工作区的其他文件。
将file1.txt
提交至本地仓库(若提交时未使用git commit -m <提交信息>
,则会打开编辑器编辑提交信息):
若工作区中还含有其他没有加入暂存区的文件,则不会被提交到本地仓库:
git log 命令
查看提交信息。
二、回退仓库版本
在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.txt
、file2.txt
、file3.txt
,(内容为“file1“、”file2“、”file3“)并将前两个文件加入缓存区。如果这时对file2.txt
的内容进行修改,并使用git diff
命令查看差异,则显示如图。
再将修改后的file2.txt
上传至缓存区,则不再有差异:
比较工作区和本地仓库、暂存区和本地仓库差异
将上述file2.txt
内容恢复,并commit
三个文件到本地仓库。
修改file1.txt
内容,并执行git diff HEAD
:
将修改后的file1.txt
上传至缓存区,执行git diff --cached
:
比较两个版本之间的差异
四、删除文件
删除文件并将删除信息更新至缓冲区可以使用如下方法:
使用命令或图形操作直接删除文件,并执行
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
命令提交更改。
五、忽略文件
.gitignore文件介绍
.gitignore
文件是一个用于指定需要在 Git 仓库中忽略的文件和目录的规则文件。当 Git 进行版本控制时,它会查找并读取 .gitignore
文件,并根据文件中的规则来判断哪些文件应该被忽略,不纳入版本控制。这样可以避免将不必要的、自动生成的或敏感的文件添加到 Git 仓库中。
通常情况下,.gitignore
文件可以用于忽略以下类型的文件:
编译产生的中间文件:例如,
.o
、.obj
、.class
等。运行时生成的日志和临时文件:例如,
.log
、.tmp
、.pid
等。编辑器和 IDE 自动生成的文件:例如,
.vscode/
、.idea/
、*.swp
等。系统和软件自动生成的文件:例如,
.DS_Store
(macOS)、Thumbs.db
(Windows)等。编译器或解释器的输出文件:例如,可执行文件、
.exe
、.jar
、.dll
等。敏感文件或目录:例如,密码文件、私钥文件、证书文件、数据库文件等。
使用.gitignore文件
现在在工作区添加两个文件temp.tmp
和NotAddTemp.tmp
,其中后者为我们不想被Git版本控制的文件,在未写入.gitignore
文件前,执行git status
:
写入如下.gitignore
文件:
再次执行git status
以及提交:
使用通配符
现在在工作区添加a.log
、b.log
,并在.gitignore
中添加信息:
执行操作显示如下:
注意
.gitignore
只对现在没有添加到版本库中的文件有效,如果现在已经向本地仓库添加过a.log
,再修改.gitignore
文件(添加*.log
)。除非从仓库中删除a.log
,否则.gitignore
无法对其生效。
向
.gitignore
文件中添加文件夹的方法:.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