>  기사  >  개발 도구  >  Git에서 기록 레코드를 삭제하도록 도와주세요.

Git에서 기록 레코드를 삭제하도록 도와주세요.

PHPz
PHPz원래의
2023-04-03 09:18:261647검색

프로젝트 관리를 위해 Git을 사용하는 개발자는 기록 기록을 삭제해야 하는 상황에 자주 직면합니다. 예를 들어 민감한 정보가 제출되거나 법에 따라 특정 콘텐츠를 삭제해야 하는 경우가 있습니다. 하지만 Git은 모든 수정 사항을 기록하도록 설계되었기 때문에 기록을 삭제하는 것은 쉬운 일이 아닙니다. 이 기사에서는 Git에서 기록 레코드를 삭제하는 데 도움이 되는 몇 가지 방법을 소개합니다.

  1. Git 명령 사용

Git 명령에서 git Resetgit push를 사용하여 기록 기록을 삭제할 수 있습니다. 먼저 git log 명령을 사용하여 기록을 확인하세요. git resetgit push 删除历史记录。首先使用 git log 命令查看历史记录。

$ git log --oneline

这会列出当前分支上的所有提交记录,每个记录都有一个 SHA-1 标识符(第一列)和一个消息(后面的列)。

然后,使用 git reset 命令将当前分支重置到要删除的提交之前。例如,如果要删除最近的三个提交记录,则可以使用:

$ git reset HEAD~3

这样就将当前分支重置到了前三个提交记录之处,历史记录中的最后三个提交会被删除。

最后,使用 git push -f 命令强制推送到远程仓库,覆盖历史记录。这会使其他人在拉取更新时遇到问题,因此需要确保所有有权限的人知道此操作。

$ git push -f

使用此方法删除历史记录时,我们建议在执行之前备份代码库,以防万一。

  1. 使用 BFG Repo-Cleaner

另一个强大的工具是 BFG Repo-Cleaner。它是一个 Java 程序,可以在本地运行,删除 Git 仓库中的历史记录。

首先,安装 BFG Repo-Cleaner。可以使用 Homebrew 在 Mac 上安装:

$ brew install bfg

或者从官网下载并安装到计算机上:

$ wget http://search.maven.org/remotecontent?filepath=com/madgag/bfg/1.14.0/bfg-1.14.0.jar

然后,在 Git 仓库的根目录下运行以下命令(请确保在删除前备份代码库):

$ java -jar /path/to/bfg.jar --delete-files filename.txt.git
$ git reflog expire --expire=now --all && git gc --prune=now --aggressive
$ git push

其中,filename.txt.git 是包含要删除内容的文件名(例如 .git-credentials)。这里使用 BFG Repo-Cleaner 删除提交历史、refs 和 tags,然后重新压缩存储库。

需要注意的是,BFG Repo-Cleaner 可以删除仓库中的任何内容,因此需要小心操作。

  1. 创建一个新的 Git 仓库

最后一种方法是创建一个新的 Git 仓库,只包含要保留的提交记录。这种方法需要一些手动操作,但可以保留仓库的完整性,并且不会影响其他人在仓库上的工作。

首先,在原始 Git 仓库的根目录下创建一个新目录,用于保存新的 Git 仓库:

$ mkdir newrepo && cd newrepo

然后,将原始 Git 仓库的选择性提交记录复制到新目录中:

$ git clone /path/to/oldrepo --depth 1
$ cd oldrepo && git log --oneline

这样就可以将原始 Git 仓库的最后一个提交记录复制到新的 Git 仓库中。更新新仓库的远程 URL,然后将其推送到远程仓库。

$ git remote set-url origin git://new/repo.git
$ git push -u origin master

这样就创建了一个新的 Git 仓库,只包含选择性提交的记录。

总结

在 Git 中,删除历史记录是一个敏感的问题,需要小心谨慎操作。使用 git resetrrreee

