2014-02-25 1 views
0

을 거부, 나는 본질적으로했다 :힘내 퍼즐 - '주변에서 작업 할 내 로컬 Git 저장소에서 비 빠르게 forward`

* commit A 
| 
* commit B (master) (origin/master) 

좀 변경 한 지금, 그래서 :

* commit A 
|\ 
| * commit B (develop) (origin/master) 
| 
* commit C (master) 

I (beanstalkapp.com에서 호스팅) 망할 놈의 repo 싶습니다이를 반영하기 위해 업데이트와 같이합니다 :

* commit A 
|\ 
| * commit B (develop) (origin/develop) 
| 
* commit C (master) (origin/master) 

내가 어떻게 할 수 있습니까? git pushdenying non-fast-forward refs/head/master으로 실패합니다. 이 문제를 해결할 수있는 방법은 무엇입니까?

내 레포는 아직 체계적으로 정리되지 않았으므로, 나는 그것을 한 번에 모두 리팩토링하고 싶습니다.

답변

2
git checkout master 
git merge origin/master strategy=ours 
git push origin master 

'우리'전략은 AB 커밋 사이의 모든 변경 사항을 무시하고, "가짜"병합 (이름 만 병합)을 수 있습니다. git push 그러면 이전 origin/master과 새로운 master 사이의 빨리 감기 커밋을 행복하게 수행합니다.

결과 :

* commit A 
|\ 
| * commit B (develop) 
| | 
* | commit C 
|/
* commit D, but identical to C (master) (origin/master) 
+0

이것을 지점에도 적용 할 수 있습니까? 또한 체크 아웃과 병합 사이에 변경 사항이 적용된 것 같습니다. – pal4life

+0

@ pal4life 예. 주인은 다른 어떤 것과 마찬가지로 평범한 지부입니다. 두 번째 질문이 확실하지 않습니다. –

2

강제로 밀어 넣을 수 있습니까?

그렇지 않으면 지점을 삭제할 수 있습니까? 이 경우 이전 분기를 삭제하고 새 분기를 푸시 할 수 있습니다. 이는 본질적으로 강제 푸시와 같습니다.

+0

콩 줄기 푸시 강제 허용하지 않는, 그리고 병합되지 않은 지점을 삭제할 수 없습니다. 내가 생각하기로는 원래의 주인을 새로운 주인으로 합치는 것이지만 새로운 주인을 그대로 유지하는 것입니다 (즉, A와 B 사이의 모든 변화를 버리는 것). 가짜 병합의 종류). –

+0

beanstalk처럼 보이는 것이 정말 그런 작업에서 당신을 지키고 싶어합니다. (실제로 게시 된 기록을 변경하려고 시도한 후에는 ...) 확신 할 수 있다면 전체 저장소를 삭제하고 새 콘텐츠로 다시 만들 수 있습니다. - 또는 단지'git revert '를 사용하여 변경 사항을 "실행 취소"하십시오. 이로 인해 불필요한 커밋이 남지만 적어도 역사를 변경하지 않고 올바른 분기 컨텐트를 만들 수 있습니다. – michas

+0

해결 방법을 찾았습니다. 내 대답을 확인하십시오. –

관련 문제