특정 커밋에 대한 커밋 작성자를 변경하는 방법은 무엇입니까?


답변:


3563

커밋보다 먼저 히스토리의 시점을 벗어난 대화식 리베이스 ( git rebase -i <earliercommit>). 커밋의 목록으로 업데이트되고에서에서 텍스트를 변경 pick하는 edit수정하려는 하나의 해시 옆에. 그런 다음 git에서 커밋을 변경하라는 메시지가 표시되면 다음을 사용하십시오.

git commit --amend --author="Author Name <email@address.com>" --no-edit

예를 들어, 커밋 역사는 경우 A-B-C-D-E-FF같은 HEAD, 당신은의 저자을 변경하려면 CD다음 것, ...

  1. 지정 하십시오git rebase -i B ( 여기에서 git rebase -i B명령 을 실행 한 후 표시되는 예 ).
    • 편집해야 할 A경우git rebase -i --root
  2. 모두 라인 변경 CD에서 pickedit
  3. 편집기를 종료합니다 (vim의 경우 Esc 키를 누른 다음을 입력 함 :wq).
  4. 리베이스가 시작되면 먼저 C
  5. 당신은 것 git commit --amend --author="Author Name <email@address.com>"
  6. 그때 git rebase --continue
  7. 에 다시 일시 중지됩니다 D
  8. 그런 다음 git commit --amend --author="Author Name <email@address.com>"다시
  9. git rebase --continue
  10. 리베이스가 완료되었습니다.
  11. git push -f업데이트 된 커밋으로 오리진을 업데이트하는 데 사용 합니다.

90
좋은 대답이지만 초보자에게는 먼저 변경하려는 커밋보다 먼저 커밋을 찾은 다음 실행하십시오.git rebase -i <commit>
Mathew Byrne

47
현재 어떤 편집기를 사용하고 있는지 모른다면 그 대답이 될 것 vim입니다. 저장하고 종료하려면 Esc : wq Enter를 입력하십시오. 반면에 Nano 인 경우 아래쪽에 "WriteOut : ^ O"와 같은 것이 있으면 Ctrl + O, Enter, Ctrl + X를 대신 사용해야합니다.
Amber

30
첫 번째 커밋을 수정하려면 어떻게해야합니까? 이전 커밋 해시는 무엇입니까?
Brenden

219
--no-edit옵션을 사용하십시오 . git commit --amend --reset-author --no-edit편집기를 열지 않습니다. 자식 1.7.9부터 사용할 수 있습니다.
5lava

51
@Brenden은 프로젝트에서 첫 번째 커밋을 수정하려면 다음을 사용하십시오.git rebase -i --root
Noah Passalacqua

488

허용 대답 이 질문에 대한 대화 형 REBASE의 멋지고 영리한 사용하지만 우리는 이후에 합병되었다 지점에 예전의 저자을 변경하려는 커밋 경우는 불행하게도 충돌을 나타낸다. 더 일반적으로, 그것은 일을하지 않습니다 지저분한 역사를 다룰 때

git history를 다시 작성하기 위해 환경 변수를 설정하고 설정 해제하는 스크립트를 실행하는 것에 대해 걱정하기 때문에이 게시물 을 기반으로 하는 이 답변 과 비슷 하지만 더 완전한 새로운 답변을 작성하고 있습니다.

다음은 링크 된 답변과 달리 테스트되고 작동합니다. 03f482d6저자가 교체하려고 42627abe하는 커밋이고 새로운 저자와의 커밋 인 설명의 명확성을 가정합니다 .

  1. 수정하려는 커밋을 확인하십시오.

    git checkout 03f482d6
    
  2. 저자를 변경하십시오.

    git commit --amend --author "New Author Name <New Author Email>"
    

    이제 우리는 해시가로 간주되는 새로운 커밋을 가지고 있습니다 42627abe.

  3. 원래 지점을 확인하십시오.

  4. 이전 커밋을 로컬로 새 커밋으로 바꿉니다.

    git replace 03f482d6 42627abe
    
  5. 교체를 기반으로 향후 모든 커밋을 다시 작성하십시오.

    git filter-branch -- --all
    
  6. 청결을 위해 교체품을 제거하십시오.

    git replace -d 03f482d6
    
  7. 새로운 기록을 푸시하십시오 (아래에 실패하면 --force 만 사용하고 git log및 / 또는로 정상 상태 점검 후에 만 ​​사용하십시오 git diff).

    git push --force-with-lease
    

