Git本地仓库设置

Git初始化一个目录,不想使用仓库提供的目录

初始化目录 git init

1
git init

修改配置文件

修改目录 .git/config ,在该文件中 [core] 添加如下

1
2
3
4
5
6
7
8
9
10
11
12
13
[submodule]
active = .
[remote "origin"]
url = <远程仓库URL>
fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
remote = origin
merge = refs/heads/master
[lfs]
repositoryformatversion = 0
[user]
name = <登入远程仓库名>
email =

如果远程仓库起源不是 origin ,假设是 origin1 修改如下部分

1
2
3
[remote "origin1"]
url = <远程仓库URL>
fetch = +refs/heads/*:refs/remotes/origin1/*

如果远程仓库是 mian 分支,同时判断是否需要修改起源,修改如下部分

1
2
3
[branch "main"]
remote = origin
merge = refs/heads/main

查看远程仓库配置

为了确认你的远程仓库设置是否正确,你可以使用以下命令来查看当前的远程仓库配置:

1
git remote -v

切换分支

1
git checkout master 

获取该分支没有的数据

假设你配置好了一个远程仓库,并且你想要提取更新的数据,你可以首先执行:

1
git fetch origin

以上命令告诉 Git 去获取它有你没有的数据,然后你可以执行:

1
git merge origin/master

以上命令将服务器上的任何更新(假设有人这时候推送到服务器了)合并到你的当前分支。

添加新的远程仓库

  1. 有设置远程仓库的链接,可以使用以下命令来添加:
1
git remote add origin 远程仓库的URL

这里origin是远程仓库的默认名称,你可以根据需要将其替换为其他名称,但origin是最常用的一个。

  1. 更改远程仓库的URL,可以使用以下命令:
1
git remote set-url origin 新的远程仓库URL
  1. 推送之前,你的本地分支是基于远程分支的最新状态,你可以先拉取远程分支的最新更改:
1
git pull origin master

删除提交记录

删除提交记录、删除提交中的文件,撤销提交的修改

删除最近一次提交(保留修改)

如果想 “删除” 最近一次提交记录,但保留工作区的修改(可以重新提交),用 git reset--soft 选项:

1
2
# 撤销最近1次提交,提交记录被删除,修改保留在工作区
git reset --soft HEAD~1
  • HEAD~1 表示 “上一个版本”,HEAD~2 表示上上个版本,以此类推。
  • 执行后,git log 会发现最近的提交已消失,但文件的修改还在,可重新修改后添加文件用 git commit 重新提交。

彻底删除最近一次提交(包括修改)

如果要删除历史中某个特定的提交(比如中间某次错误提交),需要用交互式变基(git rebase -i):

1
git log --oneline  # 显示简洁的提交历史

出现如下:

启动交互式变基:进入该界面后,类似于vim操作,但是有一些命令

1
git rebase -i 745dabe  # 基于目标提交的前一个版本开始变基

命令如下:

1
2
3
4
5
6
7
pick (p):保留提交(默认操作)
reword (r):保留提交但修改提交信息
edit (e):保留提交并暂停以修改内容(可拆分或修改文件)
squash (s):合并到前一个提交并保留两者信息
fixup (f):合并到前一个提交但丢弃当前信息
drop (d):删除提交
exec (x):执行自定义Shell命令

此时会打开编辑器,列出从 def456 到当前的所有提交,找到要删除的提交行,将行首的 pick 改为 drop(或直接删除该行),保存退出。

修改完成后按下esc,输入:wq保存退出,可以对比第三张与第四张图片,发现少了三个提交,正是我们删除的提交

若变基过程中出现冲突,解决冲突后执行:

1
2
git add .
git rebase --continue
  • 注意:此操作会改写历史,如果该提交已推送到远程仓库,需要强制推送(git push -f),但会影响其他协作者,需提前沟通。

删除提交中的某个文件(从历史中彻底移除)

如果某次提交误加入了敏感文件(如密码文件),想从所有历史提交中彻底删除该文件,可用 git filter-branch 或更高效的 bfg 工具:

方法 1:用 Git 自带的 filter-branch(较慢,适合小仓库)

1
# 删除所有历史中名为 "index.html" 的文件,这个文件前面可以添加具体目录位置
1
git filter-branch --force --index-filter "git rm --cached --ignore-unmatch index.html" --prune-empty --tag-name-filter cat -- --all

图一为待删除文件,执行指令后,所有文件都需要重新开始推送到仓库,强制推送(谨慎使用)使用 git push -f 强制推送,但会覆盖远程历史记录

方法 2:用 bfg 工具(更快,推荐)我没使用过,网上给出的教程

安装 BFG(需 Java 环境):

1
# 下载 BFG(官网:https://rtyley.github.io/bfg-repo-cleaner/)
1
wget https://repo1.maven.org/maven2/com/madgag/bfg/1.14.0/bfg-1.14.0.jar -O bfg.jar

执行删除:

1
# 删除所有历史中名为 "secret.txt" 的文件
1
java -jar bfg.jar --delete-files secret.txt 你的仓库路径

清理残留并推送:

1
git reflog expire --expire=now --all && git gc --prune=now --aggressive
1
git push -f  # 强制推送到远程(需谨慎,影响协作)

删除数据错误

强制同步远程仓库数据到本地,同时不推送本地修改到远程,可以使用以下命令组合,这会让本地分支完全匹配远程分支的状态:

1
2
3
4
5
6
# 先拉取远程最新数据,但不自动合并
git fetch --all

# 强制将当前分支重置为远程对应分支的状态
# 注意:将 <branch-name> 替换为你的分支名,通常是 main 或 master
git reset --hard origin/<branch-name>

说明:

  1. git fetch --all:从所有远程仓库获取最新数据,但不会修改本地工作区和分支
  2. git reset --hard origin/<branch-name>:强制将本地分支重置为远程分支的状态

⚠️ 警告:这个操作会彻底丢弃本地所有未提交的修改和已提交但未推送到远程的更改。执行前请确保这些本地更改不再需要,或已备份。

如果只想同步特定远程仓库而非所有,可以将 --all 改为远程仓库名(通常是 origin):

1
2
git fetch origin
git reset --hard origin/<branch-name>