Git 教程(四)独自使用 Git 时的场景

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/young2415/article/details/89528421

一、文件操作

把仓库中 Git 正在管理的文件一起添加到暂存区

git add -u

直接将工作区里的内容提交到版本历史库:

git commit -am "commit message"

为仓库中的文件重命名:

git mv 原文件名 新文件名

删除文件:

git rm 文件名

二、找不同

2.1 比较 HEAD 和暂存区文件的不同

git diff --cached #比较全部的文件
git diff --cached -- PATH #这里PATH需要换成你想比较的路径或者路径下的文件

2.2 比较工作区和暂存区文件的不同

git diff #比较所有文件的不同
git diff -- 文件名 #比较指定文件的不同,可以是一个文件,也可以是多个文件
#比如:
git diff -- style.css #比较工作区和暂存区中的style.css这个文件的不同
git diff -- style.css readme.md #比较工作区和暂存区中的style.css和readme.md这两个文件的不同

2.3 看看不同 commit 的指定文件的差异

2.3.1 比较两个分支中所有文件的不同

git diff 分支1 分支2

2.3.2 比较两个分支中指定文件的不同

git diff 分支1 分支2 -- 文件名

文件名可以是一个,也可以是多个。

2.3.3 比较任意两次提交的不同

git diff 哈希值 哈希值 #比较任意两次提交的不同
git diff HEAD HEAD^1 #比较当前头指针指向的提交与其父节点的不同
git diff HEAD HEAD^ #与上一条命令等价
git diff head head~1 #与上一条命令等价
git diff HEAD HEAD^1^1 #比较当前头指针指向的提交与其父节点的父节点的不同
git diff HEAD HEAD^^ #与上一条命令等价
git diff head head~2 #与上一条命令等价

三、恢复

3.1 把工作区的文件恢复成和暂存区一样

git checkout -- 文件名

3.2 把暂存区的文件恢复成和 HEAD 一样

把暂存区的文件全部恢复成和 HEAD 一样:

git reset HEAD

把暂存区中的部分文件恢复成和 HEAD 一样:

git reset HEAD -- 文件名 #文件名可以是一个,也可以是多个,多个文件名用空格分开

四、消除最近的几次提交

git reset --hard commit_hash

在这里插入图片描述
例如,如果想让 temp 分支退回到红框圈出来的那个 commit,可以这样写:

git checkout temp #首先确保当前分支是temp
git reset --hard 3eab3c1

这时,仓库的 HEAD、暂存区、工作区的内容都变成 Add test 那个 commit 的内容了。

五、开发中临时加塞了紧急任务怎么处理?

如果正在做开发,工作区有未提交的修改,突然来了一个紧急任务,需要修复一个 bug,这时应该怎么办呢?

当然最好是把正在写的代码先放到一边,等修复完了 bug,做了提交之后,再把之前的代码拿回来,继续开发。

git stash 就能帮我们实现这样的操作。
在这里插入图片描述

git stash #将当前工作区的内容放到stash里面
git stash list #查看stash里面的内容
git stash apply #把stash里面的内容恢复到工作区(保留stash里面的内容)
git stash pop #把stash里面的内容恢复到工作区(同时删除stash里面的内容)

在这里插入图片描述

stash 其实是一个栈结构,每次执行 git stash 操作都相当于一次入栈,当使用 git stash applygit stash pop 时,就会把 stash 中位于栈顶的内容恢复到工作区。这样就不难理解为什么 git stash pop 会在恢复的同时删除stash里面的内容了(因为 pop 是出栈)。

六、指定不需要 Git 管理的文件

在开发中,有一些文件我们可能不希望被 Git 纳入管理,比如在代码编译过程中产生的一些链接文件。这时可以在「.gitignore」文件中配置。

「.gitignore」文件要放在项目根目录下。匹配规则如下:

*.obj #不管理后缀名是obj的文件
build #不管理build目录下的文件,如果有名为build的文件,也不纳入管理。
build/ #不管理build目录下的文件

对于不同语言的项目,可能有不同的配置,具体可以参考 GitHub 与此有关的一个项目,上面列出了大部分语言的项目的「.gitignore」文件的配置方式:https://github.com/github/gitignore

七、删除不需要的分支

git branch -d 分支名 #删除分支,但是如果该分支没有被合并,那么使用这条命令无法删除该分支
git branch -D 分支吗 #强制删除分支。如果你确定删除该分支对整个项目没有影响,可以使用这条命令强制删除该分支

八、修改 commit 的 message

8.1 修改最新 commit 的 message

首先,要先切换到你想要修改 commit 的那个分支,然后执行以下命令:

git commit --amend

这时会进入 vim 编辑器模式,出现以下界面:
在这里插入图片描述
你需要懂得基本的 vim 操作。修改完之后保存退出即可。

8.2 修改老旧的 commit 的 message

git rebase -i 你要修改的commit的父节点的哈希值

输完上述命令后,会出现如下界面:
在这里插入图片描述

将第一行的 pick 改成 r,保存,退出。接着会出现下面这个界面:
在这里插入图片描述
将 message 修改完保存退出即可。

猜你喜欢

转载自blog.csdn.net/young2415/article/details/89528421