文章目录
一、文件操作
把仓库中 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 apply
或 git 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 修改完保存退出即可。