版本控制工具GIT:使用标准以及操作了一波错误的神操作后,一般需要用到的骚手段、将远程仓库更新到本地以及分支的合并,fetch/rebase与merge的原理
gitHub地址:https://github.com/susuGirl 微信公众号:fuxiaodexing
版本控制工具
-
本地版本控制
-
集中版本控制 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 退出
将某一次的提交挑拣合入到当前分支
- git cherry-pick commit-id
如果有冲突则解决冲突 然后 commit
回滚到某一个commit,但是会保留下修改内容
- git reset —soft commit-id
回滚了最后一次commit提交,代码回回到回滚版本时的状态不保留下修改内容,并且未commit的内容会消失
- git reset —hard HEAD~1
看到所有的被删除的 提交或者add或者未add的文件
- [li]git fsck --lost-found
查看提交
- git log --oneline -7 查看最近的 N 次提交
查看详细记录
- git show commit-id
找回不小心被回滚的这一次提交
- 查看记录 git reflog
git reset —hard 63a9b5d
误删分支,还原分支
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 则是复制每一个提交到主分支上,不会保留子分支记录,不会衍生多余的分支曲线,从而保持分支整洁
以上内容没有做深入解说,想深入了解可参考以下文章:
阅读更多- 版本控制工具(下)——Git的远程仓库、分支管理与其它操作
- Git使用手册/Git教程:git fetch 将远程仓库的分支及分支最新版本代码拉取到本地
- git基本使用(2)创建切换合并分支以及提交本地分支至远程分支
- 【Git学习笔记】用git pull取回远程仓库某个分支的更新,再与本地的指定分支自动merge【转】
- Eclipse关联GitHub实现版本控制[一般下载的eclipse里都自带git插件,然后设置本地仓库和远程仓库就可以]
- 【Git学习笔记】用git pull取回远程仓库某个分支的更新,再与本地的指定分支自动merge
- git pull取得远程仓库的对像并刷新、合并本地数据git fetch+get merge
- 用git pull取回远程仓库某个分支的更新,再与本地的指定分支自动merge
- git查看远程代码更新,合并到本地分支,以及远程代码的回滚
- git基本使用 创建切换合并分支以及提交本地分支至远程分支
- git fetch 的简单用法:更新远程代码到本地仓库
- git fetch 的简单用法:更新远程代码到本地仓库
- 如何解决更新被拒绝,因为远程版本库包含您本地尚不存在的提交。这通常是因为另外 提示:一个版本库已向该引用进行了推送。再次推送前,您可能需要先整合远程变更 提示:(如 'git pull ...')。
- 【git fetch】的简单用法:更新远程代码到本地仓库
- [git更新中]版本控制工具git初步使用
- [转]git fetch更新远程代码到本地仓库
- git fetch 更新远程代码到本地仓库
- git fetch 的简单用法:更新远程代码到本地仓库
- Git更新远程仓库代码到本地 git fetch
- 菜鸟教程之工具使用(九)——Git如何进行分支的merge操作