Git 操作进阶使用

作者: 过期的薯条 | 来源:发表于2020-02-22 16:40 被阅读0次

    1.引言

    最近跳槽啦,入职啦一家新的公司,5个人协同办公,共同维护一个项目。因为自己git 用的不是很熟悉,导致,自己提交之后的代码,把服务器上的代码弄乱啦。折腾了一俩天。给自己带来麻烦的同时也麻烦啦我的同事。所以今天花啦一整天学习下git的进阶使用。我是在Linux上写的这篇博客

    2.正题

    2.1 概念

    暂存区:通过git add. 将文件提交的区域
    本地区:本地git仓库保存的区域
    工作区:对本地区代码进行修改,保存的区域

    image.png

    2.2 git 中的关联关系:

    • 本地仓库和远程仓库的关系
     git  add   remote   origin  <远程仓库的地址>      本地仓库和远程仓库建立连接 
    
     git remote -v    查看远程仓库的地址
    
    • 本地分支和远程分支的关系
       git checkout -b   <本地分支名>   origin/<远程服务器分支名称>   将远程分支拉到本地。此时远程分支和本地分支没有建立联系
       
       git branch  -u  origin/ <远程分支名字,不带origin>           本地分支和远程分支建立联系(ps: 默认是当前的本地分支)
    
    
    • 查看本地分支 和远程分支 的对应关系
       git branch -vv   
    

    2.3 场景分析

    2.31 本地commite 合并

    多人本地协同办公,为了保证日志的清晰,每个人提交一次,只能有一个结点。也就是说本地有多个commite打话,必须要合并成一个commite。commite的合并 用到git rebase -i [startCommiteId]。此条指令的意思是,将startCommiteId 之后的提交合并成一个。
    示例:

    image.png

    现在要将”本地的三次提交" 合并成一次。选择”本地第一次提交" 前的一次commitId 作为startCommiteId,也就是 commit:e21b9a743c 那次提交。

    执行:git rebase -i e21b9a743c,进入如下界面


    image.png

    将"pick " 改成 s 就行。s是 squash的 缩写。 修改完毕:Ctrl+X 退出编辑界面,进入到 ”合并日志填写界面”

    image.png

    Ctrl+X 退出之后,就会提示保存成功


    注意:
    git rebase -i 是将最新的一次提交,压缩到"前一个提交"上,因此我们不能把 将 "前一个提交"前打"Pick" 改成 "s"。 否则会提示:

    Git: 在转换时出现"没有前一个提交不能进行'squash'"

    image.png

    2.32 减少 冲突合并生成结点

    合并是无时无刻存在的,单纯的使用 git pull 将会发生合并操作。导致本地新生成一个 "合并结点"。然后提交到服务器上,就会有这条合并记录。日志上会很难看,且容易出现混乱。(ps:我本人就是因为这样的操作,导致混乱)。正确的方式是:

    git  pull  --rebase  origin  远程分支名
    
    之后,通过  git status 查看 冲突 ,更改冲突完毕之后
    
    git add .
    
    git rebase --continue
    

    这样就不会生成一个新的结点。前提啥:本地分支已经提交

    2.33 分支选择性合并

    当前分支为A,还有一个分支为B。现在想将B分支的一次提交,合并到A分支上。使用

    git  cherry-pick   commiteId 
    
    有提示冲突:git status 查看,并修改,之后,git  commit  -s  提交 这次的合并
    

    以上就是我最近一天遇到的关于git使用的痛点。通过这些天的摸索,也逐渐学会啦一些其他打命令。

    git  reset  + commitId   回退版本,commitId 之后的改动,会在工作区中保存
    
    git reset --soft  +commitId   回退版本,commitId 之后的改动,会在工作区中保存
    
    git reset --hard   +commitId  回退版本到指定版本,commitId 之后的改动就会被丢弃(  慎用)
    
    git  branch -vv   经常需要查看当前head 是否在分支上,以及本地分支对应打远程分支
    
    git  push  origin  HEAD:远程分支名    "HEAD" 必须完全大写。假如不指定远程分支,git push 默认是在远程服务器新建立一个  和  本地分支名称一样的,远程分支
    
    git pull --rebase  origin   远程分支名 (不要用origin/远程分支名)
    
    
    

    目前还有这些内容待总结:

    1. Choreographer 学习
    2. ViewGroup 自定义不执行onDraw().通过设置 setWillNotDraw(false);
    3. ArgbEvaluator 类 可以实现字体颜色/背景的渐变效果
    4. 给控件设置ele 阴影,发现没得反映 需要调用下:setOutlineProvider()
    5. focusSeach 进一步深入理解
    6. TvRecycleView的bug 。设置了拦截子view 焦点的 模式,导致子view requestFOcus 失败
    7. android tv 有些view setOnClick/setlongClick 无反应。(原因是父布局dispathEvent返回true,更加深一层的原因是 view焦点占据,所以不响应事件)
    8. Git rebase Git revert Git stash ,Git commit -s 等等操作练习

    革命尚未成功,同志们还任需努力!


    补充:

    git stash: 将当前分支下,工作区的代码(改动的)存入栈中。方面进行git pull 操作

    git stash pop: 将当前栈中改动的代码,移出并且删除,移出的意思是与当前分支进行合并。既然是合并就会产生冲突。解决冲突之后,git add . 一下 就 ok了。

    git stash show : 查看是否栈中有缓存的代码

    git stash clear: 删除 栈中的代码

    相关文章

      网友评论

        本文标题:Git 操作进阶使用

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