回到未来版本
git reflog //引用以往所有操作的日志
回退到之前的版本只会有改版本,没有中间版本。
只要commit到本地仓库的代码,即使reset之后也可以通过reflog找到对应的版本号进行恢复。
分支
更改一个分支代码不会影响别的分支
分支类似树形结构,但表现上为平行状态
git branch //分支操作命令,查询所有的命令
git branch dev //创建一个dev分支(默认从当前的分支进行创建即copy一份当前分支)
git branch 新分支 已有分支名称 //从已有分支名称copy创建一个新分支
git checkout dev //切换到dev分支
git branch -d 已有分支名 //删除分支,当前所在分支不能删除
真实环境创建分支的规则:
- 分支分为master分支,dev分支,test分支
- master分支不能随便进行代码提交,因为上线的版本要从master分
- 上线1.0版本 从master分支创建一个新的分支1.0分支(当前的线上版本)
- 一旦线上bug,需要切换到1.0进行bug修正,进行上线,同时将bug修正的代码合并到master分支。
- dev为开发分支,但是我们不要直接在dev开发分支上进行开发
- 去了公司之后,第一件事就是从dev分支上建立自己的分支,分支名称可以改为自己的名字。
- 开发是在自己的分支上进行开发,完成之后自测没有问题,将分支代码合并到dev分支,完成开发任务。
- 分支合并,多人开发,团队合作,提交代码时:1. 先将本地代码提交到自己分支上 2.切换dev分支, 3. 切换到自己的分支,将自己分支代码合并到dev分支,解决冲突,提交代码 4. 切换到dev分支,将自己分支合并完成的代码合并到dev分支。
合并
git merge //合并分支代码
dev分支开发完成,代码要合并到master上。合并代码步骤
- 先将dev分支代码commit
- 切换到要合并的分支上
- git merge dev 将dev分支合并到master上
- 可能会遇到代码冲突,解决冲突,然后在提交
- 代码要以master为主(有冲突,解决冲突)
- 切换到dev分支,合并master分支到此分支
- 也就是说,现在master分支 和dev分支保持一致
- 合并完成
冲突说明:
<<<<<<< HEAD
这块是当前版本的代码
=======
=======
这块是对应dev分支代码
>>>>>>> dev
解决冲突就是在两个版本之间选择 采用那个版本
远程仓库合并
开发完成之后想要提交到远程仓库:
- 先提交到本地仓库
- 在提交到远程仓库的时候,要注意,不确定远程仓库是否有新的代码,需要先进行拉取操作。
git pull
,其在拉取的时候git会自动进行代码的合并。如果有冲突就会提示解决冲突。 - 冲突解决完之后,进行本地仓库的提交
git commit
- 然后
git pull
确保没有新代码产生,然后进行git push
合并代码 `git rebase`合并代码。不推荐使用会干扰提交记录
克隆
git clone
stash
比如dev分支正在进行开发,测试人员在dev分支上发现了一个bug,需要去解决bug,但是开发到一半的代码不能进行提交。
解决办法:
先把当前的代码进行隐藏,先去解决bug,解决完bug,恢复现场
git stash:隐藏未提交的代码(类似于入栈)
git stash list: 查看
git stash apply:恢复
git stash drop:删除
git stash pop:恢复并删除(常用,类似于出栈)
revert 回滚(版本回退,建议使用)
会生成一个新的版本
- 找到你误提交之前的版本号
git revert -n 版本号
git commit -m xxx
提交git push
推送
回滚:只回滚要回滚的版本当前修改的代码状态,其他的不会回滚,也不会删除。
常见错误
error: you need to resolve your current index first
原因:从一个分支A切换到另一个分支B后,对切换后的B分支进行pull操作,因为pull操作实际上包含了fetch+merge操作,在执行 merge操作时,由于很长时间没有对B分支执行过pull/merge操作,本地的B分支库与remote中的B分支库中的差异很大,merge失败而停留在merge状态,也不能执行pull操 作。
解决方案:回退到merge前,再切换分支即可
git reset --merge
Updates were rejected because the tip of your current branch is behind
https://zhuanlan.zhihu.com/p/422024766