Git 情景速查
本文汇集一些 Git 常见情境(不常见)的使用方法,例如拉取远程分支并创建本地分支、拉取 pull request 到本地分支、恢复本地误删的文件、如何撤销 add、commit 操作、如何对比版本间的文件差异等等。
拉取远程分支并创建本地分支
使用如下 git 命令查看分支情况
git branch # 查看本地分支
git branch -r # 查看所有远程分支
git branch -a # 查看远程和本地所有分支
在输出结果中,前面带 *
的是当前分支。
使用 checkout 命令检出分支,并建立的本地分支会和远程分支建立映射关系。
git checkout -b 本地分支名x origin/远程分支名x
拉取 pull request 到本地分支
在 GitHub 上做合并检查时,我们需要将远程仓库的 PR 拉取到本地进行 review,命令格式如下:
git fetch origin pull/PRId/head:LocalBranchName
其中,PRId 为该 Pull Request 的序号,LocalBranchName 为拉取到本地后的分支名称,例如:
git fetch origin pull/1300/head:pr1300
当然,这里的远程仓库不一定是 origin,对于大型协作项目,通常可能是 upstream,例如:
git fetch upstream pull/1300/head:pr1300
恢复本地误删的文件
通过 git 进行管理的项目,如果在本地编辑的过程中误删了某些文件或者文件夹,可以通过 git 操作来复原。
首先使用 git status
查看本地对改动的暂存记录,例如不小心删了工程中的 math 目录。
$ git status
位于分支 master
尚未暂存以备提交的变更:
(使用 "git add/rm <文件>..." 更新要提交的内容)
(使用 "git restore <文件>..." 丢弃工作区的改动)
删除: math/CMakeLists.txt
删除: math/MathFunctions.c
删除: math/MathFunctions.h
修改尚未加入提交(使用 "git add" 和/或 "git commit -a")
由于 math 目录及其文件在之前已经提交了,因此可以通过 checkout 方式找回。
git checkout math
这样可以复原了。
如何撤销 add 操作
对于已经 add(暂存)但还没 commit(提交)的操作,可以使用如下命令取消暂存:
git reset <file>
或者取消所有暂存更改:
git reset
如何撤销 commit 操作
对于已经 commit 但还没 push 的操作,如果想要保留已经 add 的文件,可以使用如下命令:
git reset --soft HEAD^
这样就会回到 commit 之前 add 之后的状态,这里的 HEAD^
是上一个版本的意思,如果要回退到前 n 个,就表示为 HEAD~n
。
如果不需要保留 add 的文件,可以使用 --hard
选项,直接恢复到上一个 commit 结束的样子。
git reset --hard HEAD^
如果想同时撤销 add 和 commit 操作,但想保留工作空间的修改,可以使用 --mixed
选项。
git reset --mixed HEAD^
而如果是 commit 之后发现注释写错了,只想修改注释,可以使用下面命令进行修改。
git commit --amend
如何更换主分支
-
备份原来的主分支(例如 master)
给master分支打一个tag
-
设置 GitHub、Gitlab 的主分支属性
1.settings->repository->Default Branch: 修改defult分支为其他分支
2.设置Protected Branches为非保护 -
删除主分支、推送到远端仓库
git branch -D master
git push origin :master -
新建分支,推送到远端仓库
git checkout -b main
git push -u origin main
如何查看两个版本之间修改了哪些文件
使用 git diff
命令可以查看任意 Git 提交之间的差异,默认会列出具体修改的内容,如果只想查看修改了哪些文件,可以使用 --stat
选项。
格式如下:
git diff hash1 hash2 --stat
hash1 和 hash2 可以是想要对比的两个 commit ID,例如:
git diff 60d7301 7e819b9 --stat
或者是两个 tag,例如:
git diff v0.41.0 v0.33.0 --stat