不管git有多少分支,整个git可以理解为是一颗树(包含很多枝杈),不同的分支仅仅是对于不同枝杈的一份快照。
撤销工作区的修改
,用命令git checkout -- file
。撤销暂存区的修改
:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD <file>
,就回到了场景1,第二步按场景1操作。丢弃提交
:已经提交了不合适的修改到版本库时,想要撤销本次提交,使用命令git reset --hard commit_id
。撤销提交
:git revert HEAD
。在当前提交后面,新增一次提交,抵消掉上一次提交导致的所有变化。它不会改变过去的历史,所以是首选方式,没有任何丢失代码的风险。替换上一次提交
:提交以后,发现提交信息写错了,这时可以使git commit --amend -m ""
,可以修改上一次的提交信息,并把暂存区有变化的文件一并提交。(相当于重新提交)当我们在某个分支上工作进行到一半时,需要切换分支进行工作,这是我们不想提交代码,可以通过git stash
命令,将工作现场“储藏”起来。
用git stash list
命令可以查看储存的内容:
$ git stash list
stash@{0}: WIP on dev: f52c633 add merge
当我们需要恢复工作现场时,使用**git stash pop**
,这样在恢复的同时把stash内容也删了。
$ git stash pop
On branch dev
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
new file: hello.py
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: readme.txt
Dropped refs/stash@{0} (5d677e2ee266f39ea296182fb2354265b91b3b2a)
比如我们在master
分支上修复的bug,想要合并到当前dev
分支,可以用**git cherry-pick <commit>**
命令,把bug提交的修改“复制”到当前分支,避免重复劳动。
git 标签是指向与某次commit的指针的,在一些重要的代码提交上打上标签,可以帮助我们更好的识别和管理我们代码提交的历史。
git tag -a <name>
git tag -a <name> -m <msg>
git push origin <tagname>
git push origin --tags
git tag -d <tagname>
git push origin :refs/tags/<tagname>
在git中创建和切换分支的代价是非常小的,我们应该多用分支。
当我们开发时,应该根据当前任务创建一个新分支进行开发,而不是在dev
分支上进行开发,开发完成后再将开发完成的分支合并到dev
分支。
比如:我们接到一个新的需求:
(dev)$: git checkout -b feature/xxx # 从dev建立特性分支
(feature/xxx)$: blabla # 开发
(feature/xxx)$: git add xxx
(feature/xxx)$: git commit -m 'commit comment'
(dev)$: git merge feature/xxx --no-ff # 把特性分支合并到dev
当合并代码出现冲突时,必须解决冲突后才能继续提交。
git 使用<<<<<<<
,=======
,>>>>>>>
标记出不同分支的内容,我们修改好再提交即可。
Git is a distributed version control system.
Git is free software distributed under the GPL.
Git has a mutable index called stage.
Git tracks changes of files.
<<<<<<< HEAD
Creating a new branch is quick & simple.
=======
Creating a new branch is quick AND simple.
>>>>>>> feature1
master
dev
feat/xxx
release/xxx
hotfix/xxx
每个仓库有且仅有以下的 分支:
Branch: master 、 dev 、 feat 、 release 、 hotfix
其中:
master 受保护,不存放源代码,不直接提交代码,所有的 上线文件 需要推送到此分支。
dev 受保护,主分支,不能直接提交代码,在这个分支只能增加从 feat 合并 过来的 commit。紧急bug除外,紧急bug处理方式看后文bugfix。
feat 分支需要从 dev 切出,然后开发完成后,提交合并请求到 release 分支进行提测。
release 分支需要从 dev 切出,用来对项目中各个需求进行合并提测,改 bug 等均在此分支进行,测试成功后,提交合并请求到 dev。
hotfix 分支需要 dev 切出,待 bug 修复完成后,提交合并请求到 dev。
对应每个发布版本的源代码 tag。tag版本号与需求版本一致,从dev分支打tag,命名 release_版本号_日期,如:release_1.0_20200426
对应每个发布版本的上线文件 tag。tag版本号与需求版本一致,命名 dist_版本号_日期,如:dist_1.0_20200426
commit
的类别,只允许使用下面10个标识。commit
影响的范围,比如Button组件、store、首页、路由等等,视项目不同而不同。commit
目的的简短描述,不超过50个字符。在Github、码云等源码托管商,提供了release的概念,可以提交我们打包后的项目文件,在标签tag的基础上我们可以添加编译好的二进制文件等,如.deb、.exe等给特定的版本提供更多的信息,方便用户,也方便后期查找特定版本的程序。
手机扫一扫
移动阅读更方便
你可能感兴趣的文章