标签: git-rewrite-history

git rebase - 'edit'和'reword'之间的区别是什么

什么之间的区别edit,并reword当你做一个git的变基?

我正在通过一些文档说这个:

Replace pick with:
- edit to mark a commit for amending.
- reword to change the log message.
Run Code Online (Sandbox Code Playgroud)

git git-rebase git-rewrite-history

35
推荐指数
2
解决办法
6898
查看次数

使用重写的Git repo历史记录更新开发团队,删除大文件

我有一个git repo,里面有一些非常大的二进制文件.我不再需要它们,我不关心是否能够检查早期提交的文件.因此,为了减少repo大小,我想从历史中删除二进制文件.

在网络搜索之后,我得出结论,我最好的(仅?)选项是使用git-filter-branch:

git filter-branch --index-filter 'git rm --cached --ignore-unmatch big_1.zip big_2.zip etc.zip' HEAD
Run Code Online (Sandbox Code Playgroud)

到目前为止,这似乎是一个好方法吗?

假设答案是肯定的,我还有另外一个问题需要解决.该git的手册中有这样的警告:

警告!重写的历史将具有所有对象的不同对象名称,并且不会与原始分支会聚.您将无法在原始分支的顶部轻松推送和分发重写的分支.如果您不知道完整的含义,请不要使用此命令,并且无论如何都要避免使用它,如果简单的单个提交就足以解决您的问题.(有关重写已发布历史记录的详细信息,请参阅git-rebase(1)中的"从上游重新恢复"部分.)

我们的服务器上有一个远程仓库.每个开发人员都会推动并从中拉出.基于上面的警告(以及我对git-filter-branch工作原理的理解),我认为我不能git-filter-branch在本地副本上运行然后推送更改.

所以,我暂时计划完成以下步骤:

  1. 告诉我的所有开发人员提交,推送和停止工作.
  2. 登录服务器并在中央存储库上运行过滤器.
  3. 让所有人删除旧副本并从服务器再次克隆.

这听起来不错吗?这是最好的解决方案吗?

git project-planning git-filter-branch git-rewrite-history

32
推荐指数
3
解决办法
1万
查看次数

32
推荐指数
3
解决办法
1万
查看次数

修改合并前发出的Git提交消息

在合并到远程分支之前,我提交了一些测试代码.这次合并产生了很多冲突,并且花了一些时间才对.所以我的历史看起来像这样:

7ab562c Merge from remote branch
... whole load of commits brought across from the remote branch...
f3e71c2 Temporary TESTING COMMIT
Run Code Online (Sandbox Code Playgroud)

测试代码很好,我真的只想更改提交消息.通常情况下我会继续前进git rebase -i f3e71c2^(因为这还没有被推动),但是我被一位同事告知,这会搞砸合并.我真的不想搞砸合并:)

我的同事是对的吗?如果是这样,我能做些什么,或者我只需要忍受这段历史?

git git-rewrite-history

24
推荐指数
1
解决办法
9158
查看次数

如何从git存储库中删除旧版本的媒体文件

我有一个Git存储库,里面有几个巨大的媒体文件(图像和音频文件).这些媒体文件的几个版本已连续提交给回购.这些文件是相同资产的连续精炼版本,并且它们具有相同的名称.

我想只保留Git存储库中的最新版本,因为它变得太大了.
最简单的方法是什么?
如何将这些更改正确地传播到上游存储库?

git git-rewrite-history

23
推荐指数
3
解决办法
2万
查看次数

从git repo中删除'.git'目录?

我正在尝试将git repo从Kiln迁移到Github.我可以添加新的遥控器,但是当我尝试将master推送到新的遥控器时,我收到以下错误:

Counting objects: 8691, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (3000/3000), done.
remote: error: object a9ee490ac00987835de30bdbc851da5e8d45d28b:contains '.git'
remote: fatal: Error in object
error: pack-objects died of signal 13
error: failed to push some refs to 'git@github.com:Account/repo.git'
Run Code Online (Sandbox Code Playgroud)

Commit中a9ee490ac00987835de30bdbc851da5e8d45d28b包含以下文件:

.git/
CHANGELOG.md
JSONKit.h
JSONKit.m
README.md
Run Code Online (Sandbox Code Playgroud)

显然有人在过去使用hg,在子目录中检查完整的git仓库.

