跳至主要內容

Git 仓库内容操作

友人大约 6 分钟

Git 仓库内容操作

添加文件到暂存区

使用如下指令将工作区的文件添加到暂存区,告诉 Git 在下次 commit 时哪些文件做出了修改。

commit 指令详看后续

  • 添加一个或多个文件到暂存区:
git add [file1] [file2] ...
  • 添加指定目录到暂存区
git add [dir]
  • 添加当前目录下的所有文件到暂存区
git add .

查看仓库状态

在使用添加指令向暂存区添加文件后,可以使用如下指令来查看仓库当前状态,可以查看在上次提交之后是否对文件有修改。

git status

该命令显示如下信息:

  • 当前分支的名称。
  • 当前分支与远程分支的关系(例如,是否是最新的)。
  • 未暂存的修改:显示已修改但尚未使用 git add 添加到暂存区的文件列表。
  • 未跟踪的文件:显示尚未纳入版本控制的新文件列表。

根据该指令通常可以判断当前工作目录中的文件状态,并采取适当的操作。

可以加上 -s 参数来获取简短的输出信息

git status -s

比较文件的不同

当工作区的内容提交到暂存区后,对工作区文件做出了修改,这时我们如果想对比具体修改了哪些部分,可以使用如下指令

  • 查看文件 file 工作区和暂存区的差别
git diff [file]
  • 显示暂存区和上一次提交 commit 的差别
# 两种写法均可
git diff --cached [file]
git diff --staged [file]
  • 显示两次提交之间的差异
git diff [first-branch]...[second-branch]

提交暂存区到本地仓库

前面使用 git add 指令将工作区文件添加到暂存区,但并没有实质的将文件添加到本地仓库,可以使用如下指令将文件从暂存区添加到本地仓库。

  • 提交暂存区中所有文件到本地仓库
git commit -m [message]

其中 message 是本次提交的一些备注信息。

  • 提交暂存区的指定文件到本地仓库
git commit [file1] [file2] ... -m [-a] [message] 

这里如果使用了 -a 参数,就代表直接将工作区文件提交到本地仓库。

回退版本

常常在项目版本控制的过程中,我们无意的提交了一些还尚未完成的版本,这时就需要使用到版本回退,使用如下指令可以指定退回某一次提交的版本,语法如下所示

git reset [--soft | --mixed | --hard] [HEAD]
  • --mixed 为默认,可以不用带该参数,用于重置暂存区的文件与上一次的提交(commit)保持一致,工作区文件内容保持不变。
`git reset [HEAD]`
  • --soft 参数用于回退到某个版本:
git reset --soft HEAD
  • --hard 参数撤销工作区中所有未提交的修改内容,将暂存区与工作区都回到上一次版本,并删除之前的所有信息提交
git reset --hard HEAD

警告

谨慎使用 –-hard 参数,它会删除回退点之前的所有信息。

HEAD 说明

  • HEAD 表示当前版本

  • HEAD^ 上一个版本

  • HEAD^^ 上上一个版本

  • HEAD^^^ 上上上一个版本

  • HEAD~0 表示当前版本

  • HEAD~1 上一个版本

  • HEAD^2 上上一个版本

  • HEAD^3 上上上一个版本

删除暂存区和工作区文件

git rm 命令用于删除文件。

如果只是简单地从工作目录中手工删除文件,运行 git status 时就会在 Changes not staged for commit 的提示。

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

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

  • 仅将文件从暂存区删除,而保留工作区
git rm --cached <file>

该指令把文件从暂存区域移除,但仍然保留在当前工作目录中,换句话说,仅是从跟踪清单中删除,使用 --cached 选项即可

  • 递归删除【与Linux中类似】

可以递归删除,即如果后面跟的是一个目录做为参数,则会递归删除整个目录中的所有子目录和文件

git rm –r [dir]

该语句会删除 dir 目录下的所有文件和子目录。

移动或重命名工作区文件

  • 移动或重命名一个文件、目录或软连接
git mv [file] [newfile] 
  • 如果新文件名已经存在,但还是要重命名它,可以使用 -f 参数:
git mv -f [file] [newfile]

恢复或撤销文件的更改

该命令作用包括还原文件到最新提交的状态、丢弃未暂存的更改、丢弃已暂存但未提交的更改等。

  • 还原文件到最新提交的状态
git restore <file>

该命令可以将指定文件 <file> 恢复到最新的提交状态,丢弃所有未提交的更改

  • 还原文件到暂存区的状态

如果你已经使用 git add 将文件添加到暂存区,但希望撤销这些更改,可以使用这个命令:

git restore --staged <file>

以上命令将文件 <file> 恢复到暂存区的状态,但不影响工作目录中的文件。

  • 还原全部更改

以下命令将还原所有未提交的更改,包括工作目录和暂存区的更改:

git restore .

使用这个命令要谨慎,因为它会清除所有未提交的修改。

  • 还原文件到指定提交的状态

如果你想将文件 <file> 恢复到特定提交 <commit> 的状态,可以使用以下命令:

git restore --source=<commit> <file>

这个命令在需要查看历史状态或将文件还原到历史版本时非常有用。

  • 交互式还原

以下命令允许你以交互方式选择要还原或保留的更改:

git restore -i

执行这个命令它会打开一个交互式界面,让你选择如何处理每个更改。

git restore 的目标是提供一种更直观、易于理解的方式来管理文件的状态,它的引入使得 Git 用户能够更容易地处理不同阶段的更改,从而提高了工作流的效率。

注意

git restore 是 Git 2.23 版本引入的一个命令,如果你使用的是较早版本的 Git,可能无法使用 git restore 命令,但你仍然可以使用 git checkout 等命令来进行类似的操作。