단일 커밋의 커밋 작성자를 변경하려면 어떻게 해야 합니까?
역사상 특정 약속의 작성자를 바꾸고 싶다.이건 최근의 약속이 아니야.
관련: 여러 커밋의 작성자 및 커밋 이름/이메일을 변경하려면 어떻게 해야 합니까?
이전 버전의 기록에서 벗어나야 할 약속보다 앞서서( 할 필 요 기 ( 재 력 치 브 티 한 interactive인 than ( in you배 to터본랙이 thegit rebase -i <earliercommit>
) 목록에서 텍스트를 기반으로 하는 기 초 되 ) 록 스 경 트 ). the from, of being rebased변 commits in다 the change list텍)를 기반으로 한다.pick
로로 합니다.edit
수정하려는 사람의 해시 옆에 있습니다.변경할 해시 옆에 있습니다.그러면 약속을 변경하라는 메시지가 표시되면 다음을 사용하십시오.그런 다음 git에서 커밋을 변경하라는 메시지가 나타나면 다음을 사용합니다.
git commit --amend --author="Author Name <email@address.com>" --no-edit
For example, if your commit history is 예를 들어 커밋 이력이A-B-C-D-E-F
F
as ~하듯이HEAD
이 책의 C
★★★★★★★★★★★★★★★★★」D
★★★★★★★★★★★★...
git rebase -i B
(명령어를 실행한 후에 표시되는 예를 다음에 나타냅니다).- 이
A
하다, 사용하다git rebase -i --root
- 이
- 바꿈
C
★★★★★★★★★★★★★★★★★」D
부에서pick
로로 합니다.edit
- 편집기를 종료하고 집 이것은 ESC를 눌러 료 기 합 력 우 를 른 입 음 다 누 the v exit ( esc im,im would
:wq
를 참조해 주세요. - 재부팅이 시작되면 본 설 정 작 저 점 음 시 the에 oncease reb started, pause일다니시 at first됩다 would재먼기 it서지정시면되이
C
- You would 당신은 할 것이다
git commit --amend --author="Author Name <email@address.com>"
- Then 그리고나서
git rebase --continue
- It would pause again at 에 다시 멈춘다.
D
- 그럼 그 신?
git commit --amend --author="Author Name <email@address.com>"
다시 한번 해. git rebase --continue
- 기본 재설정이 완료됩니다.
git push -f
이치노
이 질문에 대해 받아들여지고 있는 대답은 인터랙티브 리베이스의 매우 교묘한 사용입니다만, 유감스럽게도 작성자를 변경하려고 하는 커밋이 그 후에 합류한 브랜치에 있었을 경우, 모순이 발생합니다.더 일반적으로, 지저분한 역사를 다룰 때는 효과가 없습니다.
git 이력 개서를 위한 환경변수 설정 및 설정 해제에 따른 스크립트 실행이 우려되어 이 답변과 비슷하지만 보다 완전한 답변을 이 게시물을 바탕으로 새로운 답변을 작성하게 되었습니다.
다음은 링크된 답변과 달리 테스트 및 작동 중입니다.하기 위해, 명확음음음음 음음음음음음음음 assume assume라고 하자.03f482d6
과 '커밋'입니다.42627abe
이치노
변경하려는 커밋을 확인합니다.
git checkout 03f482d6
작성자 변경:
git commit --amend --author "New Author Name <New Author Email>"
이제 새로운 커밋과 해시는 다음과 같이 추정됩니다.
42627abe
.원래의 브랜치를 체크 아웃 합니다.
오래된 커밋을 로컬에서 새로운 커밋으로 바꿉니다.
git replace 03f482d6 42627abe
치환에 근거해, 장래의 커밋을 모두 고쳐 씁니다.
git filter-branch -- --all
청결을 위해 교환품을 탈거한다:
git replace -d 03f482d6
새 이력을 푸시합니다.
git push --force-with-lease
(사用))
--force
--force-with-lease
실패했을 , 「」를 사용해 에만,git log
"/"/"git diff
스텝 4~5 대신에, 새로운 커밋을 베이스로 하면 됩니다.
git rebase -i 42627abe
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'
마지막 커밋의 작성자만 변경하는 경우 다음을 수행할 수 있습니다.
전자 메일을 글로벌하게 설정으로 리셋합니다.
git config --global user.email example@email.com
이제 편집하지 않고 커밋 작성자를 리셋합니다.
git commit --amend --reset-author --no-edit
작성자 타임스탬프도 변경됩니다.
다음 명령을 사용하여 마지막 커밋의 작성자를 변경할 수 있습니다.
git commit --amend --author="Author Name <email@address.com>"
그러나 두 개 이상의 커밋 작성자 이름을 변경하는 경우 다소 까다롭습니다.대화형 기본 재배치 작업을 시작하고 커밋을 편집으로 표시한 후 하나씩 수정한 후 완료해야 합니다.
「」로 을 합니다.
git rebase -i
.변경합니다.
pick
를 「」로 설정합니다.edit
작성자 이름을 변경할 커밋에 대해 지정합니다.그런 다음 편집기를 닫습니다.은 ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
Escape
입력해 주세요.:wq
Enter
.
그러면 아무 일도 없었던 것처럼 단말기가 보일 거예요.실제로 당신은 인터랙티브한 기본 재배치 중입니다.이제 위의 명령을 사용하여 커밋의 작성자 이름을 수정합니다.그러면 편집기가 다시 열립니다.하고 ""로 기본 "git rebase --continue
편집하는 커밋카운트에 대해서, 같은 순서를 반복합니다.된 것을 할 수 .No rebase in progress?
★★★★★★★★★★★★★★★★★★.
링크된 질문의 답변은 좋은 답변이며 상황에 대한 설명입니다(다른 질문은 여러 개의 커밋을 다시 쓰는 것이므로 더 일반적인 질문입니다).
보는 핑계로서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
사용자를 빠르게 변화시키고 다른 커밋에 대한 부작용이 없는 방법을 찾습니다.
심플하고 명확한 방법:
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
상세한 조작
- show commit logs 및 변경할 커밋 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로 출력:
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
커밋 전:
모든 커밋의 작성자를 수정하려면 @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
2019년 나의 코멘트는 답변으로 변환되었다.
최근 6개의 커밋에 대한 저작을 수정하려면
먼저 현재 Git repo의 올바른 작성자를 설정합니다.
git config --local user.name "FirstName LastName" 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 repo에 강제 푸시
git push --force-with-lease
Eugen Konkov의 답변에 이어 루트 커밋부터 시작하려면--root
플래그.--no-edit
플래그를 사용하면 각 커밋에 대해 에디터에 프롬프트가 표시되지 않기 때문에 플래그가 도움이 됩니다.
git rebase --root --exec "git commit --amend --author='name <email>' --no-edit"
를 할 때git rebase -i
.
개 2를 하십시오.
"pick"
는, 「」를 사용합니다."squash"
★★★★★★★★★★★★★★★★★」"fixup"
커밋의 작성자가 다른 경우 접힌 커밋은 첫 번째 커밋의 작성자에게 귀속됩니다.는 첫 커밋 와 "를입니다."squash"
됩니다."fixup"
명령어를 입력합니다.
- ★★★★★이
A-B-C-D-E-F
, - 을
B
★★★★★★★★★★★★★★★★★」D
2),(= 2 커밋),
다음 작업을 수행할 수 있습니다.
git config user.name "Correct new name"
git config user.email "correct@new.email"
- 개개 ( 1 ) :
- 기본 재배치 목적으로 메시지가 필요합니다.
git commit --allow-empty -m "empty"
- 기본 재배치 작업을 시작합니다.
git rebase -i B^
B^
「」의 를 합니다.B
.
- 변경할 각 커밋 앞에 빈 커밋을 1개 입력합니다.
- 하실 수 .
pick
로로 합니다.squash
츠미야
의 예: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...
처음 몇 줄만 제거하면 됩니다.
중앙 저장소를 사용하는 경우 Amber의 답변에는 다음과 같은 추가 단계가 있습니다.
git push -f
이치노
같은 지점에서 일하는 사람이 많지 않은 것은 일관성을 해칠 수 있기 때문에 주의하세요.
변경할 커밋이 마지막 커밋이 아닌 경우 다음 절차를 수행합니다.커밋이 다른 브랜치에 있는 경우는, 우선 그 브랜치로 전환합니다.
git 체크아웃 branch_name
변경할 커밋 전에 커밋을 찾아 해시를 찾습니다.그런 다음 rebase 명령을 발행합니다.
git rebase -i -p hash of commit
그런 다음 편집기가 열리고 변경할 커밋에 대해 '편집'을 입력합니다.다른 사용자에게는 기본 '선택' 옵션을 남겨둡니다.변경 후 'esc' 키를 입력하고 wq!를 입력하여 종료합니다.
그런 다음 수정 옵션과 함께 git commit 명령을 발행합니다.
git --commit --commit --author="사용자명 이메일" --no-edit
그런 다음 다음 명령을 발행합니다.
git rebase --개요
로컬 저장소에서 커밋 작성자가 업데이트되면 변경 내용을 원격 저장소로 푸시합니다.
솔루션
설치(Git 프로젝트 권장 이상)
$ PACKAGE_TOOL install git-filter-repo
" " " 를 만듭니다.
.mailmap
에는 "git"이 .New Name <new@ema.il> <old@ema.il>
실행합니다.
git filter-repo --use-mailmap
상세
git-filter-repo
에, 문서내의 예로서 이것을 나타냅니다.- 위의 예시와 같이 이름과 이메일을 모두 대체하는 대신 git 메일 맵 설명서의 추가 예를 보십시오.
- 「」라고 하는 이름의
.mailmap
맵파일을 지정할 수 있습니다 맵파일을 하려면 , 「」를 합니다.git filter-repo
를--mailmap <filename>
. - 브랜치을 더 하는 는 "/"/"/"에 .
git-filter-repo
README.md 입니다.
에 대해 merge commit " " " " , " " " " 를 할 수 .rebase
적어도 gitlab에서는.머지는 커밋으로 표시되지만 해당 #sha에 기본 재설정은 할 수 없습니다.저는 이 글이 도움이 된다는 것을 알았습니다.
git checkout <sha of merge>
git commit --amend # edit message
git rebase HEAD previous_branch
이 3행의 코드에 의해 머지 커밋메시지(작성자 등)를 변경할 수 있었습니다.
커밋 푸시 후 작성자 이름 변경 단계
- 먼저 "git log"를 입력하여 커밋 ID 및 자세한 내용을 가져옵니다.
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.
그런 다음 필요에 따라 "git rebase --continue" 또는 "git rebase --abort"를 입력합니다.
- 이제 기본 창을 열고 키보드에서 "i" 키를 클릭합니다.
- [위 10개의 커밋을 통과했기 때문에]커밋 리스트가 10으로 표시됩니다.아래와 같습니다.
pick 897fe9e simplify code a little
pick abb60f9 add new feature
pick dc18f70 bugfix
여기서 편집할 커밋 바로 아래에 다음과 같은 명령을 추가해야 합니다.
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>'
이상입니다. 이제 ESC, :wq를 누르기만 하면 됩니다.
그리고 git 푸시 오리진 HEAD:BRANCH NAME -f [-f Force 푸시 처리 부탁드립니다]
git push -f
★★★★★★★★★★★★★★★★★」git push origin HEAD: dev -f
옵션: 로컬 변경 내용을 원격에 전송하지 않으려면 로컬 변경 내용을 저장하십시오.
$ git status
$ git stash
마지막 커밋의 작성자를 업데이트합니다.
$ git log // Old author in local and remote
$ git commit --amend --author="Author Name <email@address.com>"
$ git log // New Author in local
$ git push origin <branch> --force-with-lease
$ git log // New Author in remote
럼을 했다면 약을 사용했을 git stash
단계적인 됩니다.
$ git stash pop
$ git status
그런 다음 현재 프로젝트의 다음 커밋 구성을 업데이트해야 합니다.
$ git config user.name "Author Name"
$ git config user.email "<email@address.com>"
이것을 .git config --edit
설명:드물게 다음 명령어를 사용하여 커밋을 손실하는 경우$ ggpush -f
리플로그를 사용하여 복구할 수 있습니다.어쨌든 사용--force-with-lease
보호 대상이 되는 것은, 사용했을 경우보다 더 많이 보호되고 있습니다.-f
GL
예를 들어 포맷 후에 머신 설정이 없거나 이러한 명령어를 올바르게 설정하지 않고 Git을 올바르게 설정하지 않았을 때 발생할 수 있습니다.
git config user.name "Author Name"
git config user.email "<email@address.com>"
Atlassian의 이 기사를 따라하는 것으로 당신의 삶을 더 단순하게 만드는 것은 어떨까요?
git commit --amend --author="Author Name <email@address.com>"
- 브랜치가 보호되고 있는 경우는, 보호를 해제합니다.예에서는 되어 있어요.
master
소스코드 Code Repository)에 git push origin master --force
그게 마지막 약속의 가장 간단한 시나리오입니다.임의의 커밋을 선택하기 위해서는 다음 사항이 필요합니다.
git rebase -i <Earlier Commit>.
pick
edit
이 을 가지고 커밋에git commit --amend --author="Author Name <email@address.com>"
- 브랜치가 보호되고 있는 경우는, 보호를 해제합니다.예에서는 되어 있어요.
master
소스코드 Code Repository)에 git push origin master --force
든지 할 수 git log
밀기 전에 어디에 있는지 확인해야 합니다.
질문에 할 수 . : "사용하기"는 "사용하기"입니다.exec
edit
.
exec
를 사용하면 지정된 커밋에서 명령을 실행할 수 있습니다.
하면 '어울리지 않게', '어울리지 않게 되다'를 수 있습니다.edit
종료와 git
명령어를 지정합니다.
이것은, 이력내에서 복수의 커밋을 변경할 필요가 있는 경우에 특히 도움이 됩니다.
순서는 다음과 같습니다.
- 다(기본을
git rebase -i <earliercommit>
) - 행 하고 편집하는 커밋 행 뒤에 행을 합니다.
exec git commit --amend --author="Author Name <email@address.com>" --no-edit
(사용)--reset-author
config config)로 리셋합니다. - save and exit - 각 커밋에 대해 지정된 명령을 실행하여 작성자를 효과적으로 변경합니다.
편집기 내용 예(처음 2개의 커밋 작성자를 변경하려면):
pick 1fc6c95 Patch A
exec git commit --amend --author="Author Name <email@address.com>" --no-edit
pick 6b2481b Patch B
exec git commit --amend --author="Author Name <email@address.com>" --no-edit
pick dd1475d something I want to split
pick c619268 A fix for Patch B
pick fa39187 something to add to patch A
pick 4ca2acc i cant' typ goods
pick 7b36971 something to move before patch B
# Rebase 41a72e6..7b36971 onto 41a72e6
#
# Commands:
# p, pick = use commit
# r, reword = use commit, but edit the commit message
# e, edit = use commit, but stop for amending
# s, squash = use commit, but meld into previous commit
# f, fixup = like "squash", but discard this commit's log message
# x, exec = run command (the rest of the line) using shell
#
# If you remove a line here THAT COMMIT WILL BE LOST.
# However, if you remove everything, the rebase will be aborted.
#
인터랙티브 기본 재배치 사용
git rebase -i -p <some HEAD before all of your bad commits>
그런 다음 모든 잘못된 커밋을 rebase 파일에서 "edit"로 표시하고 git이 각 커밋을 수정하도록 요청하면 다음 작업을 수행합니다.
git commit --amend --author "New Author Name <email@address.com>"
편집하거나 열려 있는 편집기를 닫은 후
git rebase --continue
기본 설정을 계속합니다.
여기서 편집기를 여는 것을 생략할 수 있습니다.--no-edit
츠키다
git commit --amend --author "New Author Name <email@address.com>" --no-edit && \
git rebase --continue
단일 커밋
일부 코멘트가 지적했듯이 최신 커밋만 변경하는 경우에는 rebase 명령어가 필요하지 않습니다.그냥 해
git commit --amend --author "New Author Name <email@address.com>"
그러면 작성자가 지정된 이름으로 변경되지만 커밋은 git config user.name 및 git config user.email에서 설정된 사용자로 설정됩니다.커밋을 지정한 것에 설정하는 경우는, 작성자와 커밋의 양쪽 모두를 설정합니다.
git -c user.name="New Author Name" -c user.email=email@address.com commit --amend --reset-author
이러한 명령어는 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
여기서 오래된 이메일을 새 사용자 이름과 이메일 주소로 변경할 수 있습니다.
이 문제에 대한 게으른 접근법도 있습니다.특히 변경하고 싶은 커밋이 여러 개 있는 경우에는 더욱 그렇습니다.제 경우, 잘못된 작성자를 가진 몇 개의 커밋을 가진 새로운 지점이 생겼는데, 무엇이 도움이 되었습니까?
원래 분기로 이동합니다.
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
이후 잘못된 작성자가 있는 지점을 삭제할 수 있습니다.
Eugen Konkov의 답변 외에 커밋/작성자 날짜도 유지할 수 있습니다.작성자만 수정하고 마지막 세 개의 커밋 날짜는 수정하지 않으려면 다음을 사용하십시오.
git rebase --onto HEAD~3 --exec 'GIT_COMMITTER_DATE="$(git log -n 1 --format=%aD)" git commit --amend --reset-author --no-edit --date="$(git log -n 1 --format=%aD)"' HEAD~3
그런 다음 힘을 가합니다.
git push --force-with-lease
커밋 이름 및 이메일 글로벌 변경:
$ 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>"
힌트: 기타 상황 및 자세한 내용은 포스트 레퍼런스를 참조하십시오.
선호되는 답변, 사용 중인 답변git rebase -i
는 효율적이지만, 이 다른 답변에서 강조 표시된 바와 같이 편집하는 커밋 주위에 Marge가 있으면 복잡해집니다.또,git replace
'똑똑하다'git filter-branch
는 다른 브랜치 및 태그의 모든 이력을 다시 씁니다.일반적으로 이것은 필요 없습니다.
저는 Marge가 있어도 쉽게 대답할 수 있는 첫 번째 답변의 대안을 공유하고 싶었습니다. 경우에는 ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★.git rebase -i <earlier-commit>
기본 재설정을 진행하기 전에 먼저 해결해야 할 충돌이 있습니다.실제로 편집 명령보다 break 명령어를 사용하는 것이 더 쉽습니다.그리고 우리가 목표로 하는 약속에 따라 직접 기본을 재설정합니다.
예를 '어울리다'라고 가정해 git log
★★★★★★★★★★★…
commit a12afg
...
commit dloe7a
...
commit gh7ag1
...
commit qp3zaa
...
커밋의 gh7ag1
하면 git rebase -i gh7ag1
에디터에는 다음과 같은 내용이 표시됩니다.
pick dloe7a
pick a12afg
break 명령만 추가하면 됩니다.
break
pick dloe7a
pick a12afg
:wq
VI 사 with with withCtrl+O
Ctrl+X
nano)를 사용합니다.그리고 지금, 당신은 약속을 마치고 바로 돌아왔어요. git commit --amend
「 」, 「 」, 「 」등).git commit --amend -S --author="Your Name <your-email>"
합니다.git log --show-signature
이 맞으면 하면 됩니다.git rebase --continue
.
rebase에는 break 명령어를 여러 개 사용할 수 있습니다.계속은 다음 브레이크가 있는 경우 다음 브레이크로 이동하거나 나머지 커밋을 적용합니다(커밋이 로 마크되어 있는 경우).pick
를 참조해 주세요.
변경해야 하는 것이 마지막 커밋의 작성자이고 저장소를 사용하는 다른 항목이 없는 경우 다음과 같이 마지막 커밋을 취소할 수 있습니다.
git push -f origin last_commit_hash:branch_name
커밋의 작성자 이름을 변경합니다.
git commit --amend --author "type new author here"
열려 있는 에디터를 종료하고 코드를 다시 누릅니다.
git push
언급URL : https://stackoverflow.com/questions/3042437/how-to-change-the-commit-author-for-a-single-commit
'programing' 카테고리의 다른 글
설치된 MSI 설정의 제품 GUID를 어떻게 찾을 수 있습니까? (0) | 2023.04.28 |
---|---|
느낌표는 스위프트 언어로 무엇을 의미합니까? (0) | 2023.04.28 |
wpf 텍스트 상자에서 새 줄 시작 (0) | 2023.04.23 |
WPF - 이미지를 리소스로 Import (0) | 2023.04.23 |
R의 XLSX 패키지를 사용하여 Excel에서 data.frame을 인쇄하는 중 오류가 발생했습니다. (0) | 2023.04.23 |