美文网首页
Git 进阶

Git 进阶

作者: 执拗的男孩 | 来源:发表于2019-11-20 17:22 被阅读0次
    版本回滚的方法:
    1.如果提交的修改没有提交到暂存区
      git checkout .
      git checkout filepath
    2.已经提交到版本库回滚到到某个版本
       git reflog  显示项目全部操作的日志  
       git reset --hard commit_id  强制回滚到某一版本
       git push -f branch  强制提交到远程  
       用上方法 log 日志也会被还原
    注:log和reflog的区别
     log 提交的日志
     rflog 本地操作日志
    
    步骤1
    步骤2
    步骤3
    撤销/重置部分修改
    场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout -- file。
    场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD <file>,就回到了场景1,第二步按场景1操作。
    场景3:已经提交了不合适的修改到版本库时,想要撤销本次提交,参考版本回退一节,不过前提是没有推送到远程库
    如果没有提交工作区 可以使用git checkout .撤销所有的更改
    

    合并分支

    git merge branch1 将分支branch1合并到当前分支
    merge合并的策略:
    解决(Resolve)
    递归(Recursive)
    章鱼(Octopus)
    
    我们的(Ours)
    子树(Subtree)
    
    git rebase  交互式
    git rebase branch1
    git rebase --continue
    git rebase --abort
    git rebase --skip 
    git rebase -i  
    合并提交
    
    参考:[rebase 参考](https://www.codercto.com/a/45325.html)
    
    清楚缓存
    git rm -r --cached .
    
    状态:Untracked
    
    工作区(workspace) 和 暂存区(stage)
    通过git add 将所有的修改添加到暂存区
    git commit 将暂存区的修改添加到工作区
    
    
    git add -i 进入交互式shell模式
    1: status      2: update      3: revert(恢复)      4: add untracked
    5: patch(补丁:针对一个文件上传部分修改)      6: diff(区别)      7: quit      8: help
    
    
    Fast-Forward 模式
    --no-ff
    
    [git-merge完全解析](https://www.jianshu.com/p/58a166f24c81)
    
    当对提交的commit 不满意 需要重新编辑的时候 可以尝试该命令
    git commit --amend  
    git log --oneline  显示提交日志 且每次提交都一行显示
    
    git patch  补丁
    
    tag 标签  
    默认为HEAD,也可以指定一个commit id;
    git tag <tagname>  新建一个标签
    git tag -a <tagname> -m 'xxxxx'  指定标签信息
    git tag /git tag -l  查看所有的标签
    git tag -d <tagname>  删除标签
    git push origin --tags #推送到远程
    
    
    git revert 撤销 某次操作,此次操作之前和之后的commit和history都会保留,并且把这次撤销
    作为一次最新的提交
        * git revert HEAD                  撤销前一次 commit
        * git revert HEAD^               撤销前前一次 commit
        * git revert commit (比如:fa042ce57ebbe5bb9c8db709f719cec2c58ee7ff)撤销指定的版本,撤销也会作为一次提交进行保存。
    git revert是提交一个新的版本,将需要revert的版本的内容再反向修改回去,版本会递增,不影响之前提交的内容
    git reset 是把HEAD向后移动了一下,而git revert是HEAD继续前进,只是新的commit的内容和要revert的内容正好相反,能够抵消要被revert的内容。
    git revert -m xxx commit_id
    
    git reset/git reset --mixed commit_id  默认的方式 回退之前的版本 并保留之前的改动
    git reset -–soft:回退到某个版本,只回退了commit的信息,不会恢复到index file一级。如果还要提交,直接commit即可
    git reset -–hard:彻底回退到某个版本,本地的源码也会变为上一个版本的内容Git进阶
    
    git diff 查看版本的改动
    git diff HEAD 查看当前版本的改动
    git diff HEAD^ 相对上一个版本的改动
    git diff fileName 查看file相对当前版本的改动
    git diff HEAD fileName 同上
    另一种写法 git diff HEAD~n fileName
    当版本没有改动 还可查看两个版本改动的
    

    2.6 关于stash

    stash  
    字面意: 贮藏  
    目的/原理: 主要是将工作区修改的文件移到暂存区 以保证工作区的文件是"干净的"
    使用场景: 当前分支为A, 如果在A分支修改了部分代码,临时需要切换到B分支,但不想立马将修改的代码提交
    常用命令:
         git stash          将当前分支的修改贮藏
         git stash list     查看当前项目中stash 列表
         git stash drop stash@{0} 删除该stash 
         git stash pop  stash@{0} 释放该stash 
         git stash clear    清空项目中所有的stash
    

    官网提供的相关指令集
    git stash list [<options>]
    git stash show [<stash>]
    git stash drop [-q|--quiet] [<stash>]
    git stash ( pop | apply ) [--index] [-q|--quiet] [<stash>]
    git stash branch <branchname> [<stash>]
    git stash [push [-p|--patch] [-k|--[no-]keep-index] [-q|--quiet]
    [-u|--include-untracked] [-a|--all] [-m|--message <message>]
    [--] [<pathspec>…​]]
    git stash clear
    git stash create [<message>]
    git stash store [-m|--message <message>] [-q|--quiet] <commit>

    2.7 关于 reflog

    写在开头
    这些东西删除删除之后还可以恢复,有些东西没了就是没了,即使还有痕迹,已经没办法恢复了,且搬且珍惜。。。
    
    关于分支的操作
    常规操作
    增  git checkout -b newbranchname
    删  git branch -D branchname
    
    git reflog 记录本地库操作的日志 (每一步切换 每一次修改)
    就是因为这么详细所以 手欠的时候可以恢复数据
    
    git checkout HEAD{n}  恢复上一次的操作 比如撤销某一次提交
    git checkout newbranchname HEAD{n} 恢复某一次提交到新的分支 比如错手删除了一个分支
    

    2.8 缓存

    1.当我们需要删除暂存区或分支上的文件,同时工作区也不需要这个文件
    git rm file_path
    
    2. 当我们需要删除暂存区或分支上的文件,但本地有需要使用,只是不希望这个文件被版本控制(例如:.gitignore 文件)
    git rm -r --cached file_path
    

    3.遇到的问题

    1.
    No user exists for uid 501 fatal: Could not read from remote repository.
    重启终端下就好 系统有更新的话 需要重启终端 更新下配置。
    
    2. [!] The repo `BestSpecs` at `../../.cocoapods/repos/BestSpecs` is not clean
    
    切换到本地仓库路径执行下命令:
    git clean -f
    

    相关文章

      网友评论

          本文标题:Git 进阶

          本文链接:https://www.haomeiwen.com/subject/ogxsbctx.html