概述:
如下图可以看出,Git版本控制有三个区,分别是工作区、暂存区、本地仓库,简单的理解的话,
未执行 git add 命令的话是在工作区,
执行了 git add 之后到了暂存区,
执行了 git commit 之后到了本地仓库中。
这里简单的描述一下基本的命令,然后带大家看看Git的进阶命令。
branch管理
-
git checkout -b feature/Hide-ecpm origin/feature/Hide-ecpm // 克隆远端分支origin/feature/Hide-ecpm到本地feature/Hide-ecpm
-
git checkout -b feature/Hide-ecpm // 从当前分支新建一个分支feature/Hide-ecpm ,例如 git pull master最新提交后 基于master创建新的纯净分支 ,不依赖任何分支
-
git branch -d [branchName] //删除分支,未合并分支不能被删除
-
git branch -D [branchName] //强制删除分支
-
git merge [branchName] 将branchName合并到当前分支
-
git merge [branchName] 将branchName合并到当前分支
-
git commit --amend 修改上次的提交信息,push后不会增加新的commit记录,但是会修改本次的commithash(也可以理解为删掉了最新的一次commit,重新又提交了一次)
演示:
git commit --amend // 修改commit msg
rebase branch
-
git pull --rebase origin [branchName] = git fetch + git rebase
// 假设当前分支dev, commit 为 a b c d e
// 假设master分支, commit 为 a b f g h
git pull --rebase origin master
// 当前分支dev commit 变为 a b c d e f g h
-
git rebase master
// 假设当前分支dev, commit 为 a b c d e
// 假设master分支, commit 为 a b f g h
git rebase origin/master
// 当前分支dev commit 变为 a b f g h c d e
stash储存代码
-
场景:当你的功能还没开发完不能commit但是现在需要rebase下master,缓存区的代码该咋办?当你写了几行代码,但是现在需要切到其他分支去改bug,缓存区的代码该咋办? 这时候就到了stash的用武之地了
-
git stash 贮藏代码
-
git stash pop 恢复到工作区和缓存区,会移除stashid
-
git stash list 查看当前贮藏区
-
git stash apply stashname 恢复指定贮藏代码到工作区和缓存区,会保留stashid
-
git stash save 'msg' 带备注贮藏
-
git stash show -p 显示最新的贮藏文件具体改动
-
git stash show -p stashname 显示指定的贮藏文件具体改动
reset回退
-
git log 查看提交日志
-
git reset 将所有暂存区回退到工作区
-
git checkout . 丢弃工作区所有的更改
-
git reset --hard [commit hash] 将从commithash(不包括此hash)之后的丢弃
-
git reset --hard 将暂存区、工作区所有内容丢弃
-
git reset --soft [commit hash] 将从commithash(不包括此hash)之后的提交回退到暂存区
-
git reset --soft HEAD~4 回退最近4次提交到暂存区
cherry-pick 复制提交
-
场景:当你在merge或者rebase的时候发现冲突太多了,想哭的时候,可以用原分支check目标分支处理,然后再cherry-pick当前分支的每个提交,这样冲突就会少很多。或者另一分支上有些代码还没有merge到master,但是你当前分支又非要用的时候,就可以cherry-pick过来一份。
-
git cherry-pick [commit hash] 将其他分支上已提交的commit在当前分支再提交一次,产生新的commithash