2016-07-05 2 views
1

두 지점 A와 B가 있습니다. 둘 다 서로 다른 커밋이 많은 마스터에서 분기되어 마스터가 먼저 이동했습니다. 내가 원하는 무엇힘내 : 한 지점에서 다른 지점으로 코드 덮어 쓰기

는 A. 즉와 B의 모든 변경 사항을 교체하고, B는 A.

내가/병합을 리베이스 사용하여 시도

정확히 동일한 코드가 있어야합니다. 심지어 -X는 B를 rebase하는 동안은 항상 충돌의 하중으로 실행하지만. 내가 코드를 얻을 수있는 방법이 있나요 How to copy one branch to another regardless changes?에 주어진하지만이 this-

Your branch and 'origin/B' have diverged, 
and have 6603 and 1823 different commits each, respectively. 

을 내 주면서

나는 충돌없이, B에 복사 된의 커밋/

git checkout B 
git reset --hard A 

를 시도? 도와주세요.

+0

'git checkout A & git pull --rebase && git push -f origin B' (이 **는 ** B를 A로 덮어 씀) –

+0

커밋 만 복사하려는 경우'git cherry-pick' 옵션입니다 –

+0

git pull --rebase && git push -f origin B -> B의 모든 변경을 A로 가져 오지 않겠습니까? – ghostCoder

답변

0

B에서 변경 한 모든 내용을 무시하려고하면 쓰레기처럼 보이지만 실제로는 분기 포인터를 강제로 업데이트 할 수 있습니다.

git branch -f A B 
0
git checkout A -B B 

체크 아웃 A의 작업 트리, 그것을 분기 이름 B을주고있다. (B이 이미 존재하기 때문에, -B (큰 B)를 오버라이드 (override) 할 필요가있다.)

이 효과적으로이 동일하다 :

# Checkout the branch 'A' and make the working tree reflect this 
git checkout A 

# Create/override a branch 'B' at this current position 
git checkout -B B 

최종 결과는 실질적으로 단지 포인터가있는 지점 () 'A'와 'B'는 똑같은 커밋을 가리 킵니다.

N.B.이 결과는 git checkout B && git reset --hard A과 거의 같습니다. 이제

, 당신은 메시지를 다양한 필요했다 origin/B과 관련되는 것 때문에,이 시점에서 할 수있는 두 가지 거기 : 당신은에 의해 새로운 B을 반영하기 위해 origin/B를 업데이트 할 수 있습니다

  1. 을 밀어 : (이것은 당신이 origin/B에 원래 있었다 커밋이 멸망 할 것이라고 걱정하지 않습니다 제공됩니다.)

    push origin B --force 
    
  2. 어떤 이유에서든 강제로 밀어 넣기를 수행 할 수 없습니다 (서버에만 전달)? B 아래에 있던 커밋 기록을 유지하려는 경우 - 변경 사항이 아닌 경우. 이 경우, 조금 더 복잡입니다 : (이 사용 사례는 매우 드물다 그래서 나는 완전히 확실하지 않다이 필요하시면) :

    이 병합하게
    git checkout A --detach 
    git merge -s ours B 
    git checkout -B B 
    

    커밋이 진행 A, 그 실제로 파일을 변경하지 않고 BA에 병합합니다.이 새로운 Borigin/B에서 벗어나지 않으므로 정상적으로 푸시 될 수 있습니다.

+0

하지만 A와 B가 별도로 존재하기를 바랍니다. A에서 B로 모든 코드/커밋을 복사하고 B에서 모든 것을 무시하려는 경우 – ghostCoder

+0

@ghostCoder 별도로 존재합니다. 두 가지 브랜치 *는 정확히 "커밋 내역"과 코드를 갖습니다. – antak

0

당신의 명령은 해당 지역의 지점을 다시 BA에 모두 옳았다.
로컬 브랜치 B이 원격 브랜치 B과 다른 것을 알리는 메시지입니다.
리모컨이 강제 푸시를 허용하는 경우 실제로 수행하려는 경우 B ~ origin/B의 강제 푸시를 git push -f origin B으로 수행하면됩니다.
그러나 게시 된 기록을 다시 쓰고 있기 때문에 B에서 작동하는 다른 개발자는 작업의 리베이스에서 수동으로 복구해야하므로 다른 개발자를 화나게 할 것입니다.

관련 문제