git 저장소 제출 역사의 저자 정보를 어떻게 변경합니까

업무와 관련된 프로젝트와 개인 프로젝트를 처리할 때, 통상적으로git 증빙서류 사이를 왔다 갔다 교환하여 해당하는 저장소로 전송해야 한다...때로는 잊어버릴 때가 있다.🤷‍♂️
이 문서에서는 저장소 기록에 제출된 작성자 이름/이메일을 신속하게 변경하고 잘못된 제출자 (또는 잘못된 작성자 상세 정보) 를 정확한 정보로 대체하는 다양한 옵션을 제공합니다.우선, 우리는 더욱 안전한 편집 제출 방법을 토론할 것이다. 마지막으로, 나는 하나를 공유할 것이다. 이것은 당신을 위해 무거운 일을 완성할 것이다.

사용자 정의 스크립트 뭐 공부 해요?


작성자 정보를 제출하는 방식을 변경하는 방법은 사용자의 상황에 따라 다릅니다.
  • 제출하기 전에 작성자 정보를 변경해야 합니까?
  • 제출은 로컬입니까 아니면 원격입니까?
  • 제출을 몇 번 변경해야 합니까?우리는 많은 제출(또는 심지어 모든 제출)을 바꾸는 것에 대해 이야기하고 있지 않습니까?
  • 제출 전에 작성자 정보 변경


    만약 제출하기 전에 신분을 변경해야 한다면, 세 가지 방법으로 정보를 업데이트할 수 있다.이 절에 열거된 어떤 방법도 이전의 제출에 영향을 주지 않고 이 시점 이후에 진행된 제출에만 영향을 미친다.

    변경 작성자 세부 정보는 다음에만 제출


    다음 제출을 위해 작성자 전자 메일/이름을 변경하기만 하면 제출 메시지에서 --author 플래그와 필요한 정보를 전달할 수 있습니다.
    git commit --author="Marty McFly <[email protected]>" --message="Changing text on prom banner"
    

    현재 저장소의 작성자 정보 변경


    현재 저장소에서 향후 제출될 작성자 정보를 모두 변경하려면 git config 설정을 업데이트하여 여기에만 적용할 수 있습니다.
    # Navigate to repository
    cd path/to/repository
    
    git config user.name "Marty McFly"
    git config user.email "[email protected]"
    

    작성자 이름 및 이메일 전체 변경


    컴퓨터에서 사용하는 작성자 정보를 글로벌 수준(예: 모든 저장소)에서 업데이트하려면 --global 플래그를 추가합니다.
    git config --global user.name "Marty McFly"
    git config --global user.email "[email protected]"
    

    이전에 제출한 기록 편집(보안)


    그래서 제출한 작가 정보를 편집해야 합니까?우선, 역사 기록을 편집하여 제출하는 안전 (r) 방법을 살펴보자.

    마지막 제출 편집


    마지막 제출만 편집하면 --amend 로고가 친구입니다.
    git commit --amend --author="Marty McFly <[email protected]>"
    

    상호 작용 초기화를 사용하여 여러 커밋 편집


    제출 기록을 편집하는 가장 간단한 방법은git의 상호작용 rebase 명령을 사용하는 것입니다.
    먼저 편집할 해시를 찾기 전에 제출한 해시를 찾아서 리베이스 명령에 전달합니다.
    # Passing the last "good" commit hash
    git rebase -i 9b4351e2
    
    그런 다음 수정할 각 커밋을 edit 키워드로 표시합니다.
    edit 9b4351e2 Changing text on prom banner
    edit 4d0f36c0 Setting flux capacitor to 1955
    pick f4b39b80 Adding plutonium
    
    Git 는 필요한 경우 편집하거나 편집하지 않고 각 커밋을 완료하도록 안내합니다.
    Stopped at 9b4351e2... Changing text on prom banner
    You can amend the commit now, with
    
        git commit --amend
    
    Once you are satisfied with your changes, run
    
        git rebase --continue
    
    각 커밋을 실행하고 편집합니다.
    git commit --amend --author="Marty McFly <[email protected]>" --no-edit
    
    git rebase --continue
    

    git 필터 분기 스크립트를 사용하여 모든 기록을 편집합니다 (위험 영역)


    나는gitfilter-branch 명령을 사용자 정의 스크립트로 실현했다. 상호작용 모드에서 사용할 수도 있고 옵션 로고를 통해 수동적으로 사용할 수도 있다.

    WARNING
    This action is destructive to your repository's history. If you're collaborating on a repository with others, it's considered bad practice to rewrite published history.

    You should only rewrite history if absolutely necessary.

    Running this script rewrites history for all repository collaborators. After completing these steps, any person with forks or clones must fetch the rewritten history and rebase any local changes into the rewritten history.


    설명서


  • , 액세스하기 쉬운 위치에 저장합니다.

    스크립트 다운로드 / 아담드 하빈


    잘못된 작성자 정보를 해결하기 위해git 저장소의 제출 기록을 업데이트합니다.


  • 스크립트 파일의 사용 권한을 변경하여 다음을 수행할 수 있습니다.
  • chmod +x changeauthor.sh
    
  • 잘못된 제출 내역이 있는 저장소로 이동
  • cd path/to/repo
    
    또는 전송 change-git-author --git-dir 로고를 통해 어디서든 실행할 수 있습니다.
  • 스크립트 실행 (로고 포함 또는 제외)
  • ../path/to/changeauthor.sh --old-email [email protected] --new-email [email protected] --name "Marty McFly" --remote origin
    
    실행할 수 있는 권한이 변경되지 않으면 다음 중 하나를 사용하여 스크립트를 호출할 수도 있습니다.
    bash ./changeauthor.sh [OPTIONS]...
    
    sh ./changeauthor.sh [OPTIONS]...
    
    --work-tree 없이 스크립트를 실행하면 필요한 값을 입력하라는 대화식 프롬프트가 표시됩니다.그런 다음 스크립트는 로컬 저장소를 계속 업데이트하고 변경 사항을 지정된 원격 저장소로 전송합니다.
    git 필터 분기 경고를 취소하려면 컴퓨터의 ~/.bashrc 파일에 다음 줄을 추가하십시오.
    export FILTER_BRANCH_SQUELCH_WARNING=1
    
    스크립트를 어디에서나 호출할 수 있는 함수로 설정하려면 ~/.bashrc 파일에 다음 함수를 추가합니다.
    function changegitauthor() {
      # Update the path to point to the absolute path of the script on your computer
      bash /c/absolute/path/to/change-git-author/changeauthor.sh "$@"
    }
    
    옵션을 스크립트에 직접 전달할 수도 있고, 어떤 내용도 전달하지 않고 상호작용 모드에서 스크립트를 실행할 수도 있습니다.사용 가능한 모든 옵션 개요는 다음과 같습니다.

    옵션 플래그 이전 e-메일

  • 사용법: -o, --old-email
  • 예: [email protected]
  • 제출 기록에서 바꿀 작성자의 이전/오류 전자 메일 주소입니다.

    새 전자 메일

  • 사용법: -e, --new-email
  • 예: [email protected]
  • 주소와 일치하는 커밋에서 교체할 새/수정 전자 메일 주소입니다.

    이전 e-메일 새 이름

  • 사용법: -n, --new-name
  • 예: Marty McFly
  • 작성자 정보를 새로 제출한 새 이름/수정 이름입니다.(이름을 따옴표로 묶으십시오.)

    아득히 멀다

  • 사용법: -r, --remote
  • 위약: origin
  • 예: github
  • 변경할 원격 저장소의 이름입니다.

    무력

  • 사용법: -f, --force
  • 스크립트가 비 상호작용 셸에서 성공적으로 실행될 수 있도록 합니다. (필요한 모든 로고가 설정되어 있다고 가정합니다.) 확인 알림을 돌립니다.--remote 로고에 값이 전달되지 않으면 기본 원격 --force 이 사용됩니다.

    git 디렉터리

  • 사용법: origin, -d
  • 저장소가 현재 디렉토리와 다른 경우 경로(".git"디렉토리)를 설정합니다.이것은 현재 작업 디렉토리의 절대 경로 또는 상대 경로일 수 있습니다.
    이 옵션은 --git-dir 플래그와 함께 사용해야 합니다.

    작업 트리

  • 사용법: --work-tree, -w
  • 작업 트리의 경로를 설정합니다.이것은 절대 경로일 수도 있고, 현재 작업 디렉터리에 대한 경로일 수도 있다.

    돕다

  • 용법: --work-tree, -h, -?
  • 도움말 내용을 표시합니다.

    버전

  • 용법: --help, -v, -V
  • 버전 정보를 표시합니다.

    좋은 웹페이지 즐겨찾기