git 使用心得

190 阅读6分钟

git 流程

Workspace  工作区
Index / Stage 暂存区
Repository 本地仓库区
Remote 远程仓库区

git 常用命令

add 将改动由工作区添加到暂存区
//将所有改动由工作区添加到暂存区(git版本2.0以下不包括删除)
git add .
//将所有改动由工作区添加到暂存区(增,删,改)
git add -A
//将所有被追踪的文件由工作区添加到暂存区(删,改)
git add -u
//将指定文件/文件夹由工作区添加至暂存区
git add fileName/dirName 
//多个文件
git add fileName1 fileName2 ..
//删除指定文件(工作区/暂存区)
git rm fileName
//取消文件追踪保留在工作区
git rm --cached fileName
//修改工作区/暂存区文件名称
git mv oldFileName newFileName

status 查看工作区和暂存区的状态
git status

commit 将改动由暂存区提交至本地仓库区
//将所有改动由暂存区提交至本地仓库区并写入提交信息
git commit -m msg
//合并上次本地仓库未推送至远程仓库的提交并修改提交信息
git commit --amend -m msg
//合并上次本地仓库未推送至远程仓库的提交并不修改提交信息
git commit --amend --no-edit
//add -u commit 合并写法
git commit -am msg
//跳过验证继续提交
git commit -n(--no-verify简写)

remote 远程仓库
//查看所有的远程主机
git remote
//查看关联的远程仓库信息
git remote -v
//关联远程仓库
git remote add origin(远程主机名) url
//删除关联
git remote -rm origin

pull 拉取远程仓库最新代码
//更新代码及拉取所有远程分支
git pull
//更新指定分支代码(等同于先fetch再merge)
git pull origin(远程主机名) branchName

push 推送本地仓库至远程仓库(相对于当前分支)
//已经建立本地分支与远程分支关联
git push
//未建立关联推送
git push origin 本地分支:远程分支(本地分支和冒号可以省略) 
git push origin branchName
//推送并建立关联
git push -u origin brancName
//删除远程分支
git push origin --delete branchName
git push origin :brancName(等同于推送一个空的本地分支到远程分支)
//强制更新远程仓库(避免使用)
git push -f(--force简写) origin
//强制更新远程仓库指针(用于修复版本慎用)
git push origin HEAD --force
// 推送一个本地标签
git push origin <tagname>
//推送全部未推送过的本地标签
git push origin --tags
//删除一个远程标签
git push origin :refs/tags/tagName

branch 分支
//新建本地分支
git branch branchName
//查看所有远程分支
git branch -r
//查看所有本地分支
git branch -l(可以省略)
//查看所有分支(本地+远程)
git branch -a 
//查看所有分支并附带最新的提交信息
git branch -av
//查看本地分支对应的远程分支
git branch -vv
//删除本地分支(工作区,暂存区不存在未提交至本地仓库的内容)
git branch -d branchName
//强制删除
git branch -D branchName
//修改当前分支名称
git branch -m newBranchName


merge

merge有三种合并方式
//快进式合并(默认fast-forward)不会生成新的提交,指针指向被合并的分支 不会每次都这样
git merge branchName
//生成一个新的提交
git merge --no-ff branchName
//将合并的内容存放至暂存区手动提交 只会有一次提交记录,假如你需要简洁的提交历史
git merge --squash branchName


stash 内存(在你当前分支工作区暂存区有修改时,你并不想提交到本地仓库区,又需要去修改其他分支的bug时,可以先存进内存在切换分支,修改完毕在切回来,从内存中恢复)
//将工作区,暂存区修改存到内存(删除,修改)
git stash
//从内存中取出
git stash pop
//给本次存储加个备注
git stash save msg
//存储新增的文件
git stash -u
//显示修改哪些文件
git stash show
//显示修改哪些文件内容
git stash show -p

多个stash 需要在命令结尾加上 @stash{index} index默认从0开始,不加默认为0
//查看存储纪录所有stash列表
git stash list
//删除所有缓存的stash
git stash clear
//显示某个stash修改哪些文件
git stash show @stash{index}
//显示某个stash修改哪些文件内容 
git stash show -p @stash{index}
//从内存中某个stash恢复且删除纪录
git stash pop @stash{index}
//从内存中某个stash恢复且不删除纪录
git stash apply @stash{index}
//删除某个stash记录 使用apply未删除时需要手动删除记录时
git stash drop @stash{index}


checkout 用与切换/新建分支,回退本地仓库版本,回退工作区/暂存区内容
//切换分支
git checkout branchName
//切换并新建分支
git checkout -b branchName 
//切换并新建分支且拉取远程分支代码(本地需要有这个远程分支,没有的话需要pull一下)
git checkout -b branchName origin(远程主机名)/remoteBranchName
//清空未添加至暂区的修改
git checkout .
//清空未添加至暂区的指定文件的修改
git checkout fileName

reset 回退到某个commitId,丢弃之前所有的提交
//回退到指定commitId 同时重置暂存区、工作区
git reset --hard commitId
//取消特定文件暂存从暂存区干掉不影响工作区
git reset fileName
//重置暂存区最近的一次提交,但工作区的文件不变
git reset 
//等价于 
git reset HEAD (默认)
//清空暂存区与工作区,回退到最近一次提交的版本内容
git reset --hard 
//清空暂存区与工作区,回退到最近一次提交的上一个版本
git reset --hard HEAD^ 
//回退至指定commitId,清空暂存区但工作区不变
git reset commitId
//等价于 
git reset --mixed  commitId
//回退至指定commitId,但保持暂存区和工作区不变
git reset --soft  commitId
//回退至指定commitId,同时清空暂存区、工作区
git reset --hard  commitId


revert 撤销某次提交并生成一条新的提交记录(手动commit/自动commit)
//撤销最近的一次提交
git revert HEAD 
//撤销最近一次的上一次提交
git revert HEAD^ 
//撤销最近一次的上两次提交
git revert HEAD^^ 
//撤销最近一次的上n次提交
git revert HEAD~num 
//撤销指定提交版本 
git revert commitId
//撤销指定提交版本,自动生成一次提交
git revert commitId --no-edit

cherry-pick 就是将指定的提交commitId应用于其他分支,在当前分支可以用于恢复被reset/revert掉的提交
//恢复指定commitId  待补充
git cherry-pick commitId

diff
//查看冲突文件
git diff --check

tag 打个版本标签
//默认在 HEAD 上创建一个标签
git tag tagName
//在某个commitId创建一个表签
git tag tagName commitId
//创建带有说明的标签
git tag -a tagName -m msg commitId
//查看某个tag详细信息
git show tagName
//删除本地标签
git tag -d tagName