玄机随录系统设计

Git 操作进阶使用

2020-02-22  本文已影响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: 删除 栈中的代码

上一篇下一篇

猜你喜欢

热点阅读