4-6 대신 새로운 커밋에 리베이스 할 수 있습니다.

git rebase -i 42627abe

9
2 단계 후에 원래 지점을 다시 체크 아웃 할 메모를 작성하십시오.
Benjamin Riggs

42
이것은 끔찍한 대안으로 보인다 git rebase -i. git replace전에는 이 말을 들어 본 적이 없습니다 . +1
FractalSpace

3
심판 / 원본 / ... 백업을 청소하려면 여기를
Alexis

5
--force-with-lease대신에 사용 하는 것이 좋습니다 -f. 더 안전합니다.
Jay Bazuzi

11
경고 : git filter-branch -- --all원래 커밋이 있던 모든 브랜치에서 커밋을 변경 한다는 점 에 유의하십시오. 자격 증명이 충분하지 않거나 다른 분기 기록을 변경하지 않으려는 경우이 답변에주의를 기울이는 것이 좋습니다.
ribamar

225

Github 문서에는 브랜치의 모든 커밋에 대한 커미터 정보를 대체하는 스크립트가 포함되어 있습니다 .

  • 변수 값을 변경 한 후 터미널에서 다음 스크립트를 실행하십시오.

    #!/bin/sh
    
    git filter-branch --env-filter '
    
    OLD_EMAIL="your-old-email@example.com"
    CORRECT_NAME="Your Correct Name"
    CORRECT_EMAIL="your-correct-email@example.com"
    
    if [ "$GIT_COMMITTER_EMAIL" = "$OLD_EMAIL" ]
    then
        export GIT_COMMITTER_NAME="$CORRECT_NAME"
        export GIT_COMMITTER_EMAIL="$CORRECT_EMAIL"
    fi
    if [ "$GIT_AUTHOR_EMAIL" = "$OLD_EMAIL" ]
    then
        export GIT_AUTHOR_NAME="$CORRECT_NAME"
        export GIT_AUTHOR_EMAIL="$CORRECT_EMAIL"
    fi
    ' --tag-name-filter cat -- --branches --tags
    
  • 수정 된 히스토리를 GitHub에 푸시하십시오.

    git push --force --tags origin 'refs/heads/*'
    

    또는 선택한 가지 참조를 푸시하려면 다음을 사용하십시오.

    git push --force --tags origin 'refs/heads/develop'
    

12
이것은 하나의 커밋이 아닌 모든 커밋에서 변경됩니다. 재밌는 일, 나는 30 분 전에 이것을했다.
Artjom B.

이전 답변을 읽은 후이 답변을 찾았을 때 시도해 보았을 때 가치가 있다고 생각했습니다. 그러나 필자의 경우 초기 커밋에서만 커미터 이름을 변경했습니다. 그건 그렇고, 첫 번째 대답에서 아이디어를 시도하기 전에. 어쩌면 시스템에 영향을 줄 수도 있습니다.
Ruslan Gerasimov

2
clone/를 사용하지 않으면 push백업 네임 스페이스가 생깁니다 refs/original/. 이 네임 스페이스를 지능적으로 제거하는 방법을 찾을 수 없으므로 결국 디렉토리 삭제가 .git/refs/original발생했습니다.
VasiliNovikov

예를 들어 OLD_EMAIL이 일치하지 않는 경우 이로 인해 repo가 ​​변경되는 이유는 무엇입니까? 어떤 이유로 든 커밋 해시 변경 사항이 있습니다.
mjs

