北冥有鱼 记录生活点滴,分享学习心得

git

git常用功能总结

Posted by YuChen on May 17, 2020

1. 首次配置git

1
2
3
4
5
6
7
8
9
10
11
# 为计算机上的每个仓库设置 Git 用户名,查看配置使用 git config --global user.name
git config --global user.name "Mona Lisa"
# 为计算机上的每个仓库设置电子邮件地址,查看配置使用 git config --global user.email
git config --global user.email "email@example.com"

# 下面的两个操作将覆盖某一个仓库中的全局 Git 配置设置,但不会影响任何其他仓库
# 为一个仓库设置 Git 用户名,查看使用 git config user.name
git config user.name "Mona Lisa" 
# 为一个仓库设置电子邮件地址,查看使用 git config user.email
git config user.email "email@example.com" 

2. 设置github 代理

1
2
export https_proxy=http://x.x.x.x:p
export http_proxy=http://x.x.x.x:p

3. 关闭git的SSL验证

1
git config --global http.sslVerify false

4. git cherry-pick 流程

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# develop分支合入自己的pr后,进行如下操作:

# 1. 切换到develop主分支,并拉取最新代码
git checkout develop
git fetch upstream
git rebase upstream/develop

# 2. 获取待cherry-pick pr的squash commit id
git log

# 3. 切换到所需cherry-pick的目标分支
git fetch upstream release/1.7:fuse_bn_act
git checkout fuse_bn_act

# 4. 执行cherry-pick
git cherry-pick ${target_commit_id}

git log #(Optional)验证cherry-pick成功与否
git diff HEAD^ # (Optional)查看cherry-pick的内容

# 5. 提交cherry-pick代码
git push origin fuse_bn_act

5. cherry-pick一个PR

下面以pr链接 https://github.com/PaddlePaddle/Paddle/pull/24602 为例进行讲解。

完整实例如下:

1
2
3
git fetch upstream release/1.8:fix_amp
git checkout fix_amp
curl https://patch-diff.githubusercontent.com/raw/PaddlePaddle/Paddle/pull/24602.patch | git am

6. git tag用法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# 1. 查看本地分支标签
git tag / git tag -l / git tag --list

# 2. 查看远程所有标签
git ls-remote --tags

# 3. 给当前分支打标签
git tag v1.0.0

# 4. 给特定的某个commit版本打标签
git tag v1.0.0 039bf8b
# 4.1 打tag时添加注释
git tag v1.0.0 039bf8b -m "add tags information"

# 5. 删除本地某个标签
git tag -d v1.0.0 / git tag --delete v1.0.0

# 6. 删除远程的某个标签
git push origin :v1.0.0 / git push origin -d v1.0.0

# 7. 将本地标签一次性推送到远程
git push origin --tags

# 8. 将本地某个特定标签推送到远程
git push origin v1.0.0

# 9. 查看某一个标签的提交信息
git show v1.0.0

7. 创建新分支

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 基于当前分支创建新分支
git checkout -b newBranch

# 根据某个commit创建本地分支
git checkout db5d3131 -b newBranch

# 根据某个tag创建本地分支
git checkout v2.4.1 -b newBranch

# 根据某个远程分支创建本地分支方法1(自动切换到新分支)
git checkout remotes/origin/r2.2 -b newBranch

# 根据某个远程分支创建本地分支方法2(不会自动切换到新分支)
git fetch upstream release/1.7:newBranch

8. 删除本地/远程分支

  • 删除本地分支

    1
    2
    3
    4
    5
    
    # 切换到 develop 分支
    git checkout develop
      
    # 删除 my-branch 分支
    git branch -D my-branch
    
  • 删除远程分支

    1
    
    git push origin :my-branch
    

9. 减少commit数到方法

  • 使用git commit --amend补充上次的commit。

  • 本地进行squash commits。

    1
    2
    3
    4
    
    # Squash commits locally with
    git rebase -i origin/master~4 master
    # then force push with
    git push origin +master
    

10. --force 和 + 的不同之处

引用自 git push 文档:

Note that --force applies to all the refs that are pushed, hence using it with push.default set to matching or with multiple push destinations configured with remote.*.push may overwrite refs other than the current branch (including local refs that are strictly behind their remote counterpart). To force a push to only one branch, use a + in front of the refspec to push (e.g git push origin +master to force a push to the master branch).

11. 将PR与Issue相关联

若PR解决了某个Issue问题,可在该PR的第一个评论框中加上:fix #issue_number,这样当该PR被合并后,会自动关闭对应的Issue。关键词包括:close, closes, closed, fix, fixes, fixed, resolve, resolves, resolved,可自行选择合适的词汇。

12. 使用二分法和git定位引入bug的PR

详见二分法调试脚本

13. git diff中文乱码

1
2
3
4
5
6
7
8
9
10
# 显示status编码
git config --global core.quotepath false
# 图形界面编码
git config --global gui.encoding utf-8
# 提交信息编码
git config --global i18n.commit.encoding utf-8
# 输出log编码
git config --global i18n.logoutputencoding utf-8
# git log默认使用less分页,对less命令进行utf-8编码
export LESSCHARSET=utf-8

14. git代理设置

  • 根据socks端口配置git代理,所需执行命令如下:
    1
    2
    
    git config --global http.proxy socks5://127.0.0.1:port
    git config --global http.https://github.com.proxy socks5://127.0.0.1:port
    
  • 配置好代理后,建议也进行如下两个配置:
    1
    2
    
    git config --global http.version HTTP/1.1
    git config --global http.postBuffer 524288000
    
  • 使用git config --global --list查看代理是否配置成功
  • 取消git代理设置,所需执行命令如下:
    1
    2
    
    git config --global --unset http.proxy
    git config --global --unset http.https://github.com.proxy
    

参考资料





更多文章