GIT:操作了一波错误的神操作后,一般需要用到的骚手段(在临时分支提交了代码并删除了怎么办)

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 退出

  • 将某一次的提交挑拣合入到当前分支

    • 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 log --oneline -7 查看最近的 N 次提交
    • git log -g 或者 git lg 查看全部提交
  • 查看详细记录

    • 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 则是复制每一个提交到主分支上,不会保留子分支记录,不会衍生多余的分支曲线,从而保持分支整洁

以上内容没有做深入解说,想深入了解可参考以下文章:

https://www.yiibai.com/git

http://www.ruanyifeng.com/blog/2012/07/git.html

http://www.ruanyifeng.com/blog/2015/12/git-cheat-sheet.html

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值