记录git使用常见命令
一. git clone
git clone
如果只想克隆某一个分支的时候
比方说只想克隆dev分支
git clone -b dev https://github.com/repoweb
二. git tag
项目开发了一个版本比方说V0.1
git tag -a v0.1 -m ‘v0.1’
git tag 过滤
选择自己想看的tag
git tag -l ‘v0.0.*’
想要把这次的tag推送到远程时
git push –tag
git tag 默认是打在最近的一次提交上
如果想在某一次commit处加tag
git tag -a v0.02 f573hb89a -m ‘v0.02’
三. git status
git 中 文件的状态类型有四种
unstracked unmodified modified staged
git status可以显示三种状态
- 已经添加到暂存区,待提交的 (git add 后)
- 已经修改 但是没有暂存的
- 未追踪的文件
四. git diff 差异比较
git diff
比较所有文件差异
git diff [filename]
默认比较workspace 和暂存(add)后的差别 也就是storged区
git diff –staged
比较暂存区和上一次commit的差别
git diff HEAD [filename]
比较指定版本 和 workspace
五. git commit
git commit -m ‘commit message’
提交信息最好遵从一定的规则
我看到的一般是
type(scope):subject
type有以下几种常见的类型:
- feat:新功能
- fix: 修复bug
- style: 格式 代码格式上的调整,不会影响到代码结构
- refactor: 代码重构 比如if的嵌套太多,使用swith case 重写
- chore: 项目上线,项目进行打包的时候,修改版本号的时候,最后一次提交记录
scope
一般是自己负责的模块
subject
具体的描述
e.g.
git commit -m ‘fix(spi):修复读写的bug’
六. git commond:
git status
git add
git commit
查看历史记录
git log –pretty=oneline
git log –oneline
git relog
注意:git log –oneline 只能显示当前版本的之前版本
七. git 撤销
- 未添加到暂存区的撤销
git checkout – filename
git checkout – . - 添加到暂存区的撤销
git reset HEAD filename - 已经提交,想要撤销某次提交
git revert commit_md5
八. git版本回滚
git reset
1.使用索引值(推荐)
2.使用^符号(只能后退)
3.使用~符号(只能后退)
git reset –hard [索引值]
e.g. git reset –hard cbeabd1
git reset –hard HEAD^
e.g. git reset –hard HEAD^^
回退比较多时
git reset –hard HEAD~3
git reset 三个参数
回头看看git reset 命令本身
–soft
仅仅在本地库中移动HEAD指针–mixed
在本地库中重置HEAD指针
重置暂存区–hard
在本地库中移动HEAD指针
重置暂存区
重置工作区
–soft 只是移动了本地库
往前推一个版本,等于说撤销git commit
(还有其他的理解,这种理解需要继续研究)
–mixed 移动
往前推一个版本,等于说撤销git add
untrack文件
某一个文件被add,commit之后怎么删除
工作区rm aaa.txt之后
git status
1
2git rm aaa.txt
git rm aaa.txt --cachedgit add aaa.txt
- 将删除的变化加入index
git commit -m “deleted aaa.txt”
git reflog 查看上一次commit
git reset –hard
还有一种情况 我们在工作区删除某个文件之后 只是git add
还有没有将删除操作commit到版本库中
git reset –hard HEAD
删除的文件并找回
前提:删除前,文件存在时的状态有没有提交到本地库
branch
分支的本质是指向提交对象的一个可变指针
查看分支:git branch -v
创建分支:git branch [分支名]
切换分支:git checkout [分支名]
创建分支并且跳转到分支中 git checkout -b [BranchName]
分支删除:git branch -d [BranchName]
合并分支
- 切换到接收修改的分支上
git checkout [需要被添加的内容] - 执行merge
git merge [有新内容的分支]
冲突
在同一文件的同一位置,两个分支都做了修改
需要合并时,到底要听谁的 这就是冲突
- 编辑文件,删除特殊符号
- 把文件修改到满意的程度,保存退出
- git add 文件名
- git commit -m “日志“
1
2
3
4
5<<<<<<< HEAD
ggggggggggggg edit by hot-fix
=======
ggggggggggggg edit at master branch
>>>>>>> master
git 远程仓库
远程分支类似于本地分支,是指向远程仓库文件的指针
在实际开发中,每一个本地分支都应该存在一个与远程分支的对应关系。
git fetch fetch 不会对本地仓库内容进行更新
git merge 真正的更新本地仓库的内容
git pull = git fetch + git merge
A 把本地库 push 远程库中
B clone 远程库 到本地 使用 push 提交
A 需要pull 把远程的代码变化下载到本地
git remote
添加新的仓库
git remote add origin2 https://github.com/xxx.git