主页 > 新闻资讯 > 大数据分析:关于GIT的实用技巧

大数据分析:关于GIT的实用技巧

作者:覃老师 浏览次数: 2021-02-03 16:00

一、Git diff比对命令

通常情况下,我们会在自己的独立分支中完成需求开发,此时就会有需求将自己的分支和其他分支进行对比。这个功能可以通过1 git diff branch1 branch命令来实现。
如果希望对比暂存区和当前的 HEAD,那么使用1 git diff --cached命令会非常方便。普通的git diff命令默认对比的是没有加到索引中的文件。

 
二、通过 git blame 找到谁动了某行代码

在 定位到出错的代码行 以后,就可以通过 git blame 进一步找到谁动了相关代码,或者找到这笔改动的历史背景,举例如下:
$ cd linux-stable
$ git blame -L 50,50 init/main.c
78634061 (Frederic Weisbecker 2017-10-27 04:42:28 +0200 50) #include <linux/sched/isolation.h>

 
三. 通过 git log 获取某笔 commit 或 tag 的提交时间

在分析衰退时,如果找到了某笔变更,然后,又想进一步确定这笔变更是在哪个版本(Tag)引入的,这个时候可以先找一下该 commit 的时间,然后再比对 Tag 的修订时间。那么如何查看 commit 和 tag 的引入时间呢?以 HEAD 这笔 commit 举例如下:
$ date -d @`git log -1 --format=%ct HEAD` +%Y%m%d-%H%M%S
20190719-172216
把 HEAD 替换为具体的 commit 和 tag 号即可获得对应时间。对于 Linux 而言,通常不需要这么复杂,在找到某个变更之后,用下面这个方法就可以确定该变更对应的内核主版本:
$ git show HEAD:Makefile
因为 Makefile 中记录了内核的版本号。

 
四.用 git fetch 取代 git clone,实现断点续传

用 git clone 下载大型代码仓库时,一旦网络中断,后果是哭爹喊娘,但是于事无补,叫天天不应。
因为 git clone 没有实现断点续传,不知道开发者脑子“进了什么水”?Linus 求骂 ;-)
没关系,用 git fetch 可以实现类似效果,而且极其简单。
先用 git init 创建一个空目录:
$ mkdir test-repo
$ cd test-repo
$ git init
再在里头用 git fetch 要 clone 的仓库:
$ git fetch https://gitee.com/tinylab/cloud-lab.git
$ git checkout -b master FETCH_HEAD
git fetch 只能一个一个 branch fetch,fetch 完,把 FETCH_HEAD checkout 出来新建对应的分支即可。如果 git fetch 中途中断网络,可以再次 git fetch,git fetch 可以续传,不至于一断网就前功尽弃。

 
五、解决git 【 合并冲突 】 的思想:

(1)首先,新建一个分支:【 git branch 分支名 】 再切换到分支 【 git checkout -b 分支名 】
(2)把修改的文件提交到分支 :【 # git add --all # git commit -a -m "分支提交"】
(3)与主干同步【 git fetch origin 】。然后rebase,在【 git rebase origin/master 】的时候提醒和主干有冲突 (4) 找到有冲突的文件,并手工解决掉该冲突。 解决完冲突后执行git –continue操作
(5)将分支【 分支名 】提交到远端服务器
(6)切换到主干分支
(7)在主干分支上合并分支feizhi,并提交到本地,然后提交到远端git服务器
 
具体代码:
 git branch fenzhi
 git checkout -b fenzhi
 git add --all
 git status
 git commit -a -m "分支提交"
 git fetch origin  #更新远程跟踪分支
 git rebase origin/master  
 # git rebase 不会取回代码 要用git fetch先取回, git rebase 是合并代码
找到冲突的代码 ,手工修改(不要乱删,与同事先协商好保存那一部分代码( 小冲突,可以这样做。)
大一点,复杂一点,借助下面介绍的工具( beyond compare )
git rebase --continue            # 合并代码
git push --force origin fenzhi   # 将分支feizhi提交到远端服务器的分支feizhi
git checkout master              # 切换到主干分支
在主干分支上合并分支feizhi,并提交到本地,然后提交到远端git服务器
git merge fenzhi # 在主干分支上合并分支feizhi
git commit -a -m "合并分支后提交"
git push   #  本地拉取 服务器代码

 
、Git reset恢复改动命令

如果希望恢复一些已经提交的改动,我们可以使用git reset这个命令可以完成许多不同的行为,因此需要按照实际场景进行使用。
如果希望去除所有修改,包括索引中的内容和工作目录中的修改,那么可以使用git reset --hard
如果仅仅是希望重置索引,那么可以使用git reset --mixed这也是git reset命令的默认行为。混合的重置会保留当前工作目录中的改动。
最后,如果仅仅希望修改分支的 HEAD,可以通过git reset --soft来实现。
当运行git reset命令的时候,我们可以指定多个目标文件作为参数传入。当然可以通过git reset --hard COMMIT_ID恢复到指定的提交版本。


 
热点排行
推荐文章
立即申请>>