1
이 답변의 사용 사례는 다음과 같습니다. 두 개의 github 계정이 있는데 하나는 실수로 커밋하는 데 사용됩니다. 이 스크립트는 잘못된 커미터 이메일 / 이름을 변경하여 모든 커밋을 수정하는 데 도움이되었습니다. 물론 50 번째 커밋에서 500 번째 커밋까지 잘못된 사용자와 커밋 한 경우 450 개의 분기 커밋이 발생합니다. 어쨌든 @andrej가 지적했듯이 스크립트를 실행 한 후 git push -frepo에 푸시 변경을 강제로 수행 해야합니다 .
LWY

166
  • 이메일을 전역으로 구성으로 재설정하십시오.

    git config --global user.email example@email.com

  • 이제 편집없이 커밋 작성자를 재설정하십시오.

    git commit --amend --reset-author --no-edit


2
아뇨. OP를보십시오 : It's not last commit.그래서 그들은 어떻게 할 amend것입니까?
underscore_d

2
이것은 훌륭하지만, 마지막 커밋 만 부끄러운 일입니다. 다행히도 최신 2 개가 필요했기 때문에을 git reset HEAD~제안하고 제안 된 줄을 실행 한 다음 다음 커밋을 수동으로 다시 수행했습니다. 잘 작동했습니다!
매트 플레처

2
감사! --reset-author는 저에게 속임수를 썼습니다. 저자가 바뀌지 않았지만 "commiter"는 오래된 저자 세부 정보를 유지하기 때문입니다.
Lucas P.

9
마지막 6 개의 커밋을 수정하려면 먼저 git config --local user.name FirstName LastName and를 사용하여 현재 Git 리포지토리에 올바른 작성자를 설정하십시오 git config --local user.email first.last@example.com. 그런 다음을 사용하여 마지막 6 개의 커밋에 적용하십시오 git rebase --onto HEAD~6 --exec "git commit --amend --reset-author --no-edit" HEAD~6. 마지막으로을 사용하여 원격 Git 저장소로 푸시하십시오 git push --force-with-lease.
olibre

@olibre 그것은 매력처럼 작동합니다. 감사합니다.
Bruno Gasparotto

88

아래 명령을 사용하여 마지막 커밋의 작성자를 변경할 수 있습니다.

git commit --amend --author="Author Name <email@address.com>"

그러나 하나 이상의 커밋 작성자 이름을 변경하려면 약간 까다 롭습니다. 대화식 리베이스를 시작한 다음 커밋을 편집으로 표시 한 다음 하나씩 수정하고 완료해야합니다.

로 rebasing을 시작하십시오 git rebase -i. 그것은 당신에게 이와 같은 것을 보여줄 것입니다.

https://monosnap.com/file/G7sdn66k7JWpT91uiOUAQWMhPrMQVT.png

변화 pick에 키워드를 edit커밋 당신은 저자의 이름을 변경하고 싶습니다.

https://monosnap.com/file/dsq0AfopQMVskBNknz6GZZwlWGVwWU.png

그런 다음 편집기를 닫습니다. 초보자는 Escape을 입력 :wq하고을 누르십시오 Enter.

그러면 아무 일도 일어나지 않은 것처럼 터미널이 보입니다. 실제로 당신은 인터랙티브 리베이스의 중간에 있습니다. 이제 위의 명령을 사용하여 커밋의 저자 이름을 수정할 차례입니다. 편집기가 다시 열립니다. 을 (를) 종료하고 계속 리베이스하십시오 git rebase --continue. 편집하려는 커밋 수에 대해 동일하게 반복하십시오. No rebase in progress?메시지가 표시 되면 대화식 리베이스가 완료되었는지 확인할 수 있습니다 .


사진을 업데이트 해 주시겠습니까?
Shimmy Weitzhandler 2016 년

1
대신 개별적으로 편집의 변화에 대한 여러 커밋을 가지고 있다면, 당신은 또한 할 수있는 pick조치를하고 각 줄 끝에서 추가exec git commit --no-edit --amend --author="MyNewAuthor <my@new-auth.or>"
피에르 - 올리비에 Vares

60

링크 된 질문의 답변은 좋은 답변이며 상황을 다룹니다 (다른 질문은 여러 커밋을 다시 작성하기 때문에 더 일반적입니다).

