git 小技巧

supersimple / 2024-11-13 / 原文

一、git 撤回或修改之前提交并且不影响 被撤回或修改提交之后的提交信息操作

1.  首先将指定分支克隆下来并备份

git clone -b xxx httpxxxxx    // xxx 分支名

cp xxx xxx_backup

2. 先备份对应提交的patch 并移动到别的目录中,防止后续git reset 的时候清掉
git format-match commitid -1
mv ./0001xxxxx.patch ../

3. 回退到要撤回或修改的提交的前一个提交
    git log     // 查看提交号

    commit id4
xxx
commit id3
xxx
commit id2
xxx
commit id1
xxx
…………

// 假如要撤回或修改的为comit id2,则先退到commit id1
git reset --hard id1

// 若修改提交,可以将之前备份的patch先打上去
git apply ../0001xxx.patch 

// 若要更改提交人信息 设置git配置
git config user.name "YourName"
git config user.email "xxxx@highgo.com"

// 进行提交
git commit -m "xxxx"

// 将修改提交的后续提交接入
git cherry-pick id3^..id4 // 指定一段连续的提交接入当前提交下,左值为较为旧的提交,右值为较为新的提交

// 最后 push 到指定的分支xxx, 一般push是会拒绝提交,加上-f 就可以,但是-f 慎用
git push origin xxx -f  

二、其他git小技巧

1. 显示该文件夹及其内部文件的所有提交记录简要信息
    git log --oneline
    
2. 每次提交中具体修改了哪些文件
    git log --name-status
    
3. 每次提交的详细内容变化
    git log -p 
    
4. 某几行的历史提交信息
    git blame -L start,end 

5. --recursive 一起克隆子库,等价于先克隆主库在进入主库目录中git submodule update --init等命令克隆子库, --depth只克隆下来指定数量的提交记录 
    git clone --recursive https://github.com/xxxx --depth=10