我想完全杀死该目录,但是从git历史记录中删除该文件时遇到问题.

推送git repo的答案失败了,错误:包含'.git'没有帮助,因为我将repo作为git repo,而不是mercurial repo.

我试过了git filter-branch --index-filter 'git rm -r --cached --ignore-unmatch .git',但是我得到了错误:

Rewrite 7dbd0970d6c79215d11994b4a9b8091b2e954cfb (326/442)error: Invalid path 'Account/Libraries/ShareKit/Submodules/JSONKit/.git/HEAD'
error: Invalid …
Run Code Online (Sandbox Code Playgroud)

git mercurial git-filter-branch git-rewrite-history

22
推荐指数
2
解决办法
4143
查看次数

如何删除旧的git历史记录?

我有很多很多(2000+)提交的git存储库,例如:

                 l-- m -- n   
                /
a -- b -- c -- d -- e -- f -- g -- h -- i -- j -- k
                     \
                      x -- y -- z
Run Code Online (Sandbox Code Playgroud)

我想截断旧的日志历史记录 - 从(例如)commit"f"开始删除日志历史记录中的所有提交,但作为存储库的开头.

怎么做?

git git-rewrite-history

19
推荐指数
2
解决办法
1万
查看次数

从特定路径中删除文件名?

我一直在玩BFG Repo-Cleaner工具,以便通过从目录层次中的几个位置删除(临时/大)文件来清理git repo的历史...

即/root/test/a.txt /root/test2/a.txt

现在我想删除'test/a.txt'的所有引用,但保留 /test2/a.txt版本..

有没有办法用BFG彻底清除它?(如https://help.github.com/articles/remove-sensitive-data中所述)

由于回购具有相当大的历史(10K提交)BFG真的是很多比迄今为止我见过的其它方法速度快...

git-rewrite-history

16
推荐指数
1
解决办法
5372
查看次数

如何将Git存储库组合成线性历史记录?

我有两个Git仓库R1R2,包含从产品发展的两个时期承诺:1995 - 1997年和1999年至2013年.(我通过将现有的RCS和CVS存储库转换为Git来创建它们.)

R1:
A---B---C---D

R2:
K---L---M---N
Run Code Online (Sandbox Code Playgroud)

如何将两个存储库合并为一个包含项目线性历史的准确视图的存储库?

A---B---C---D---K---L---M---N
Run Code Online (Sandbox Code Playgroud)

请注意,之间R1R2文件已添加,删除和重命名.

我尝试创建一个空的存储库,然后将它们的内容合并到它上面.

git remote add R1 /vol/R1.git
git fetch R1

git remote add R2 /vol/R2.git
git fetch R2

git merge --strategy=recursive --strategy-option=theirs R1
git merge --strategy=recursive --strategy-option=theirs R2
Run Code Online (Sandbox Code Playgroud)

但是,这会留下最新的文件D,但不是修订版K.我可以制作一个合成提交来删除合并之间的额外文件,但这对我来说似乎不优雅.此外,通过这种方法,最终结果包含实际上没有发生的合并.

git merge git-rewrite-history git-branch-sculpting

15
推荐指数
1
解决办法
1228
查看次数

在新克隆上使用 git-filter-repo 从 git 历史记录中删除文件

我正在按照此答案从 git 历史记录中删除包含凭据的单个文件。我有 git 2.35.1 和filter-repo 22826b5a68b6。我需要的命令显然是:

\n
git-filter-repo --path auth.json --invert-paths\n
Run Code Online (Sandbox Code Playgroud)\n

如果我尝试将此应用到我的工作存储库,我会收到此错误:

\n
Aborting: Refusing to destructively overwrite repo history since\nthis does not look like a fresh clone.\n(expected freshly packed repo)\n
Run Code Online (Sandbox Code Playgroud)\n

因此,我使用 检查了一个新副本git clone,并且该命令成功运行:

\n
Parsed 861 commits\nNew history written in 0.69 seconds; now repacking/cleaning...\nRepacking your repo and cleaning out old unneeded objects\nHEAD is now at 7212384 Update app.css\nEnumerating objects: 8203, done.\nCounting objects: 100% (8203/8203), done.\nDelta compression using up to 24 threads\nCompressing objects: …
Run Code Online (Sandbox Code Playgroud)

git repository git-rewrite-history

14
推荐指数
1
解决办法
9299
查看次数