Git高阶技巧原创
金蝶云社区-碧月寒
碧月寒
8人赞赏了该文章 1,513次浏览 未经作者许可,禁止转载编辑于2022年02月09日 18:39:40

一、stash临时保存

一般用在pull和checkout之前,避免冲突。或者rebase前需要一个clean status的环境。

git stash  #会默认根据顺序生成名字stash@{0}
git stash list  #查看当前临时保存区
git stash save '523版本分支暂存'   #加上保存注释
git stash pop  #恢复保存,弹出临时保存区最近的一个
git stash apply stash@{x} #恢复具体的某个临时保存
git stash drop  [stash@{x}]  #删除最近一次保存,可加参数指定某次保存

二,merge:归并

用法:git merge anotherBranch
常用类型:默认是fast-forward方式,当条件不允许,默认为--no-ff方式
fast-forward:快进方式,不会产生任何压缩或提交,只是移动指针完成归并。当合并分支删除时,会地丢失分支提交记录。
--no-ff:顾名思义,为了解决ff问题而生,会生成一次新的提交记录。
--squash:把分支内容并入当前分支,但不会移动指针。
0

三,日常开发常规操作

代码库导入到本地IDE中,默认是master分支。
1,git checkout develop    #如果之前已经检出过,git fetch 更新一下
2,git branch -b task_xxx   #基于版本分支新建个人任务分支
3,git add  + git commit 提交到本地仓库
合并请求:要部署合并版本分支了。gitlab平台新建合并请求,注意选择好源分支【个人分支】和目标分支【版本分支】,不要弄混。没有提示冲突,审核人review代码后确认后会自动归并。
如果有冲突,本地操作如下:
git fetch  #拉取远程仓库信息更新本地
git stash #临时本地未提交的所有改动
git merge develop  #合并版本分支,冲突会有提示
解决冲突重新提交,git add + git commit 【IDEA解决完冲突会自动提交】
git push origin task_xxx  #推送最新更改到远程个人分支,合并请求基于远程库代码。

git stash pop  #本地环境恢复,继续愉快的开发


有些时候,远程私人分支合并后自动删除了,本地遗留长场的分支清单,不方便查找切换。可用如下命令清理远程已删除本地还存在的分支:
git fetch -p

四,rebase

非常有魅力的一个命令,可以对某一段线性提交历史进行编辑,合理使用可以使我们的提交历史干净简洁。操作之前保持本地代码库环境是干净的。【不要对任何已Push的提交记录进行修改】


1,合并多个commit为一个完整commit
例:合并最近4次提交记录为1次。
执行 git rebase -i HEAD~4  会弹出一个界面展示最近4次提交记录。
每行最前面是命令选择,需要熟悉vi命令。2,3,4行改成s命令。
输入:wq保存退出,稍后会弹出一个修改注释的界面,改完之后保存退出即可。
删除中间某次提交
找到该次提交commitid之前的precommitid
git rebase -i  precommitid  

在弹出的界面将commitid之前的命令改成drop即可,保存退出。


2,合并分支
rebase:历史提交记录会进行整合移动,不会产生新提交记录.不能进行revert,只能通过 reabase -i 进行编辑
git checkout task_xxx
git rebase origin/develop
如果有冲突:
解决冲突后执行git add 标记冲突解决
git rebase --continue 继续
git rebase --abort 中止,回退到rebase前。
0
和merge区别:版本树会生成一次新的提交,merge之后可以revert.
git checkout master
git merge dev
0
3,改变提交注释信息
改变最近一次:git commit --amend -m 'new message'
改变多次:git rebase -i HEAD~4
git rebase -i devlop 可以基于某个分支变基


五,.git探秘

0
HEAD:内容指示当前指向分支,切换分支内容会变。
config:保存的是通过命令git config --local 配置的信息
refs:heads是当前的分支信息,remotes是在本地做过push的分支信息,tags是通过tag命令产生的标签信息,stash是通过stash命令生产的临时保存信息。
0
跟踪到底会发现文件内容都是一个hash值,查看hash值类型和内容
git cat-file -t dfghhh
git cat-file -p dddffffg
objects:保存的是具体的对象内容。查看文件内容时,必须子文件名和文件名拼在一起。
git有3种对象类型,commit,tree和blob,blob保存的是具体的文件内容。
每一次commit保存的是当前版本库的一个快照,记录文件处于什么状态。内容是什么。
0



赞 8