여기에는 현재 브랜치의 모든 커밋 레코드가 나열되며 각 레코드에는 SHA-1 식별자(첫 번째 열)와 메시지(나중에 열)가 포함됩니다. 🎜🎜그런 다음 git Reset 명령을 사용하여 현재 브랜치를 삭제하려는 커밋 이전으로 재설정하세요. 예를 들어, 마지막 세 개의 커밋 레코드를 삭제하려면 다음을 사용할 수 있습니다. 🎜rrreee🎜 이렇게 하면 현재 브랜치를 처음 세 개의 커밋 레코드로 재설정하고 기록의 마지막 세 개의 커밋이 삭제됩니다. 🎜🎜마지막으로 git push -f 명령을 사용하여 원격 저장소에 강제로 푸시하고 기록을 덮어씁니다. 이로 인해 다른 사람들이 업데이트를 가져오는 데 문제가 발생할 수 있으므로 권한이 있는 모든 사람이 이에 대해 알고 있는지 확인해야 합니다. 🎜rrreee🎜이 방법으로 히스토리를 삭제할 경우 만일의 경우를 대비해 실행 전 코드베이스를 백업해 두는 것이 좋습니다. 🎜
    🎜BFG Repo-Cleaner 사용🎜🎜🎜또 다른 강력한 도구는 BFG Repo-Cleaner입니다. Git 저장소의 기록을 삭제하기 위해 로컬로 실행할 수 있는 Java 프로그램입니다. 🎜🎜먼저 BFG Repo-Cleaner를 설치합니다. Homebrew를 사용하여 Mac에 설치할 수 있습니다: 🎜rrreee🎜 또는 공식 웹사이트에서 다운로드하여 컴퓨터에 설치합니다: 🎜rrreee🎜 그런 다음 Git 저장소의 루트 디렉터리에서 다음 명령을 실행합니다. 삭제하기 전에 코드 베이스를 업하세요): 🎜rrreee🎜 여기서 filename.txt.git는 삭제할 콘텐츠가 포함된 파일의 이름입니다(예: .git-credentials) >). 여기서 BFG Repo-Cleaner는 커밋 기록, 참조 및 태그를 제거한 다음 저장소를 다시 압축하는 데 사용됩니다. 🎜🎜BFG Repo-Cleaner는 저장소의 모든 콘텐츠를 삭제할 수 있으므로 주의해서 작동해야 합니다. 🎜
      🎜새 Git 저장소 만들기🎜🎜🎜마지막 방법은 보관하려는 커밋만 포함된 새 Git 저장소를 만드는 것입니다. 이 방법을 사용하려면 약간의 수동 작업이 필요하지만 저장소의 무결성이 유지되며 저장소에 대한 다른 사람의 작업에는 영향을 미치지 않습니다. 🎜🎜먼저 원본 Git 저장소의 루트 디렉터리 아래에 새 디렉터리를 만들어 새 Git 저장소를 저장합니다. 🎜rrreee🎜그런 다음 원본 Git 저장소의 선택적 커밋 레코드를 새 디렉터리에 복사합니다. 🎜rrreee🎜이것이 바로 그것입니다. 원본 Git 리포지토리의 마지막 커밋 레코드를 새 Git 리포지토리에 복사할 수 있습니다. 새 저장소의 원격 URL을 업데이트하고 원격 저장소에 푸시합니다. 🎜rrreee🎜선택적으로 커밋된 레코드만 포함하는 새로운 Git 저장소가 생성됩니다. 🎜🎜요약🎜🎜Git에서 기록 삭제는 민감한 문제이므로 주의해서 다뤄야 합니다. 최근 커밋 기록을 삭제하려면 git Reset 명령을 사용하세요. BFG Repo-Cleaner를 사용하여 특정 파일이나 폴더의 커밋 기록을 삭제합니다. 마지막으로, 새로운 Git 저장소를 생성하여 선택적으로 커밋 기록을 보존할 수 있습니다. 어느 쪽이든 만일의 경우를 대비해 코드 베이스를 삭제하기 전에 백업해야 합니다. 🎜

위 내용은 Git에서 기록 레코드를 삭제하도록 도와주세요.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.