시험해 보려는 변명으로 git filter-branch, 나는 주어진 커밋에 대한 저자 이름 및 / 또는 저자 이메일을 다시 작성하는 스크립트를 작성했습니다.

#!/bin/sh

#
# Change the author name and/or email of a single commit.
#
# change-author [-f] commit-to-change [branch-to-rewrite [new-name [new-email]]]
#
#     If -f is supplied it is passed to "git filter-branch".
#
#     If <branch-to-rewrite> is not provided or is empty HEAD will be used.
#     Use "--all" or a space separated list (e.g. "master next") to rewrite
#     multiple branches.
#
#     If <new-name> (or <new-email>) is not provided or is empty, the normal
#     user.name (user.email) Git configuration value will be used.
#

force=''
if test "x$1" = "x-f"; then
    force='-f'
    shift
fi

die() {
    printf '%s\n' "$@"
    exit 128
}
targ="$(git rev-parse --verify "$1" 2>/dev/null)" || die "$1 is not a commit"
br="${2:-HEAD}"

TARG_COMMIT="$targ"
TARG_NAME="${3-}"
TARG_EMAIL="${4-}"
export TARG_COMMIT TARG_NAME TARG_EMAIL

filt='

    if test "$GIT_COMMIT" = "$TARG_COMMIT"; then
        if test -n "$TARG_EMAIL"; then
            GIT_AUTHOR_EMAIL="$TARG_EMAIL"
            export GIT_AUTHOR_EMAIL
        else
            unset GIT_AUTHOR_EMAIL
        fi
        if test -n "$TARG_NAME"; then
            GIT_AUTHOR_NAME="$TARG_NAME"
            export GIT_AUTHOR_NAME
        else
            unset GIT_AUTHOR_NAME
        fi
    fi

'

git filter-branch $force --env-filter "$filt" -- $br

+1 감사합니다. assembla.com git repo는 repo의 웹보기에서 모든 저자 참조를 변경하지는 않지만 'git pull / clone'의 결과는 모든 작업에 정상적으로 나타납니다.
Johnny Utahh

커밋 날짜와 같은 다른 필드가 아닌 의도 된 것을 변경하기 때문에 훌륭한 솔루션입니다.
기 illa 레마 티트

12
Github 문서에는 비슷한 스크립트
olivieradam666

2
@ olivieradam666 매력처럼 작동하고 읽기 쉽습니다
fregante

@ olivieradam666 감사합니다. 더 많은 관심을 끌 수 있도록 답변으로 추가해야합니다.
seane

44

전에 커밋 :

여기에 이미지 설명을 입력하십시오

모든 커밋에 대한 작성자를 수정하려면 @Amber의 답변에서 명령을 적용 할 수 있습니다.

git commit --amend --author="Author Name <email@address.com>"

또는 이름과 이메일을 재사용하려면 다음과 같이 작성하십시오.

git commit --amend --author=Eugen

명령 후 커밋 :

여기에 이미지 설명을 입력하십시오

예를 들어 다음에서 시작하는 모든 것을 변경하려면 4025621:

여기에 이미지 설명을 입력하십시오

다음을 실행해야합니다.

git rebase --onto 4025621 --exec "git commit --amend --author=Eugen" 4025621

참고 : 이름 및 이메일 주소와 같이 공백이 포함 된 작성자를 포함 시키려면 이스케이프 된 따옴표로 묶어야합니다. 예를 들면 다음과 같습니다.

git rebase --onto 4025621 --exec "git commit --amend --author=\"Foo Bar <foo@bar.com>\"" 4025621

또는이 별칭을 ~/.gitconfig다음에 추가하십시오 .

[alias]
    reauthor = !bash -c 'git rebase --onto $1 --exec \"git commit --amend --author=$2\" $1' --

그런 다음 다음을 실행하십시오.

git reauthor 4025621 Eugen

1
명령이 예상대로 작동했는지 확인하기 위해의 출력을 검토했습니다 git shortlog -e -s.
Taylor Edmiston

