基本命令
初始化仓库
git init
修改工作区提交到暂存区stage
git add .
提交暂存区到仓库(版本库)
git commit -m "msg"
撤销操作(新旧版本git有差异)
旧版本
-
没有
git add
时,用git checkout -- file
-
已经
git add
时,先git reset HEAD <file>
回退到1.,再按1.操作 -
已经
git commit
时,用git reset
回退版本
新版本
-
文件只在工作区操作,未add**。撤销操作:git restore 。结果:工作区文件回退。
-
文件已add,未commit。撤销操作:git restore --staged 。结果:暂存区文件回退,工作区文件未回退,如需继续回退,操按情况1操作。
-
文件已add,已commit。撤销操作:git reset --hard commit_id。结果:工作区文件、暂存区文件、本地仓库都回退
查看提交操作日志
git log
git log --pretty=oneline 简化日志
查看文件状态
git status
查看工作区和版本库里面最新版本的区别
git diff HEAD -- readme.txt
删除文件(本质是修改文件,同rm删文件后git add)
git rm <file>
克隆远程库到本地
git clone <url>
本地已有库关联远程库
git remote add origin <url>
推送远程库
git push <-u> origin master -u参数推送且关联分支,方便后续操作
查看远程库信息
git remote -v
删除远程库的绑定
git remote rm <name> name一般为origin
创建分支
git branch <branchName>
创建并切换分支(旧)
git checkout -b <branchName>
创建并切换分支(新)
git switch -c <branchName>
查看当前分支
git branch
合并指定分支到当前分支
git merge <指定分支名>
删除分支
git branch -d <分支名>
合并分支且禁用Fast forward
模式
本次合并要创建一个新的commit,所以加上-m
参数,把commit描述写进去。
git merge --no-ff -m "merge with no-ff" <指定分支名>
开发分支管理原则
master分支应该是非常稳定的,也就是仅用来发布新版本,平时不能在上面干活,干活都在dev分支上,dev分支是不稳定的,到比如1.0版本发布时,再把dev分支合并到master上,在master分支发布1.0版本;
Bug分支
当前dev分支工作未完成提交且需处理Bug时,把当前工作现场“储藏”起来,等以后恢复现场后继续工作:此时工作区为clean的
git stash
查看stash存放的工作现场
git stash list
要恢复工作现场dev,可用以下指令
git stash apply 恢复
git stash drop 删除stash内容
git stash pop 恢复的同时把stash内容也删了
多次stash,恢复的时候,先用git stash list
查看,然后恢复指定的stash
git stash apply stash@{0}
在master分支上修复的bug,想要合并到当前dev分支,可以用git cherry-pick <commit>
命令,把bug提交的修改“复制”到当前分支,避免重复劳动。
设立本地分支与远程分支的链接
git branch --set-upstream-to <branch-name> origin/<branch-name>
拉取远程库
git pull <remote> <branch>
优化Git的提交历史(变基)
git rebase
rebase操作可以把本地未push的分叉提交历史整理成直线;rebase的目的是使得我们在查看历史提交的变化时更容易,因为分叉的提交需要三方对比;
创建标签(标记版本)
git tag <name> 例:git tag v1.0
git log --pretty=oneline --abbrev-commit 找到历史版本的commit_id
git tag <name> <commit id>
创建带有说明的标签,用-a指定标签名,-m指定说明文字:
git tag -a v0.1 -m "version 0.1 released" 1094adb
查看标签
git tag
查看标签信息
git show <tagname>
删除标签
git tag -d <name> 本地
从远程删除:先本地后远程:
git push origin :refs/tags/v0.9
推送标签到远程
git push origin <tagname>
一次性推送全部尚未推送到远程的本地标签:
git push origin --tags
签信息
git show <tagname>
删除标签
git tag -d <name> 本地
从远程删除:先本地后远程:
git push origin :refs/tags/v0.9
推送标签到远程
git push origin <tagname>
一次性推送全部尚未推送到远程的本地标签:
git push origin --tags