Git命令进阶—删除隐私 同步fork pull request 和merge

在开发的时候,为了测试数据,总会连接一些数据库、服务器、API之类,提交的时候就会不小心泄漏我们的SSH key、密码或者token之类的东西,所以有必要掌握 Git删除隐私。

删除隐私

错误的做法:如果发现不小心上传了隐私信息,修改或删除相应的文件

原因:git是可以查看历史提交的,所以只需要查看历史提交,相应的隐私信息还是会暴露

删厍?当我没说

git filter-branch

所有的历史记录中删除某个文件/文件夹 yourfilepath 就是需要删除的那个文件/文件夹

$ git filter-branch --force --index-filter 'git rm -r --cached --ignore-unmatch yourfilepath' --prune-empty --tag-name-filter cat -- --all

$ git push origin master --force

此时再看看 git log 应该是没有该文件的信息了。

请参考:https://docs.github.com/en/github/authenticating-to-github/removing-sensitive-data-from-a-repository

同步fork代码

  1. clone fork的分支到本地

    $ git clone git@github.com:*/flutter.git
    
  2. 增加源分支(被自己fork的项目)地址到自己git项目远程分支列表中,将原来的仓库命名为upstream

    $ git remote add upstream git@github.com:flutter/flutter.git
    
  3. 核实远程分支列表(optional)

    $ git remote -v
    origin git@github.com:*/flutter.git (fetch)
    origin git@github.com:*/flutter.git (push)
    upstream git@github.com:flutter/flutter.git (fetch)
    upstream git@github.com:flutter/flutter.git (push)
    
    ## 核实后,发现不如意,想删除,可以用 git remote remove name
    ## name 为远程分支的命名,如上面例子,可以删除 upstream
    ## git remote remove upstream
    ## 或者直接删除之前fork的原始分支 origin
    ## git remote remove origin (直接删除了原始分支后,再fork,
    ## 也能达到更新了最新代码的需求,后面的步骤就不用了。)
    
  4. fetch源分支的新版本到本地

    $ git fetch upstream
    
  5. 合并两个版本的代码

    $ git merge upstream/master
    
  6. 将合并后的代码push到github上自己的fork中去

    $ git push origin master
    
    ## 如果要强制:
    ## git push origin --force
    

pull request

提交更改

$ git add 'filename'
$ git commit -m 'text'
$ git push origin master

发起pull request

## 需要安装 Github CLI
$ gh pr create

Creating pull request for master into master in Twor/dotfile

! warning: could not compute title or body defaults: could not find any commits between master and master
? Title zh_CN ## 填写你提交的内容
? Body <Received> ## 说明
? What's next?  [Use arrows to move, type to filter]
> Submit
  Continue in browser
  Add metadata
  Cancel
// .....

merge

查看pr的状态

$ gh pr status

Relevant pull requests in Twor/dotfile

Current branch
  There is no pull request associated with [master]

Created by you
  #1  README.md [Catclerk:master]

Requesting a code review from you
  You have no pull requests to review

$ gh pr merge <ID> -m

Notice: authentication required
Press Enter to open github.com in your browser...
Authentication complete. Press Enter to continue...

✔ Merged pull request #1 (README.md)
✔ Deleted branch master

小坑: Github CLI 还不支持多用户,当你要切换用户时,去删除配置文件 .config/gh/hosts.yml 里面的内容 。

还可以查看issue等等其他操作

  • gh issue list
  • gh issue view //但是这会在浏览器打开

更多命令:https://cli.github.com/manual/