lbwa / set.sh-stale

✍A place which is used to share my programming experiences in Chinese. 一个分享代码经历的地方。
https://set.sh
0 stars 0 forks source link

Git collections #16

Open lbwa opened 6 years ago

lbwa commented 6 years ago

Steps

以下介绍如何删除 git 本地和远程仓库中的误上传的敏感文件及其 commit 记录。

# 在仓库根目录下
cd <Your repo name>

# 1. 删除指定文件(或文件夹)在 commit 中的记录,本质是重写了仓库所有相关 commit 历史记录。
git filter-branch --force --index-filter \
'git rm --cached --ignore-unmatch _PATH-TO-YOUR-FILE-WITH-SENSITIVE-DATA_' \
--prune-empty --tag-name-filter cat -- --all

# 2. 强制同步远程仓库为重建后的 commit 历史记录
git push origin --force --all

# 3. 强制同步远程仓库的 tags,删除 tags 中的敏感数据记录
git push origin --force --tags

Extension

# 删除本地名为 tag name 的标签
git tag -d <tag name>

# 将本地被删除的标签同步至远程仓库,即以空标签覆盖远程记录,以达到删除远程标签的目的
git push origin :refs/tags/<tag name>
# 或者
git push --delete origin <tag name>

Reference

Github help

Git official handbook

How to delete a git remote tag ?

lbwa commented 5 years ago

撤销上次 commit

git reset HEAD~1

该操作的本质是仅仅移动指针位置。

git reset --hard HEAD~1

该操作的本质不仅移动了指针位置,还将之间指针的位置删除。

Reference

lbwa commented 5 years ago

fork repo

以下操作发生在 fork 一个仓库,并从自己的仓库将 fork 的仓库 clone 至本地后。

命名自己的 repo 远程主机名

git remote add <针对 fork 的仓库推荐非 origin 名> <自己的远程 repo 地址>
# eg. git remote add me git@github.com:lbwa/vuepress.git

展示远程 repo 地址

git remote -v
# 推荐将 fork 的 repo 远程地址命名为非 origin 值,保留 origin 为源 fork 的 repo 的地址
# me      git@github.com:lbwa/vuepress.git (fetch)
# me      git@github.com:lbwa/vuepress.git (push)
# origin  git@github.com:vuejs/vuepress.git (fetch)
# origin  git@github.com:vuejs/vuepress.git (push)

追踪 fork 仓库至最新 commit

# 获取源 `fork` 的 `repo` 的最新 `commit log`
git fetch <源远程主机名>
# git fetch origin

# 将自己本地分支与远程源 `fork` 的 `repo` 的远程目标分支合并
git merge <源远程主机名>/<源远程分支>
# eg. git merge origin/master

git pull 不同的是,git fetch 仅仅取得最新 commit log,而不执行合并;git pull 则是不仅取得最新 commit log,而且执行分支合并。

Further reading