前述
- 个人博客来源: Git常用指令
- Keylala在线工具
- 程序员导航
版本管理
- 查看文件变化
git diff README.md
- 提交日志
git log
git log commit 9fdc041e35d50cb4d2d0776cdbbb26e7e27d8c28 Author: alex <[email protected]> Date: Fri Oct 26 17:55:07 2018 +0800 修改菜单前缀和前缀值 commit 4fe2f7ec6c6c5d37b740c71c23170ddd7c462c4b Author: alex <[email protected]> Date: Fri Oct 26 17:22:15 2018 +0800 菜单前缀和前缀值 commit 8f9791beb1e5d44f02eaa79030b737e332e713a0 Author: alex <[email protected]> Date: Fri Oct 26 17:02:04 2018 +0800 dev
- 如果日志信息太多麻烦可以用
git log --pretty=oneline
9fdc041e35d50cb4d2d0776cdbbb26e7e27d8c28 修改菜单前缀和前缀值 4fe2f7ec6c6c5d37b740c71c23170ddd7c462c4b 菜单前缀和前缀值 8f9791beb1e5d44f02eaa79030b737e332e713a0 dev 0d2b0f1d35d7a48affe813568ee17e0b6454292e 制定计划
- 操作记录
git reflog
ae32f2a (HEAD -> dev, origin/dev) [email protected]{0}: reset: moving to HEAD^ 449fe7d [email protected]{1}: commit: dev ae32f2a (HEAD -> dev, origin/dev) [email protected]{2}: commit: dev
- 版本回退
git reset
- 当前版本是
,上一个版本是HEAD
,上上版本是HEAD^
,数量多的时候,比如第一百个版本也可以写为HEAD^^
HEAD~100
- 通过
可以知道git reflog | log
,执行commit id
回退到指定版本git reset {commit id}
- 当前版本是
- 文件撤销
git checkout --file
- 让指定文件回到最近一次
或git commit
时的状态git add
- 让指定文件回到最近一次
分支管理
- 创建分支
git branch
- 比如新建用于开发的分支,而
做为稳定分支,master
git branch dev
- 比如新建用于开发的分支,而
- 切换分支
git checkout
- 切换为
分支dev
git branch dev
- 切换为
分支master
git branch master
- 切换为
- 合并分支
git merge
- 该命令为合并指定分支到当前分支
- 先切换到
分支,master
git checkout master
- 合并
到当前分支,dev
git merge dev
- 本次合并,会有一个提示
,即把Fast-forward
的指针指向了master
,但并不是每次合并都能dev
,特别是多人开发有很多分支的时候,后文会讲到Fast-forward
-
合并方式看不出曾经做过合并,因此要带参数Fast-forward
,这样普通模式的合并可以使用--no-ff
查看到合并记录git log
- 删除分支
git branch -d
- 加入某一分支是为了解决某一问题而创建的,那么修复之后就可以删除该分支了
- 删除
分支,dev
git branch -d dev
- 如果
分支没有合并,会删除失败,并被通知该分支还没有全部合并,不可以删除dev
- 可以使用
来强制删除该分支git branch -D dev
- 解决冲突
- 如果两个分支同时修改了一个文件的同一个地方,那么,合并分支的就是就会产生冲突,需要修复冲突之后再提交
- 可以使用
查看冲突的文件git status
- 打开文件有类似以下的内容
<<<<<<< HEAD {master 分支修改的内容} ======= {dev 分支修改的内容} >>>>>>> dev
- 和同事确认之后,修改为以下内容,并提交
{dev 分支修改的内容}
- 强势删除他人提交的内容会让你成为不受欢迎的人
-
命令也可以看到分支的合并情况git log
- BUG分支
- 当我们正在
上做开发,但这个时候有一个紧急修复的dev
,而这个时候bug
工作还未完成,我们需要从一个dev
的分支上创建新的分支,一种方式是从稳定的clean
分支上创建新分支,另一种就是用master
命令将git stash
尚未提交的内容存储到别的地方,造成一个工作区域dev
的假象clean
- 如果是从
分支创建出来的,那么只要合并回去就好,但这个时候master
和master
分支就有点麻烦了,可能会造成合并冲突dev
- 如果是从
分支创建出来的,我们需要把之前存储到别的地方的内容还原回来dev
- 首先可以使用
查看存储的内容git stash list
[email protected]{0}: WIP on dev: f52c633 add merge
- 然后有两种方法恢复内容,一个是先用
恢复工作区域,但还要用git stash apply
来删除git stash drop
存储的内容。另一种方式就是用stash
,恢复的同时也把存储的内容删除了git stash pop
- 如果有多次的
,用stash
查看之后,也可以恢复指定的git stash lis
stash
git stash apply [email protected]{0}
- 当我们正在
- 分支策略
-
做为稳定版本,一般不直接用于开发,习惯上新建master
分支,大家从dev
分支上拉取版本,开发完成后推送给dev
dev
- 当发现问题的时候,比如提了一个
,issue
为id
,那么我们可以创建一个分支54
用于修复该问题,合并分之后删除分支issue-54
issue-54
- 当有新特性要开发的时候,可以新建特性分支,比如
分支,加入对feature-md
的支持,完成之后再删除该分支Markdown
-
标签管理
- 我们可以在某个正式版本发布的时候打一个标签,比如
,v1.0
,这样以后有需要的之后可以直接取出该版本,如果是直接从v1.2
分支取出,则需要知道master
,这是一个commit id
值,一长串字母和数字,没有版本号那么只管方便hash
- 创建标签
- 一般我们选择在稳定的
打新标签master
- 使用
创建了名为git tag v1.0
的标签v1.0
- 如果我们想对历史上的某个
分支打标签,可以先执行commit id
找到git log --pretty=oneline --abbrev-commit
,然后执行commit id
打新标签git tag v0.9 {commit id}
- 一般我们选择在稳定的
- 查看标签
git tag
- 标签是不是按照打标签的先后顺序列出的,而是按照字母顺序排列的
- 查看详情
git show
-
git show v1.0
-
- 取出标签版本
git checkout
- 取出
版本:v1.0
git checkout v1.0
- 取出
- 推送标签
- 标签只存储在本地,不会自动推送到远程
- 推送某个标签:
git push origin v1.0
- 推送所有尚未推送到远程的标签:
git push origin --tags
- 删除标签
- 删除只存在本地的标签:
git tag -d v1.0
- 删除在远程存在的标签: 先删除本地标签,再删除远程标签
git push origin :refs/tags/v1.0
- 删除只存在本地的标签:
命令简写
- 可以自行编写简写命令
git config --global alias.co checkout git config --global alias.ci commit git config --global alias.br branch git config --global alias.st status git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"
- 加上
对当前用户有效,否则只对当前仓库有效--global
- 加上
- https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000)