5
이것이 내 목적에 가장 잘 맞는 답입니다. 감사합니다. 그리고 전자 메일 주소 를 조정 하고 싶었 으므로 .git / config를 업데이트 한 후 --exec = "git commit --amend --reset-author"로 실행할 수 있습니다.
Dato

1
어, 왜 내가 잊었는지 모르겠다! 지금 완료
Dato

훌륭한 답변과 수정이 매우 쉽습니다. 별명을 사랑하십시오!
J_A_X

그건 나에게 도움이되지 않았다. 이제 계속 리베이스 오류 가 발생했습니다
Alexey Sh.

17

중앙 집중식 저장소를 사용하는 경우 Amber의 답변에 추가 단계가 있습니다.

git push -f 중앙 저장소를 강제로 업데이트합니다.

같은 지점에서 일하는 사람이 많지 않아 일관성이 떨어질 수 있으므로주의하십시오.


16

할 때 git rebase -i문서에 흥미로운 부분이 있습니다.

하나에 두 개 이상의 커밋을 접하려면, 명령을 대체 "pick"와 두 번째 이후 커밋에 대한 "squash""fixup". 커밋에 다른 작성자가있는 경우 접힌 커밋은 첫 번째 커밋의 작성자에 기인합니다. 폴딩 된 커밋에 대해 제안 된 커밋 메시지는 첫 번째 커밋과 "squash"명령이있는 커밋 메시지의 연결이지만 명령으로 커밋의 커밋 메시지는 생략합니다 "fixup".

  • 당신의 역사를 가지고있는 경우 A-B-C-D-E-F,
  • 커밋을 변경 B하고 D(= 2 커밋)

그럼 당신은 할 수 있습니다 :

  • git config user.name "Correct new name"
  • git config user.email "correct@new.email"
  • 빈 커밋을 만듭니다 (각 커밋마다 하나씩).
    • 리베이스 목적으로 메시지가 필요합니다
    • git commit --allow-empty -m "empty"
  • 리베이스 작업을 시작
    • git rebase -i B^
    • B^의 부모를 선택합니다 B.
  • 각 커밋 전에 하나의 빈 커밋을 수정 하고 싶을 것입니다.
  • 당신은 변경하고자하는 것 picksquash사람들을 위해.

git rebase -i B^당신에게 줄 것의 예 :

pick sha-commit-B some message
pick sha-commit-C some message
pick sha-commit-D some message
pick sha-commit-E some message
pick sha-commit-F some message
# pick sha-commit-empty1 empty
# pick sha-commit-empty2 empty

그것을 다음으로 변경하십시오.

# change commit B's author
pick sha-commit-empty1 empty
squash sha-commit-B some message
# leave commit C alone
pick sha-commit-C some message
# change commit D's author
pick sha-commit-empty2 empty
squash sha-commit-D some message
# leave commit E-F alone
pick sha-commit-E some message
pick sha-commit-F some message

메시지를 편집하라는 메시지가 표시됩니다.

# This is a combination of 2 commits.
# The first commit's message is:

empty

# This is the 2nd commit message:

...some useful commit message there...

처음 몇 줄만 제거하면됩니다.


16

에 조성에서 오이겐 Konkov의 응답 루트 커밋 사용에서 시작하는 --root플래그. --no-edit플래그도 도움이됩니다

git rebase --root --exec "git commit --amend --author='name <email>' --no-edit"

이것은 모든 커밋에서 작동하고 변경되었습니다.
SagarKapasi099

1
답변 해주셔서 감사합니다. 작동하려면 --interactive를 추가해야했습니다. git rebase --root --interactive --exec "git commit --amend --author = 'name <email>'
Sreeragh AR

8

사용자를 빠르게 바꿀 수 있고 다른 사람의 커밋에는 부작용이없는 방법을 찾으십시오.

간단하고 명확한 방법 :

git config user.name "New User"
git config user.email "newuser@gmail.com"

git log
git rebase -i 1f1357
# change the word 'pick' to 'edit', save and exit

git commit --amend --reset-author --no-edit
git rebase --continue

git push --force-with-lease

자세한 작업

  • 커밋 로그를 표시하고 커밋보다 먼저 변경하려는 커밋 ID를 찾으십시오.
