gitHub地址:https://github.com/susuGirl
版本控制工具
-
本地版本控制
-
集中版本控制 svn
-
分布式版本控制 git (3种工作区域:工作目录、暂存区域、本地仓库)
建立分支的标准
-
master 分支
- 用来发布重大版本的分支
-
每个版本用tag打点一次
-
而且建议每次合并develop开发分支的时候将所有提交合并为一个提交,保持mastr分支的提交记录简洁明了
-
develop 分支
-
git checkout -b develop master 在 master 分支的基础上生成新分支 develop
-
-
feature 功能分支
- 由develop分支衍生出来,开发完成与develop分支合并完成后应删除
-
release 预发布分支
- 由develop分支衍生出来,开发完成与develop分支合并完成后应删除
-
fixbug 修补bug分支
- 由master分支衍生出来,修补完毕再合并进develop和master分支
操作了一波错误的神操作后,一般需要用到的骚手段
想当年我年少无知,rebase代码的时候冲突了,但是当时脑子里水装多了愣是没发现,结果就在冲突生成的临时分支上写了新功能新代码,问题是还commit了好几天的好多提交,结果一波神操作直接在临时分支上把代码干没了临时分支也干没了。幸好公司的小哥哥配合 cherry-pick 把代码提交记录一个一个捡回来了,不然都要急哭了,这就是菜和眼瞎的代价。
然后那周末自己就在家里啃了两天的git,建新项目自己造bug自己解,一边想方设法丢代码一边又想方设法的捡回来…...虽然记不住那么命令,但是以后再出情况至少你知道这种情况是能解决的就不慌了四不四
-
从远程仓库拉取一条本地不存在的分支,创建本地分支并拉取远程分支
- git checkout -b develop origin/develop
-
git fetch origin 远程分支名x:本地分支名x
-
重命名分支
- git branch -m oldName newName
-
修改最后一次的commit信息
- git commit --amend -m '......’
-
git commit —amend
- 会出现vim的编辑页面
- i 开始编辑
-
ESC 退出编辑模式
-
u 撤销
-
:w 保存
-
:q 退出
- 会出现vim的编辑页面
-
将某一次的提交挑拣合入到当前分支
- git cherry-pick commit-id
-
如果有冲突则解决冲突 然后 commit
-
回滚到某一个commit,但是会保留下修改内容
- git reset —soft commit-id
-
回滚了最后一次commit提交,代码回回到回滚版本时的状态不保留下修改内容,并且未commit的内容会消失
- git reset —hard HEAD~1
-
看到所有的被删除的 提交或者add或者未add的文件
- git fsck --lost-found
-
- git fsck --lost-found
-
查看提交
- git log --oneline -7 查看最近的 N 次提交
- git log -g 或者 git lg 查看全部提交
-
查看详细记录
- git show commit-id
-
找回不小心被回滚的这一次提交
- 查看记录 git reflog
-
-
git reset —hard 63a9b5d
-
- 查看记录 git reflog
-
误删分支,还原分支
-
git reflog 查看所有提交记录,找到误删分支的最后一次提交
-
git branch branch-name commit-id
-
-
删除远程仓库不存在的分支
-
git remote prune origin
-
-
删除远程分支
-
git push origin —delete branch-name
-
-
删除分支
-
git branch -d branch-name 删除,若分支还未合并不能删除
-
git branch -D branch-name 强制删除,即使还没有合并
-
-
推送并创建远程分支
-
git push origin branch-name
-
将远程仓库更新到本地以及分支的合并
-
git fetch / git rebase 推荐这种方式
- git fetch 更新
-
git rebase branch-name 复制提交
-
git mergetool 使用工具解决冲突
-
git clean -f 解决完冲突,清理临时文件
-
git rebase —continue 继续
-
生成的 git 图谱:一条线表示强迫症看着很舒服
-
git pull / git merge
- git pull 的命令是 git fetch 和 git merge 的结合
-
生成的 git 图谱:三线谱 四线谱 六线谱…十线谱…N线谱...
-
两种方式的区别,简单介绍下原理,画了个图:
-
-
merge 是指针形式,merge 的时候会多生成一个merge的提交记录,保留两个分支记录,从而两个分支都指向merge提交
-
fetch/rebase 则是复制每一个提交到主分支上,不会保留子分支记录,不会衍生多余的分支曲线,从而保持分支整洁
以上内容没有做深入解说,想深入了解可参考以下文章: