2023年4月4日
By: Chase

git使用学习

git log的filter

按照日期筛选

git log --after=2023.3.1 --before=2023.4.1

按照作者筛选

git log --author=chase

导出

git log >> ~/Desktop/git.log

格式化打印

列几个常见的format参数:

'%s': subject // commit的标题和内容
'%an': author name
'%H': commit hash
'%ce': committer email
'%cn': committer name
'%aD': commit time
'%n': insert line

举例1:

git log --after="2023-08-20 00:00:00" --pretty=format:"%s" --author="chase"

图-1

举例2:

git log --pretty=format:"%s - %an%n%aD %n" --author="chase" 

图-3

git rebase

常规用法

替代merge, 这样在查看git branch时, 始终会是一条分支.

比如常规的切分支合PR的开发流程:

// 切分支开发
git checkout -b dev

// 在dev上提交
git commit -m "xxx"

// 准备合并回master了
git fetch origin master
git rebase origin/master
git push origin dev

// 远端(github托管)直接提dev合并master的pr即可无冲突合并

甚至, 不切分支的开发:

// 在master上
git commit -m "xxx"
git fetch origin master
git rebase origin/master
git push origin master

rebase自身大法

如果新接触一个开发分支干个一段时间, 想要通过rebase合并代码, 冲突解决起来往往很痛苦, 比merge更胜, 因为merge只解决一次.

减轻rebase的痛苦, 可以先把开发分支的所有commit rebase成一个.

代码提交少的话, 数数ahead master分支多少条就可以, 代码提交很多的话, 可以:

git rev-list --left-right --count master...current-dev
=> 7       43

7是behind master, 43是ahead master. 也就是说自己的分支上新提交了43个commit.

以下举例合并以下1 2 3, 3个commit为一个

git log
=>
commit 8a9235d1bdf7f52d8a6e6a69902d78814bdaa1bd (HEAD -> master)
Author: chase <chase_si@163.com>
Date:   Thu Apr 13 13:42:40 2023 +0800
    3
commit d4352c36af8a34e47a539e1e8ef34f1ec859aebc
Author: chase <chase_si@163.com>
Date:   Thu Apr 13 13:42:30 2023 +0800
    2
commit 8f360179854d3cf966e50bf4df6ee8939012307d
Author: chase <chase_si@163.com>
Date:   Thu Apr 13 13:42:16 2023 +0800
    1
  1. rebase插入
git rebase -i HEAD~3
  1. 会出现下图, 利用vim编辑技能 图 2
  2. i进入insert模式
  3. 将2 3变为s
  4. esc
  5. 在下面的:输入x回车保存即可
  6. 会再出现一遍需要vim操作编辑commit信息的框, 重复3~6把不需要的commit删除编辑即完成

rebase插入多条的相关vim操作

如果rebase自身的时候, 条数太多, 我们就希望可以多行操作. 这里是vim操作, 可以:

  1. 将光标移到要插入相同内容的第一行第一个字符上,如上面代码中第二条的pick
  2. 按下ctrl+v进入visual block模式
  3. j或多次,将光标移动到要插入的最后一行
  4. 按下I(大写i)进入编辑模式
  5. 开始输入要插入的内容,如s
  6. esc退出(非常重要,不要忘记了),Vim会自动在这几行前面添加相同的内容,可能需要一些运行时间。

图-1

如果操作失误, u是撤回.

删除branch

git branch -a // 查看所有
git branch -D [branch] // 删除local branch

// 拉取origin所有分支并 去除已经不存在的远程分支 
git fetch origin
git remote prune origin

// 从branch -a里移除本地对[origin/untrack]分支的追踪
git branch -d -r origin/untrack
Tags: git