Git 常用操作笔记。
命令行
可选参数
--version
--help
-C <path>
-c <name>=<value>
--exec-path[=<path>]
--html-path
--man-path
--info-path
-p | --paginate | -P | --no-pager
--no-replace-objects
--bare
--git-dir=<path>
--work-tree=<path>
--namespace=<name>
--super-prefix=<path>
--config-env=<name>=<envvar>
命令
初始化
- clone
- init
最近的改动
- add
- mv
- restore
- rm
- sparse-checkout
检查历史和状态
- bisect
- diff
- grep
- log
- show
- status
分支与提交
- branch
- commit
- merge
- rebase
- reset
- switch
- tag
多人协同
- fetch
- pull
- push
仓库
个人代码工作空间称为工作区
初始化和提交
初始化仓库
cd path_to/ # 切换到指定目录 git init
克隆仓库:
git clone <url>
添加文件到暂存区
空目录和 .gitignore 指定的目录和文件不会添加到暂存区
git add README.md git add . # 所有文件
提交本次修改
git commit # 在打开的编辑器中按照 commit 规范填写 commit message,保存并关闭编辑器以生效 git commit -m "First Commit" # 不建议使用
查看工作区状态:
git status
对比提交中文件变化:
git diff <file_name>
提交日志
git log # 详细 git log --pretty=oneline # 简略
仓库配置
配置全局用户名和邮箱
git config --global user.name "<user_name>" git config --global user.email "<email_address>"
配置当前仓库用户名和邮箱
git config user.name "<user_name>" git config user.email "<email_address>"
添加远程仓库:
git remote add <remote-repo> <remote-address>
撤销更改
- 工作区文件撤销:
git checkout <file_name>
- 暂存区文件撤销
- 暂存区 -> 工作区:
git reset HEAD <file_name>
- 撤销修改:
git checkout <file_name>
- 暂存区 -> 工作区:
回退版本
修改上次的提交:
git commit --amend
执行后会打开编辑器,可以编辑上一次的提交信息以及修改上一次的提交内容,关闭编辑器以结束修改。
撤销暂存区内容:
git reset HEAD
HEAD
指向最后一次提交撤销提交
撤销到指定提交,并撤销暂存区内容
git reset --mixed HEAD # 撤销到当前提交 git reset --mixed HEAD^ # 撤销到上次提交 git reset --mixed HEAD~n # 撤销到上 n 次提交
HEAD^
代指HEAD
前一次提交。撤销到指定提交,并保留暂存区内容
git reset --soft HEAD^
保留的暂存区内容是被撤销的提交中所有的改动。
撤销到指定提交,并撤销暂存区内容,将工作区回滚到指定提交的状态
git reset --hard HEAD^
撤销历史某次提交
git revert <SHA>
<SHA>
指指定某次提交的散列值。撤销后会自动新增一次提交,其内容为撤销指定提交后的内容。
如果出现冲突会要求处理冲突再进行提交。
重做提交
- 查看历史提交以及被回退的提交(有时限,且只在本地):
git reflog
- 重做某版本:
git reset --hard <commit_id>
删除文件
从版本库中删除文件(修改后需要提交):
git rm <file_name>
恢复删除:参考撤销
从版本库中删除文件,但保留本地文件:
git rm --cached <file_name>
重命名
- 重命名文件:
git mv
- 重命名文件夹:
git mv
远程仓库
查看远程仓库信息
git remote # 简略 git remote -v # 详细
拉取远程仓库内容
git pull
默认获取远程主分支内容,合并到本地主分支。
git pull
实际上是git fetch
和git merge
的组合。手动拉取
拉取远程分支:git fetch
合并到本地分支:
git merge <remote>/<branch>
示例:
git merge origin/master
推送
git push git push <remote_repo> <remote_branch>
分支
创建和切换
默认会创建主干分支,一般为
master
,由于美国的 Black Lives Matter 运动,master 被视为种族歧视词汇,很多企业和机构改使用main
替代master
。
查看所有分支
git branch # 查看本地分支,标 * 的分支即当前分支 git branch -v # 查看本地分支的版本 git branch -a # 查看所有分支(包括远程分支) git branch -av # 查看所有分支的版本(包括远程分支)
创建新分支:
git branch <branch_name>
切换到新分支:
git switch <branch_name>
创建并切换到新分支:
git switch -c <branch_name>
删除分支
删除本地分支
git branch -D <branch_name> # 删除未合并分支 git branch -d <branch_name> # 删除已合并分支
删除远程分支:
git push <remote_repo> -d <remote_branch>
合并分支
合并指定分支到当前分支:
git merge <other_branch>
合并分支、解决冲突
将要合并的分支更新到最新
切换到主分支
合并分支
解决合并时的 conflict
提交到版本库
合并成功
查看分支状态
git log --graph git log -- graph --pretty=oneline --abbrey-commit
暂存修改
暂存工作现场:
git stash
恢复工作现场
git stash apply # 恢复 git stash drop # 删除 git stash pop # 恢复 + 删除