저자를 변경하기 위해 Git에서 여러 커밋을 수정하는 방법
Git에서 일련의 커밋을 수행했으며 이제는 사용자 이름과 사용자 이메일 속성을 올바르게 설정하는 것을 잊어 버렸습니다 (새 컴퓨터). 아직 커밋을 저장소에 푸시하지 않았으므로 커밋하기 전에 어떻게 커밋을 수정할 수 있습니까 (마스터 브랜치에서 3 개의 최신 커밋 만 해당)?
나는 git reset
and을 보고 git commit -C <id> --reset-author
있었지만, 내가 올바른 길을 가고 있다고 생각하지 않습니다.
손끝에 필터 브랜치의 힘이 있으면 Rebase / amend는 비효율적입니다.
git filter-branch --env-filter 'if [ "$GIT_AUTHOR_EMAIL" = "incorrect@email" ]; then
GIT_AUTHOR_EMAIL=correct@email;
GIT_AUTHOR_NAME="Correct Name";
GIT_COMMITTER_EMAIL=$GIT_AUTHOR_EMAIL;
GIT_COMMITTER_NAME="$GIT_AUTHOR_NAME"; fi' -- --all
(명확성을 위해 여러 줄로 나누지 만 필수는 아님)
작업이 끝나면 결과를 검사하여 의도하지 않은 것을 변경하지 않았는지 확인하십시오!
대화식 rebase 접근 방식은 exec와 함께 사용하면 매우 좋습니다. rebase의 특정 커밋 또는 모든 커밋에 대해 쉘 명령을 실행할 수 있습니다.
먼저 git author 설정을 설정하십시오.
git config --global user.name "John Doe"
git config --global user.email johndoe@example.com
그런 다음 지정된 SHA 이후의 모든 커밋에 대한 작성자를 재설정
git rebase -i YOUR_SHA -x "git commit --amend --reset-author -CHEAD"
변경 사항을 확인하는 편집기가 나타납니다. 여기에서해야 할 일은 저장하고 종료하는 것입니다. 각 커밋을 거쳐 -x 플래그에 지정된 명령을 실행합니다.
아래 @Dave의 의견에 따라 원본 타임 스탬프를 유지하면서 작성자를 변경할 수도 있습니다.
git rebase -i YOUR_SHA -x "git commit --amend --author 'New Name <new_address@example.com>' -CHEAD"
마지막 커밋에 대해서만 작성자를 변경하려면
git commit --amend --author 'Author Name <author.name@mail.com>' --no-edit
마지막 N 커밋의 작성자 만 변경한다고 가정합니다.
git rebase -i HEAD~4 -x "git commit --amend --author 'Author Name <author.name@mail.com>' --no-edit"
노트
--no-edit
플래그 차종은 확인이git commit --amend
추가로 확인을 요구하지 않습니다- 을 사용할 때
git rebase -i
작성자를 변경할 커밋을 수동으로 선택할 수 있습니다.
편집 한 파일은 다음과 같습니다.
pick 897fe9e simplify code a little
pick abb60f9 add new feature
exec git commit --amend --author 'Author Name <author.name@mail.com>' --no-edit
pick dc18f70 bugfix
나는 당신이 찾고있는 것이 믿습니다 git rebase --interactive
특정 커밋으로 재설정 한 다음 커밋을 추가하거나 그룹화하여 히스토리를 던질 수 있습니다.
여기에 https://web.archive.org/web/20100213104931/http://blog.madism.org/index.php/2007/09/09/138-git-awsome-ness-git-rebase에 대한 설명이 있습니다. -인터렉티브
몸을 굽히고 수정하는 것이 안전하지 않다면 이런 식으로 할 수 있습니다. 동시에 어쨌든 할 글로벌 설정을 설정하게 될 것입니다.
git reset HEAD~
(마지막 커밋 취소)
git config --global user.name "Your Name"
git config --global user.email you@example.com
git commit -m "message"
이 방법은이 목적을 위해 github에 의해 문서화되었습니다. 단계는 다음과 같습니다.
- 터미널을 열고하게 노출 된 당신의 repo의 복제를
git clone --bare https://github.com/user/repo.git
cd repo
- 편집 다음 스크립트 (교체
OLD_EMAIL
,CORRECT_EMAIL
및CORRECT_NAME
)
#!/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
- Copy/paste the script into your terminal and press enter to run it.
- Push your changes with
git push --force --tags origin 'refs/heads/*'
and you're done!
참고URL : https://stackoverflow.com/questions/4981126/how-to-amend-several-commits-in-git-to-change-author
'Programing' 카테고리의 다른 글
콘텐츠에는 id 속성이 'android.R.id.list'인 ListView가 있어야합니다. (0) | 2020.06.10 |
---|---|
.Net 어셈블리의 PublicKeyToken 얻기 (0) | 2020.06.10 |
장고 클래스 기반 뷰에서 permission_required 데코레이터를 사용하는 방법 (0) | 2020.06.10 |
ASP.NET MVC에서 View Model을 JSON 객체로 변환하는 방법은 무엇입니까? (0) | 2020.06.10 |
Guzzle 6 : 응답을위한 더 이상 json () 메소드 (0) | 2020.06.10 |