2016-08-08 1 views
1

나는 꽤 새로운 자식이며 수은에서 왔습니다. 나는 뭔가 잘못하고 밀어 냈지만, 일부 팀원은 이미 이러한 잘못된 변화를 뽑을 수있었습니다. 따라서 reset --hard; push -f은 (는) 옵션이 아닙니다. git에게 내가 변경 사항을 적용하여 2 커밋이 되었기 때문에 변경 사항을 적용하고 싶다고 말할 수 있습니까?재설정없이 다시 커밋으로 되돌릴 수 있습니까?

master : 나는 그들이 commit 2에 있었던 것과 같은이 될 수 있도록 commit 5 파일을 변경하도록 변화를 생산하는 이눔 할

commit 4 <<--- Remote/local master's head 
^
    | 
    | 
commit 3 
^
    | 
    | 
commit 2 <<-- I want git to craft changes so that commit 5 
^   is the same as commit 2 
    | 
    | 
    | 
commit 1 

나는 같은 것을 의미한다.

할 수 있습니까?

답변

3

당신은이 자식 되돌리기를 사용하여 커밋 revert 수 있습니다

git revert commit3 commit4 

이 커밋 "반대"를 만들 것입니다, 당신은 다른 커밋에서 확인 한 변화를 망치다 것이다.

-f 없이는 내역이 여전히 빨리 앞으로 전달됩니다.

+0

그러나 모든 커밋을 지정하는 것을 피할 수 있습니까? 나는 모든 커밋을'commit x'에서'commit y'로 되돌리고 싶다고 git에게 알려주는 방법이있을 수 있습니까? – user3663882

+0

아니, 내가 아는 한 방법이 없다. 'commit3 ... commit4'를 사용하는 것은 너무 위험하기 때문에, git은 기본적으로 그것을 방지합니다. – blue112

+0

알았어. 그래서 우리가 뭔가 잘못했다면 커밋을 수동으로 되돌려 야합니다. 고맙습니다. – user3663882

1

팀원을 강제로 밀어 넣는 데는 아무런 문제가 없습니다. 당겨 받기 (git reset --hard sha1-of-old-good-commit) 전에 저장소를 재설정하고 변경 사항을 다시 가져 오면됩니다. 더욱이, 만약 당신이 "사설"작업 브랜치를 선택했다면, 그 브랜치에 전혀 신경 쓰지 말아야합니다. 문제는 master이나 다른 브랜치를 병합해야합니다.

그래서 역사적으로 문제를 최소화하십시오. 재 작성 (그것은 git의 멋진 기능이며, 그것을 사용하는 것이 좋으며 부정 할 필요가 없습니다!) - 항상 사설 브랜치에 커밋합니다 : 브랜치에서 리베이스/스쿼시/편집을하는 것이 안전 할 것입니다. 마스터 "지점.

관련 문제