Skip to content
This repository has been archived by the owner on Feb 9, 2021. It is now read-only.

Git collections #16

Open
lbwa opened this issue Jun 18, 2018 · 2 comments
Open

Git collections #16

lbwa opened this issue Jun 18, 2018 · 2 comments
Labels
various means anything else

Comments

@lbwa
Copy link
Owner

lbwa commented Jun 18, 2018

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 lbwa assigned lbwa and unassigned lbwa Jun 18, 2018
@lbwa lbwa added the various means anything else label Jun 18, 2018
@lbwa lbwa changed the title 删除 git 敏感记录 Git collections Aug 9, 2018
@lbwa
Copy link
Owner Author

lbwa commented Aug 9, 2018

撤销上次 commit

  • 撤销上次提交并恢复到 commit 操作前的代码状态,即此时代码已经修改但未 git add .
git reset HEAD~1

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

  • 完全撤销上次 commit,即之前 commit 的所有代码也一并重置
git reset --hard HEAD~1

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

Reference

@lbwa
Copy link
Owner Author

lbwa commented Aug 13, 2018

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

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
various means anything else
Projects
None yet
Development

No branches or pull requests

1 participant