一、Git版本分支管理
以下是一个比较基本的分支管理示范,每个公司的项目管理运作不同,分支管理也有各自的特色,但万变不离其宗。
1) dev分支用于日常开发
2) 当有新版本需要发布时,把dev代码合并到release分支做集成测试,并等待发布
3) release分支进入bug修复阶段
4) 如果在release分支发现bug,那么在release分支进行修改,并使用git cherry-pick把修复bug的commit合并到release分支上
(cherry-pick与merge不同,它的合并是以commit为单位而非整个branch)
完成后,release分支上所有代码改动(除版本号之外)都应该已经合到了dev分支上
5) release分支测试完成后,发布到线上环境
6) 并且打上tag,合并到master分支上
7) 如果在线上出现bug,那么在master上hot fix修复
8) 出现hot fix并修复后,需要重新把hot fix的代码合并到dev以及release分支中去使代码保持一致

二、Git基本命令汇总
1.查看本地文件状态
git status —-查看本地、本地仓库、缓存(stash)的文件修改状态
—红色 代表本地工作空间的文件修改
—蓝色 代表提交到本地仓库中的文件(git add .)
2.切换版本/覆盖当前修改文件
git branch - 查看当前版本
git branch -a 查看所有版本
git checkout XXX(版本名) —-切换到远程库中XXX版本
git checkout filepath —覆盖当前修改的文件
git checkout . -覆盖当前所有修改文件
3.从远程库获取最新代码
git remote -查看远程库名称
git remote -v
git remote show XXX(远程库名)
git fetch — 从remote端拉取最新代码
git pull XXX(远程库名) XXX(分支名) -把拉取的最新代码跟当前工作空间合并
git rebase —把远程拉回的代码和本地合并
4.缓存本地代码
当要切换到其它版本时,想保存在当前版本修改的文件:在切换前做
git stash —-把本地修改过不需要提交的文件放入缓存
git checkout XXX(版本) —切换库版本
切回原来的库,把文件从stash缓存中拿出来
git stash pop — 从缓存中拉出
5.提交远程库
git add .
git commit -m ''
git remote 查看远程关联名称
git push remote的名称 本地master
6.处理冲突
git fetch 拉取最新工程
git pull XXX(远程库名) XXX(分支名) -把拉取的最新代码跟当前工作空间合并
冲突产生后,去工作空间修改后,>>>新代码===老代码<<<,保留最终代码,删除提示符,重新提交。
7.把本次提交的内容提交到其他分支(比如发布时bug的修改)
git cherry-pick commitId
8.建议执行顺序
git status 查看修改状态
git checkout filename 放弃某文件的修改。
git stash 储存修改
git fetch 拉取最新工程
git rebase 与本地分支合并
git stash pop 弹出储存文件,此时新文件可能会与你的文件产生冲突,解决冲突。
git add filename 添加某个修改文件
git add . 提交所有加点
git reset HEAD filename 回滚指定文件,回滚所有加点:"git reset HEAD . "
git commit -m''
git push 本地remote远程分支名,本地分支名
例我的本地分支为master 远程remote 别名为 origin 则提交为git push origin master
9.切换HEAD
git reflog --查看HEAD记录
git reset --hard HEAD^ //切换到之前一个HEAD
git reset --hard fad4462 // 切换到某个已经回退的HEAD
10.刪除 local branch
git branch -d <branch_name>
11.gitignore 全局配置忽略文件
git config --global core.excludesfile ~/.gitignore
如果只针对某个项目起作用,也可以把.gitignore放在跟.project同一目录下。
12.git log 格式化显示
git log --pretty=oneline
git log --pretty="%h - %H - %an, %ar : %s"
git log --pretty="%h - %s"
git log -p 显示每次提交的内容差异
git -log --stat 显示简要的增改行数统计
13.git stash暂存
git stash
git stash save -a 'msg'
git stash pop
git stash list
git stash apply stash@{id}
git stash drop stash@{id}
14.git reset回滚
1. git reset --soft head^ 回退最近一次commit的文件
2. git add 提交到暂存区
3. git reset HEAD <file> 把暂存区里的文件撤销
4. git reset --hard HEAD^ 把最近一次提交的文件回滚并覆盖
5. git reset --hard <commit_id>
6. git push -f
15.git 只合并分支上某个commit(即sourceTree的遴选)
1.git checkout -b'feature' 切换到新分支
2.git reflog 找到需要遴选的<commit_id1> <commit_id2>
3.git cherry-pick <commit_id1><commit_id2> 把1、2的提交合并到新分支
4.提交并推送
同样可以用sourceTree的遴选功能实现
1.切换到需要遴选提交代码的分支
2.选中某些提交,右键选择遴选
3.推送分支
16.git patch补丁 可以删除某一个commit
1.git log –oneline 找到需要删除的<commit_id>,假如倒序是第7次提交
2.git format-patch -7 生成7个patch,这些patch是按提交时间生成的
3.git reset --hard <commit_id> 回退到第8次提交的<commit_id>
4.git push -f 强制推送到远程
5.git am *.patch 移除0007-.patch,把其他应用提交
6.推送分支
17.git revert 回退某个commit提交
git revert <commit_id>
区别于git reset,git revert是作为一个单独的commit提交