git log
  • git rebase는 선택된 커밋 ID에서 최근에 역으로 시작합니다.
git config user.name "New User"
git config user.email "newuser@gmail.com"
git rebase -i 1f1357

# change word pick to edit, save and exit
edit 809b8f7 change code order 
pick 9baaae5 add prometheus monitor kubernetes
edit 5d726c3 fix liquid escape issue   
edit 3a5f98f update tags
pick 816e21c add prometheus monitor kubernetes
  • rebase는 다음 커밋 ID에서 중지되고 출력됩니다.
Stopped at 809b8f7...  change code order 
You can amend the commit now, with
  git commit --amend 

Once you are satisfied with your changes, run

  git rebase --continue
  • 성공적으로 완료 될 때까지 계속 확인하고 계속하십시오. refs/heads/master.
# each continue will show you an amend message
# use git commit --amend --reset-author --no-edit to comfirm
# use git rebase --skip to skip
git commit --amend --reset-author --no-edit
git rebase --continue
git commit --amend --reset-author --no-edit
...
git rebase --continue
Successfully rebased and updated refs/heads/master.
  • git push 업데이트
git push --force-with-lease

5

변경하려는 커밋이 마지막 커밋이 아닌 경우 아래 단계를 수행하십시오. 커밋이 다른 지점에있는 경우 먼저 해당 지점으로 전환하십시오.

자식 체크 아웃 branch_name

변경하려는 커밋 전에 커밋을 찾아 해시를 찾으십시오. 그런 다음 rebase 명령을 발행하십시오.

커밋의 자식 rebase -i -p 해시

그런 다음 편집기는 변경하려는 커밋에 대해 'edit'을 열고 입력합니다. 기본 '선택'옵션으로 다른 사람을 남겨 두십시오. 변경되면 'esc'키와 wq를 입력하십시오! 나가기 위해서.

그런 다음 수정 옵션과 함께 git commit 명령을 실행하십시오.

git commit --amend --author = "Username email"--no-edit

그런 다음 다음 명령을 발행하십시오.

git rebase-계속

로컬 저장소에서 커미트 작성자가 업데이트되면 변경 사항을 원격 저장소로 푸시하십시오.


나는 이것이 가장 간단한 방법이라고 생각합니다. reword 명령을 사용하고 있는데 실패했습니다. 대신 edit 명령을 사용해야한다는 것을 알았습니다. “edit”키워드가 강조 표시 될 수 있습니다. 답변 주셔서 감사합니다 @ChannaB 👍
Berk

정말 쉬운 단계입니다. 감사합니다!
하비 바

4

특히 변경하려는 커밋이 둘 이상인 경우이 문제에 대한 게으른 접근 방식이 있습니다. 제 경우에는 잘못된 저자와 여러 커밋을 가진 새로운 지점이 있었으므로 도움이되었습니다.

원래 지점으로 이동하십시오.

git checkout develop

그것에서 새로운 지점을 만듭니다 :

git checkout -b myFeature develop 

커밋 정보없이 하나의 커밋으로 병합하십시오.

git merge --no-commit --squash branchWrongAuthor

변경 사항을 준비하고 싶을 수도 있습니다.

git stage .

저자의 이름을 변경하고 변경 사항을 커밋하십시오.

git commit --amend --author "New Author Name <New Author Email>" -m "new feature added"

그게 다야, 당신은 변화를 추진할 수 있습니다.

git push

그 후에 저자가 잘못된 브랜치를 삭제할 수 있습니다.


4

