2017-01-15 5 views
1

저는 지점이 있고, 거의 모든 커밋에 잘못된 이메일이있었습니다 "[email protected]" 그 이메일을 현재 이메일 "[email protected]"으로 변경하고 싶었습니다.힘내 - 지점 커밋 내역이 중복되었습니다

git filter-branch --commit-filter 'if [ "$GIT_COMMITTER_EMAIL" = "[email protected]" ]; 
    then 
    export GIT_AUTHOR_NAME="Sandrina Pereira"; 
    export [email protected]; 
    export GIT_COMMITTER_NAME="Sandrina Pereira"; 
    export [email protected]; 
    fi; git commit-tree "[email protected]"' 

See here the difference between COMMITTER and AUTHOR :

검색하는 동안, 나는이를 발견했다. 실제로 커밋 권한을 변경하는 것이 중요합니다. 그렇지 않으면 위트가 mynew 커밋을 수행했음을 oldnew 원래 커밋이라고 표시합니다. 그리고 저자와 커미터를 모두 변경하고 싶습니다.

그렇다면 나는 git commit -am "change author", git pullgit push을했습니다.

문제는 당신이 can see here

내가 그 커밋을 삭제하는 방법을 검색하고 내가 이것을 발견 지금 내 모든 커밋이 중복되어 있다는 것입니다 :

git filter-branch --commit-filter ' 
    if [ "$GIT_AUTHOR_EMAIL" = "[email protected]" ]; 
    then skip_commit "[email protected]"; 
    else git commit-tree "[email protected]"; 
fi' HEAD 

그러나 나는 아직 그것을 시도하지 않았다 .. 어떻게해야합니까?

그리고 다음 번에 전자 메일 커밋을 바꾸려면이 혼란을 피하기 위해 올바른 명령이 무엇입니까?

답변

1

귀하의 질문은 몇 가지 다른 질문과 중복되어 있습니다. 그러나이 질문에 대한 답변이 나올 것입니다.

this question에서 git filter-branch을 사용 했으므로 소수의 커밋으로 이메일을 수정했습니다. 이것은 성공했지만, 다음과 같은 잘못된 액션을 취했다.

그런데 나는 git commit -am "change author", git pull 및 git push를했다.

커밋을 할 필요가 없다고 생각하지만 문제가있는 것은 git pull입니다. 이것은 리모트의 브랜치의 대체 오리지날 버전을 가져 와서 로컬 브랜치에 합병했다. 이로 인해 다시 작성한 커밋이 복제되는 결과가 발생했습니다. 다음은 filter-branch을 실행 한 후 즉시 했어야 것입니다 :

git push --force origin master # assumes your branch is master; change if needed 

이 업데이트 이메일 주소를 포함, 로컬 만든 버전으로 대체하는 원격 지사를 덮어 쓸 것입니다. filter-branchgit rebase과 같이 Git 지점의 기록을 다시 작성합니다. 결과적으로 브랜치를 리모컨으로 가져 오는 작업이 끝나면 원격 기록을 다시 작성하기 위해 항상 강제 푸시를 수행합니다.

현재 상황을 복구하는 데 유용한 정보는 this SO question을 참조하십시오. 그러나 강제 강제 적용만으로는이 문제가 발생하지 않을 것입니다.

+0

다시 설명해 주셔서 감사합니다. 나는 git 전문가가 아니므로이 명령은 여전히 ​​안개입니다. 나는 그 질문을주의 깊게 읽고이 혼란을 해결하려고 노력할 것이다. –

+0

내가이 상황에 처한 경우, 내가 시작한 곳으로 돌아 가려고합니다. 아마도 당신은 아주 비슷한 다른 지류를 가지고있을 것입니다.작업이 끝나면 강제로 밀어 넣으십시오. 리모컨에서 물건을 꺼내지 마십시오. 'filter-branch' 후에는 브랜치의 오래된 리모트 버전을 유효하게 처리해야합니다. –

+1

와우, 좋은 생각 이니, 나는 또 다른 가지를 가지고있다. 나는 그 사본을하고 당신이 말한 것을 시도한 다음 그것을 강제로 병합하도록 강요 할 것입니다. –