2013-04-19 2 views
2

참고 : git push -f 개의 질문은 일반적인 것으로 알고 있지만,이 특정 질문에 대한 답변은 어디에서나 쉽게 찾을 수 없습니다. 내 문제를 다소 해결하는 것만이 아니라 포괄적 인 대답을 원합니다. 문제의 끝에서 나는 해결책을 스스로 제시한다.git push -f : 다른 사람들이 따라 잡을 수있는 방법은 무엇입니까?

저는 (직장에서) 가지 않아야 할 부분에 몇 가지 변경 사항을 적용했습니다. 나는 이미 git revert을 변경했지만, 팀 코디네이터 중 한 명이 사실 git reset <old commit> && git push -f을 원했기 때문에 회귀 커밋에 의해 역사가 어지럽게 흩어지지 않았습니다. 해당 지사를 사용하는 사람은 거의 없으므로 위험할만한 가치가 있다고 생각했습니다.

그것은 효과가 있었지만 이미 내 커밋을 가져온 사람들이 실수로 원격 지점을 다시 앞으로 감쌀 수 있습니다. 역사는 아직 갈라지지 않았기 때문에 (단지 오래된 커밋으로 재설정되었지만, 그 위에 다른 커밋을하지 마십시오).

내가 git reset <old HEAD commit> && git status인데 힘내라는 말은 origin/<branch>보다 앞섰기 때문에 내가 git push이라고 다시 말하면, Git은 그냥 빨리 감기합니다.

git pull은 repo가 ​​최신이며 되돌릴 수 없다 (이는 어쨌든해야한다고 생각하지 않음)라고합니다. 그렇다면 모두가 오른쪽 헤드로 돌아가 origin/<branch>에 있고 거기에서 일하도록해야합니까? 해당 지점에서 작업을 재개하기 전에 모두에게 git reset origin/<branch>을 요청해야합니까? 나는 정말로 더 쉽고 오류가 적은 것을 원했다.

공유 저장소에서 지점을 재설정하지 말아야한다는 것을 알고 있지만 어떻게되는지 알고 있습니다. 때때로 당신은 모험심을 느낍니다. 또는 상급자가 당신에게 그것을 요청했는데 잘못되었다는 것을 알지만 어쨌든 교육적인 경험이 될 수 있습니다 : P

답변

3

되돌리기가 발생했다는 사실을 해당 지점에 알리려는 모든 사람들과 의사 소통을해야합니다. 로컬 저장소를 동기화해야합니다.

다른 사람이 잘못된 커밋을 다시 푸는 것을 방지하기 위해 git 후크로 멋진 트릭을 시도해보십시오. 하지만 거의 사용하지 않는 지점이라면 의사 소통에만 의지하는 것이 좋습니다. (어떤 경우에도이 작업을 수행해야합니다.) 공유 지점의 깨끗한 체크 아웃을 위해

:

git reset origin/<branch> 

트릭을 할해야합니다.

누군가가 이미 나쁜 커밋 위에 지사를 만든 경우 로컬 커밋을 제거하여 업스트림이 다시 업 스트림되지 않도록해야합니다. 이 대화 형 옵션을 git rebase를 통해 수행 할 수 있습니다

git rebase -i origin/<branch> 

이는 상류에서 분기부터 현지 지점에있는 커밋의 목록을 사용자에게 제공합니다. 나쁜 커밋은이 목록에 나타나고 삭제되어야합니다.

+0

맞습니다.하지만 잘못된 HEAD에 갇혀 있거나 역사를 저질렀을 때를 대비해서 내가 정확히 무엇을해야한다고 말합니까? 'git reset origin/'이라고 그냥 말해야합니까? 자신의 변경 사항이 패치에 저장되기 전에 올바른 커밋 이력에 다시 적용될 수 있습니다. –

+0

이것이 거의 확실한 답이라고 생각합니다. 합법적 인 커밋 만 리베이스 된 방식을 지정할 수 있습니까?rebase 할 커밋 범위를 지정하는 방법은 무엇입니까? –

+0

아,'-i'은 대화식으로 만들어서 이미 rebase 할 대상을 선택할 수 있습니다. 고마워, 나는 당신의 대답에 그것을 추가 할 것이다. –