Git 使用指南
本文参考《廖雪峰Git教程》,本人概括整理后用typora记录,作为个人备忘录。
本着互助共享的开源精神,现发布于优快云。若需要.md原文档,请私信获取。
仅供大家个人使用,请勿用于任何商业用途。
第一次发布文章,如有错误,欢迎交流!
-
创建版本库
$ mkdir learngit $ cd learngit $ cd learngit $ pwd $ git initpwd:显示当前目录
git init:将当前目录变成 Git 管理仓库 -
把文件添加到版本库
- 在
learngit目录或其子目录下,新建readme.txt文件 -
$ git add readme.txt $ git commit -m "wrote a readme file" -m后输入本次提交的备注- 可以多次
add不同文件,最后一次commit
- 在
-
查看仓库当前状态
$ git status:查看仓库当前状态Changes not staged for commit:文档被修改过,但未准备提交$ git diff readme.txt:查看具体修改内容-
$ git add readme.txt $ git status $ git commit -m "add distributed" $ git status
-
版本查询与版本回退
- 每次
commit都等于生成一张快照 $ git log:查看提交日志,由近及远$ git log --pretty=oneline:每次提交以单独一行显示HEAD表示当前版本,HEAD^表示上一个版本,HEAD^^表示上上一个版本,HEAD~100表示往上100个版本- 版本回退:
$ git reset --hard HEAD^ $ git log不再保存刚才被替换掉的版本,命令行找到版本号(commit id)的前几位再回退:$ git reset --hard c9636b$ git reflog:查询提交的每一次版本号及命令历史
- 每次
-
工作区和暂存区
- 工作区 Working Directory:
learngit文件夹 - 版本库 Repository:工作区中的隐藏目录
.git- 版本库中有暂存区 stage/index
- 还有自动创建的第一个分支
master和指向master的指针HEAD
$ git add把修改从工作区复制到版本库暂存区$ git commit将版本库暂存区的所有待提交修改一次性提交到版本库分支
- 工作区 Working Directory:
-
管理修改:所有修改如果不用
$ git add到暂存区,就无法加入到commit中- 第一次修改 -> git add -> 第二次修改 -> git commit
- 上述操作后,第二次修改不会被提交
-
撤销修改
$ git checkout -- readme.txt:撤销该文件的修改,回到$ git add或者$ git commit时的状态- 修改后还未添加到暂存区,撤销工作区修改就回到版本库状态
- 加到暂存区后又做了修改,撤销修改就回到添加到暂存区后的状态
$ git checkout -- file命令中的--不能省略,否则会变成“切换到另一个分支”命令
- 修改文件后已经添加到暂存区
$ git reset HEAD <file>:撤销暂存区的修改,重新放回工作区$ git checkout -- <file>:撤销工作区的修改
- 修改文件后,已添加到暂存区,已提交
- 版本回退:$
git reset --hard HEAD^
- 版本回退:$
-
删除文件
- 首先
$ rm readme.txt,然后$ git commit - 误删:
$ git checkout -- readme.txt,用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以一键还原 - 注:未被添加到版本库的文件,误删后无法回复
- 首先
-
添加远程库
- Github中添加本机 SSH Key,新建代码仓库
RepositoryName - 关联远程库:
git remote add origin git@github.com:GithubUserName/RepositoryName.git - 第一次推送master分支的所有内容:
git push -u origin master - 此后每次本地提交,使用命令
git push origin master推送最新修改 - 有网络连接时,本地提交推送完成同步
- Github中添加本机 SSH Key,新建代码仓库
-
从远程库克隆
- Github创建
RepositoryName $ git clone git@github.com:GithubUserName/RepositoryName.git- 也可用https协议,但速度慢且每次推送都必须输入口令,地址用
https://github.com/GithubUserName/RepositoryName.git
- Github创建
-
分支管理
- 创建分支:
$ git branch <name> - 查看分支:
$ git branch - 切换分支:
$ git switch <name> - 创建+切换分支:
$ git switch -c <name> - 合并name分支到当前分支:
$ git merge <name> - 删除分支:
$ git branch -d <name>
- 创建分支:
-
解决冲突:Git无法自动合并分支时,必须先解决冲突再提交完成合并
- Git用
<<<<<<<,=======,>>>>>>>标记不同分支的内容 - 打开文件修改冲突内容,保存文件
- add + commit:完成分支合并
- 删除不需要的分支
$ git log --graph --pretty=oneline --abbrev-commit:查看分支合并图
- Git用
-
分支管理策略
Fast Forward模式:删除分支后会丢掉分支信息- 禁用
Fast Forward模式,合并时则生成新的commit,从分支历史上可以看到分支信息 - 强制禁用
Fast Forward模式:$ git merge --no-ff -m "message" <name>
-
分支策略
master为稳定分支,仅用来发布新版本,不能用来工作dev为工作分支,团队每人都有自己的分支,按时合并到dev- 分支合并时,采用
--no-ff普通模式合并(保留合并历史)
-
Bug分支
dev分支上的工作暂未完成,无法提交;但需要紧急修复其他bug:stash,保存工作现场,以后可恢复后继续工作- 修复bug步骤
- a.
$ git stash:保存当前工作现场 - b. 确定在哪个分支上修复bug,就从该分支
initial上创建临时分支issue - c. 在临时分支
issue上修复bug,commit提交 - d. 切换到原分支
initial,merge合并,删除临时分支issue - e. 回到
dev分支,恢复工作区
- a.
- 恢复工作区:
$ git stash apply命令查看stash内容- 方法一:
$ git stash apply,恢复后stash内容并不删除,需要用$ git stash drop手动删除stash内容 - 方法二:
$ git stash pop,恢复的同时删除stash内容 - 可以多次stash,
$ git stash apply查看stash内容,恢复指定内容:$ git stash apply stash@{0}
- 方法一:
initial分支上修复的bug,需要合并到当前dev分支,可以用$ git cherry-pick <版本号CommitID>命令,把提交的bug修改“复制”到当前分支
-
Feature分支:用于开发新功能,完成后合并到主分支- 新建分支:
$ git switch -c feature-name - 丢弃未被合并过的分支,强制丢弃
$ git branch -D <name>
- 新建分支:
-
多人协作:远程仓库默认名称为
origin- 查看远程库信息:精简版
$ git remote,详细版$ git remote -v - 推送分支:
$ git push origin <master/dev>,指定本地分支,推送到远程库对应的远程分支上master主分支要时刻与远程同步dev开发分支要与远程同步bug分支一般只用于本地修复feature分支视情况而定
- 多人协作工作模式
- a. 首先用
$ git push origin <branch-name>推送自己的修改 - b. 如果推送失败,是因为远程分支比本地更加新,需要先用
git pull试图合并- 如果
git pull提示no tracking information,说明未创建本地分支和远程分支的链接关系 - 本地创建和远程分支对应的分支
git switch -c branch-name origin/branch-name - 建立本地分支和远程分支的关联
git branch --set-upstream-to <branch-name> origin/<branch-name>
- 如果
- c. 如果合并时没有冲突,
$ git push origin <branch-name>推送;如果合并时有冲突,则本地解决冲突,再本地提交,最后推送
- a. 首先用
- 查看远程库信息:精简版
-
标签管理
- 切换到需要打标签的分支上:
$ git switch <dev> - 创建当前提交的标签:
$ git tag V1.0 - 创建带说明的标签:
$ git tag -a <tagname> -m "message" <commit id> - 补打指定标签:
$ git tag V0.9 <commit id> - 查看所有标签:
$ git tag - 查看某个标签详细信息:
$ git show <tagname> - 删除本地标签:
$ git tag -d <tagname>,标签存储在本地,不会自动推送到远程 - 删除远程标签:先本地删除,后远程删除
$ git push origin :refs/tags/<tagname> - 将所有标签推送到远程:
$ git push origin --tags - 将指定标签推送到远程:
$ git push origin <tagname>
- 切换到需要打标签的分支上:
-
忽略特殊文件
- 忽略操作系统自动生成的文件,如缩略图等
- 忽略编译生成的中间文件、可执行文件等,如
.class文件 - 忽略带有敏感信息的配置文件,如存放口令的配置文件
- 忽略上述文件时,需要编写
.gitignore .gitignore文件本身要放到版本库里,并且可对.gitignore做版本管理
-
配置别名
$ git config --global alias.<别名> <原始命令>- 如
$ git config --global alias.st status,以后只需要键入$ git st即可 -global代表全局参数,针对该电脑所有Git仓库适用- 无
-global表示只对当前仓库适用
本文详细介绍了Git的基本操作,包括创建仓库、文件管理、版本查询、分支管理、远程协作、标签应用等,适合Git初学者和团队协作者参考。
400





