Luo Hao

Git实际问题

Rehoni / 2019-10-11


查看和修改当前project的用户名、密码

git config user.name & user.email

本地已创建分支dev,要推送到远程分支

在远程分支中创建一个dev,利用 git push origin dev:dev 推送到远程,这样有一个坏处,如果未设置:one:中的user,则会以本地计算机或global中的信息推送过去。

故可以考虑commit之后直接push,git会提醒你push没有上游,采用git branch -u origin/dev来设置本地dev的上游为远程的origin/dev。

合并分支到master上

https://blog.csdn.net/boysky0015/article/details/78185879

关于记住密码、多项目不同用户

git config credential.helper store

TODO: 多项目不同用户

Changing the Git history of your repository using a script

  1. 打开Git bash

  2. 创建存储库的全新裸克隆

    git clone --bare https://github.com/user/repo.git
    cd repo.git
    
  3. 复制粘贴脚本,替换变量

    1. OLD_EMAIL
    2. CORRECT_NAME
    3. CORRECT_EMAIL
    #!/bin/sh
    
    git filter-branch --env-filter '
    
    OLD_EMAIL="your-old-email@example.com"
    CORRECT_NAME="Your Correct Name"
    CORRECT_EMAIL="your-correct-email@example.com"
    
    if [ "$GIT_COMMITTER_EMAIL" = "$OLD_EMAIL" ]
    then
        export GIT_COMMITTER_NAME="$CORRECT_NAME"
        export GIT_COMMITTER_EMAIL="$CORRECT_EMAIL"
    fi
    if [ "$GIT_AUTHOR_EMAIL" = "$OLD_EMAIL" ]
    then
        export GIT_AUTHOR_NAME="$CORRECT_NAME"
        export GIT_AUTHOR_EMAIL="$CORRECT_EMAIL"
    fi
    ' --tag-name-filter cat -- --branches --tags
    
  4. 执行脚本

  5. 查看新的Git历史记录是否有错误。

  6. 将更正的历史记录推送到GitHub:

    git push --force --tags origin 'refs/heads/*'
    
  7. 清理临时克隆

    cd ..
    rm -rf repo.git
    

拉取远程分支代码

git clonemaster分支的代码下来,但是需要拉取其他远程分支的代码,采用git branch -r查看远程分支列表,如想要拉取,则可以通过git branch -t origin/dev或者git checkout -b dev origin/dev拉取同远程分支名同名的分支到本地。

合并仓库并且保留commit log message记录

  1. 将repo1作为远程仓库,添加到repo2中,设置别名为other
  2. 从repo1仓库中抓取数据到本仓库
  3. 将repo1仓库中抓取的master分支作为新分支checkout到本地,新分支命名为repo1
  4. 切换为repo2的master分支
  5. 将repo1合并入master分支

注意:产生的文件冲突需要解决提交后才能merge,merge时需要添加参数--allow-unrelated-histories

  git remote add other ../repo1/
  git fetch other
  git checkout -b repo1 other/master
  git checkout master
  git merge repo1 --allow-unrelated-histories

递归子模块

https://www.cnblogs.com/hexiaobao/p/8134829.html

https://www.dokyme.cn/index.php/2017/09/04/git/

分支的创建和合并 (十分详细)

https://git-scm.com/book/zh/v1/Git-%E5%88%86%E6%94%AF-%E5%88%86%E6%94%AF%E7%9A%84%E6%96%B0%E5%BB%BA%E4%B8%8E%E5%90%88%E5%B9%B6

https://www.dokyme.cn/index.php/2017/09/07/git-2/

取消一个目录的git化

rm -rf .git

将git分支branch合并到主干master上https://blog.csdn.net/sinat_39150454/article/details/77816179

修改git的config配置http://daemon369.github.io/git/2015/03/11/setting-email-in-git

Git bash配置代理

同一个 Github 账号之多台电脑间协同开发

https://blog.csdn.net/u013477973/article/details/80820882

Git bash快捷键

https://blog.csdn.net/xianghongai/article/details/79029357

Git变基操作

https://git-scm.com/book/zh/v2/Git-%E5%88%86%E6%94%AF-%E5%8F%98%E5%9F%BA

统计git提交次数+区域时间内提交次数+提交行数

统计git提交次数: 所有人的所有提交次数,会展示所有的提交人 提交次数详情。

git log | grep "^Author: " | awk '{print $2}' | sort | uniq -c | sort -k1,1nr

统计时间内提交次数。

git log --author=yourname --since="2017-08-01" --no-merges | grep -e 'commit [a-zA-Z0-9]*' | wc -l

统计提交行数:根据1展示出详情,可以填入username。将展示该用户增加行数,删减行数,剩余行数。

git log --author="username" --pretty=tformat: --numstat | awk '{ add += $1; subs += $2; loc += $1 - $2 } END { printf "added lines: %s, removed lines: %s, total lines: %s\n", add, subs, loc }' -