커밋이 푸시 된 후 작성자 이름의 이름을 바꾸는 단계

  1. 커밋 ID와 자세한 정보를 얻으려면 먼저 "git log"를 입력하십시오.
  2. git rebase i HEAD ~ 10 (10은 rebase에 표시 할 총 커밋)

    If you Get anything like below

    fatal: It seems that there is already a rebase-merge directory, and I wonder if you are in the middle of another rebase. If that is the case, please try

    git rebase (--continue | --abort | --skip) If that is not the case, please rm -fr ".git/rebase-merge" and run me again. I am stopping in case you still have something valuable there.

  3. 그런 다음 필요에 따라 "git rebase --continue"또는 "git rebase --abort"를 입력하십시오.

    • 이제 rebase 창이 열리면 키보드에서 "i"키를 클릭하십시오.
    • 그런 다음 커밋 목록을 10으로 가져옵니다. [위의 커밋 10 개를 전달했기 때문에] 아래와 같이

    pick 897fe9e simplify code a little

    pick abb60f9 add new feature

    pick dc18f70 bugfix

  4. 이제 아래와 같이 편집하려는 커밋 바로 아래에 아래 명령을 추가해야합니다.

    pick 897fe9e simplify code a little exec git commit --amend --author 'Author Name <author.name@mail.com>' pick abb60f9 add new feature exec git commit --amend --author 'Author Name <author.name@mail.com>' pick dc18f70 bugfix exec git commit --amend --author 'Author Name <author.name@mail.com>'

    1. 이제 ESC를 누르십시오 : wq 그리고 당신은 모두 설정되었습니다

    2. 그런 다음 git push origin HEAD : BRANCH NAME -f [-f Force push를 처리하십시오]

    같은 git push -f또는git push origin HEAD: dev -f


좋은 대답, 당신은 git push명령 의 예로 포인트 6을 업데이트 할 수 있습니까?
Lukasz 'Severiaan'Grela

1
@ Lukasz'Severiaan'Grela 편집, 지금 확인하십시오, 감사합니다
Kirtikumar A.

3

커미터 이름 및 이메일을 전 세계적으로 변경 :

$ git config --global user.name "John Doe"
$ git config --global user.email "john@doe.org"

저장소 당 커미터 이름 및 이메일 변경 :

$ git config user.name "John Doe"
$ git config user.email "john@doe.org"

다음 커밋에 대해서만 저자 정보 변경 :

$ git commit --author="John Doe <john@doe.org>"

힌트 : 다른 상황과 자세한 정보 는 포스트 레퍼런스를 읽으 십시오 .


2

변경해야 할 것이 AUTHOR OF THE LAST 커밋이고 다른 사람이 저장소를 사용하지 않는 경우 다음을 사용하여 마지막 커밋을 취소 할 수 있습니다.

git push -f origin last_commit_hash:branch_name 

커밋의 저자 이름을 다음과 같이 변경하십시오.

git commit --amend --author "type new author here"

열리는 편집기를 종료하고 코드를 다시 푸시하십시오.

git push

2

병합 커밋 메시지의 경우 rebase적어도 gitlab에서을 사용하여 수정할 수 없다는 것을 알았습니다. 병합을 커밋으로 표시하지만 해당 #sha를 기반으로 할 수는 없습니다. 게시물이 도움 되었다는 것을 알았 습니다.

git checkout <sha of merge>
git commit --amend # edit message
git rebase HEAD previous_branch

이 세 줄의 코드는 작성자와 같은 병합 커밋 메시지를 변경하는 작업을 수행했습니다.


1

이 명령은 github의 공식 페이지에서 사용할 수 있습니다

https://help.github.com/en/github/using-git/changing-author-info

여기 명령이 있습니다

#!/bin/sh

git filter-branch --env-filter '

OLD_EMAIL="your-old-email@example.com"
CORRECT_NAME="Your Correct Name"
CORRECT_EMAIL="your-correct-email@example.com"

if [ "$GIT_COMMITTER_EMAIL" = "$OLD_EMAIL" ]
then
export GIT_COMMITTER_NAME="$CORRECT_NAME"
export GIT_COMMITTER_EMAIL="$CORRECT_EMAIL"
fi
if [ "$GIT_AUTHOR_EMAIL" = "$OLD_EMAIL" ]
then
export GIT_AUTHOR_NAME="$CORRECT_NAME"
export GIT_AUTHOR_EMAIL="$CORRECT_EMAIL"
fi
' --tag-name-filter cat -- --branches --tags

여기에서 이전 이메일을 새로운 사용자 이름과 이메일 주소로 변경할 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.