git常用命令手册
大白菜
简介
本手册列举了一些常用的git命令,操作系统环境为macOS 10.15.3
使用思想
- 首先,master分支应该是非常稳定的,也就是仅用来发布新版本,平时不能在上面干活;
- 那在哪干活呢?干活都在dev分支上,也就是说,dev分支是不稳定的,到某个时候,比如1.0版本发布时,再把dev分支合并到master上,在master分支发布1.0版本;
- 所以,每添加一个新功能,最好新建一个feature分支,在上面开发,完成后,合并,最后,删除该feature分支。
- 远程库规则:
master分支是主分支,因此要时刻与远程同步;
dev分支是开发分支,团队所有成员都需要在上面工作,所以也需要与远程同步;
bug分支只用于在本地修复bug,就没必要推到远程了,除非老板要看看你每周到底修复了几个bug;
feature分支是否推到远程,取决于你是否和你的小伙伴合作在上面开发。
git常用命令
初始化
git init
新增文件/提交修改
- 工作区/暂存区
工作区=你当前工作的目录
暂存区=git add后暂时存放到暂存区待提交
git add [filename1] [filename2]
提交到本地仓库
git commit -m "[comment]"
查看变更列表
git status
查看文件差异
git diff [filename]
查看版本控制记录
# 显示历史提交记录
git log
# 显示历史命令记录
git reflog
版本回退
# 回退到上一个版本
git reset --hard HEAD^
# 回退到上上一个版本
git reset --hard HEAD^^
# 回到上100个版本
git reset --hard HEAD~100
# 直接回到某一版本号(版本号不用写全,一般前几位就行系统会自动查找)
git reset --hard 1094a
- 撤销某一文件在工作区的修改(回到最近一次git add/git commit时候的状态)
可以理解为从历史库或暂存区中回退版本
git checkout -- [filename]
- 撤销暂存区的修改-回退git add
# 此处HEAD表示最新的版本
git reset HEAD [file]
删除文件
git rm [file]
# 删除暂存区文件:use "git rm --cached <file>..." to unstage
git rm --cached <file>
# 误删回退用checkout-从工作区或者版本库中回退
git checkout -- [filename]
分支管理
- 创建并切换分支
# 推荐使用-创建并切换
git switch -c dev
# -b:创建并切换
git checkout -b dev
# 上述命令等于如下2条
- 创建分支
git branch dev
- 切换分支
# 推荐使用
git switch dev
# 也可以用(但是容易和撤销混淆)
git checkout dev
- 查看分支
git branch
- 分支合并
# 将dev分支合并到当前分支
git merge dev
# 禁用Fast forward模式,并在merge时新增一个commit(从分支历史上就可以看出分支信息)
git merge --no-ff -m "merge msg" dev
- 删除分支
# 已合并的分支使用-d,否则会出现告警提示
git branch -d dev
# 强行删除分支
git branch -D feature-vulcan
紧急修复bug时常用分支姿势
- 先备份当前工作状态(例如你现在在dev分支干活)
# 临时存储当前工作现场
git stash
- 确定从哪个分支checkout
# 切换到master分支
git checkout master
- 创建新的分支
git checkout -b issue-101
- 修复并提交
git add [file]
git commit -m "fix bugs"
# 可能会出现如下输出,这里的4c805e2即为commit-id
[issue-101 4c805e2] fix bug
- 修复完成后切换回master分支
git switch master
- 分支合并
git merge --no-ff -m "merged bug fix 101" issue-101
- 继续切回dev分支开发并恢复之前工作状态
git switch dev
# 查看之前保存的工作现场
git stash list
# 切回工作现场并删除stash(等于如下2句)
git stash pop
# 恢复工作现场
git stash apply
# 删除临时工作现场
git stash drop
# 多次stash时候使用如下命令确定回到哪个工作现场
git stash apply stash@{0}
- 将master分区上做的修复提交操作复制到dev分支
# 4c805e2为前面修复操作的commit-id
git cherry-pick 4c805e2
多人协作
远程库相关
- 查看远程库
git remote -v
github常用指令
快速提交本地工作区到github(官方教程)
git init
git add README.md
git commit -m "first commit"
git remote add origin https://github.com/AbbySec/base_blockchain.git
git push -u origin master
将本地库推送到github
- 本地库与远程库关联
git remote add base_blockchain https://github.com/AbbySec/base_blockchain.git
- 推送
# 由于远程库是空的,我们第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,
# 还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。
# base_blockchain=远程分支,master=本地分支
git push -u base_blockchain master
github语言设置
在项目中添加一个.gitattributes,填写内容如下:
*.html linguist-language=python