gpt4 book ai didi

git - 过滤器分支后相同提交的不同 SHA,当我 merge 到 dev 或 master 时它不会失败吗?我怎样才能防止这种情况发生?

转载 作者:行者123 更新时间:2023-12-05 02:53:09 25 4
gpt4 key购买 nike

我不小心将一个大文件添加到特定分支上的 git 存储库中,不得不更改该分支的提交历史记录以删除该文件:

git filter-branch -f --index-filter "git rm -rf --cached --ignore-unmatch path_to_file" HEAD

现在,我看到运行命令的分支上的提交有不同的 SHA,我对此很满意,因为 repo 是相当新的,目前只有我在使用它。但是,当我检查 master 分支和另一个 dev 分支时,我发现同一提交的 SHA 不同。当我 merge 到 dev 或 master 时(我还没有这样做)它不会失败吗?我该如何纠正这个问题?

执行的一系列git命令:

git checkout -b move_branch master

add files from location1 commit
add files from location2 commit
add files from location3 commit
merge the master branch of an older repo which was added as a remote introducing some files including the big file commit

git filter-branch -f --index-filter "git rm -rf --cached --ignore-unmatch path_to_file" HEAD

add files from location5 commit
add files from location6 commit


A--B--C master
\
X--Y--Z--A--B--C--D--E move_branch (Z is the commit with big file)

X--Y--I--J--K--L--M--N move_branch (after filter-branch)

最佳答案

将您的分支 merge 到 master 中不会失败。它也不会摆脱大文件。您实际上需要在 master 分支上运行此命令并强制推送此更改。由于这会重写存储库的历史记录,因此您需要先与您的团队进行沟通和计划。 这是破坏性的行为。

如果您一个人在处理此存储库:

这是简单的情况。只需在 master 上硬重置新提交即可。

git checkout -b fix_commits master
git filter-branch -f --index-filter "git rm -rf --cached --ignore-unmatch path_to_file" HEAD
git checkout master
git reset --hard fix_commits

# Push master if you need to
git push origin HEAD --force

如果多人在这个 repo 上工作

您最好的做法是:

  1. 从当前的主分支创建一个新分支,并推送它。

    git checkout -b master_before_file_purge
    git push origin -u HEAD
  2. 创建一个新分支来清除大文件,并重写它的历史。推这个分支。

    git checkout -b purge_large_files master
    git filter-branch -f --index-filter "git rm -rf --cached --ignore-unmatch path_to_file" HEAD
    git push origin -u HEAD
  3. 与每个队友单独合作,将他们的私有(private)树 rebase 到 purge_large_files

  4. 与团队合作,将基于 master 的共享分支 rebase 到 purge_large_files(您可能需要在这些分支上 git push origin HEAD --force分支机构)

  5. 对 master 进行硬重置以purge_large_files:

    git checkout master
    git reset --hard purge_large_files
    git push origin HEAD --force
  6. 与队友合作,确保他们可以毫无困难地 pull master。

  7. 当时间过去后,删除“before”分支:

    git checkout master_before_file_purge
    git push origin --delete master_before_file_purge

您和您的团队成员将需要在本地运行 git gc 以在再次从源中提取后清除那些孤立的提交对象。

关于git - 过滤器分支后相同提交的不同 SHA,当我 merge 到 dev 或 master 时它不会失败吗?我怎样才能防止这种情况发生?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62281209/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com