체크 아웃하지 않고 다른 분기를 현재로 재설정


110

Git 워크 플로에 대한 스크립트를 작성 중입니다.

체크 아웃하지 않고 다른 (기존) 분기를 현재 분기로 재설정해야합니다.

전에:

 CurrentBranch: commit A
 OtherBranch: commit B

후:

 CurrentBranch: commit A
 OtherBranch: commit A

동등한

 $ git checkout otherbranch 
 $ git reset --soft currentbranch
 $ git checkout currentbranch

(참고 --soft: 작업 트리에 영향을주고 싶지 않습니다.)

이게 가능해?


Egit에서도 이것이 가능한지 아는 사람이 있습니까?
zedoo

답변:


84

설명하는 워크 플로는 동일하지 않습니다. 수행 reset --hard하면 작업 트리의 모든 변경 사항이 손실됩니다 (원할 수 있음 reset --soft).

필요한 것은

git update-ref refs/heads/OtherBranch refs/heads/CurrentBranch

3
남자는,이 불필요한없이 일을하고자하는 refs/heads/...
ELLIOTTCABLE

41
이를 수행하는 훨씬 더 좋은 방법은 git push . current:other. 이것은 refs/heads(/ cc @elliottcable) 없이 작동 하며 체크 아웃 된 브랜치를 업데이트하지 못하게합니다. +current:other업데이트가 빨리 감기가 아닌 경우 -f를 전달 (또는 사용 ) 해야 할 수 있습니다.
Lily Ballard

4
또한 -m 'some text'인수를 사용 git reflog OtherBranch하여 "CurrentBranch에 동기화"와 같이 명령에 의해 표시되는 참조 업데이트의 이유를 기록 할 수 있습니다 . 나중에 그 이유를 기억하는 것이 유용 할 수 있습니다.
Levi Haskell

18
왜 사용하는 것 git update-ref refs/heads/OtherBranch refs/heads/CurrentBranch또는 git push . CurrentBranch OtherBranch당신이 많은 청소기 (IMO)를 사용할 수있을 때 git branch -f OtherBranch CurrentBranch대신? (참조 자식 지점 -f에 대한 내 대답은 아래를)
콜린 D 베넷에게

1
@BenHymers 그래서 "git push"의 맨 페이지는 거짓말입니다. 명령을 "Update remote refs ..."로 설명합니다. 실제로 로컬 참조를 잘 업데이트 할 수 있습니다.
Kaz 2015

228

실행 otherbranch과 동일한 커밋을 가리 키도록 설정currentbranch

git branch -f otherbranch currentbranch

-f(강제) 옵션을 말한다 git branch 예, 나는 정말 평균 기존 덮어 otherbranch새로운 하나를 참조 .

로부터 문서 :

-f-

이미있는 경우로 재설정합니다. -f없이 git branch는 기존 분기 변경을 거부합니다.


6
이것이 가장 쉬운 대답입니다. 감사!
Robert Karl

나는 fatal: Cannot force update the current branch.이것을 시도 할 때 얻는다 .
Fuad Saud

4
@FuadSaud는 이미 otherbranch체크 아웃 했기 때문 입니다. 이 SO 질문은 특히 다른 것을 재설정하는 것에 관한 것입니다. 분기를 다른 커밋으로 재설정하는 것입니다 (예 : 체크 아웃 된 분기를 재설정하지 않음). 원하는 것은 현재 분기를 재설정하는 것입니다.git reset targetbranch 를 가리 키도록 강제로 현재 분기를targetbranch 입니다. --hard작업 트리를 해당 컨텐츠에 강제로 추가 하려면 추가하십시오 . 또는 --soft인덱스를 그대로두고 분기 자체 만 변경합니다.
Colin D Bennett

그래, 나는 리셋에 대해 알고있다. 내가 찾던 것은 루틴 내에서 체크 아웃 된 내용과 관계없이 항상 로컬 마스터를 업스트림 / 마스터로 지정하는 방법이었습니다. 나는 그것을 branch -f할 수 있다고 생각 했다.
Fuad Saud

9
이모,이게 받아 들여진 대답이어야합니다. 이것은 내 작업 흐름을 크게 향상 시켰습니다!
lethal-guitar

23

이 명령으로 언제든지 브랜치를 동기화 할 수 있습니다.

$ git push . CurrentBranch:OtherBranch -f

또한 -f 없이는이 명령 세트를 대체합니다.

$ git checkout OtherBranch
$ git merge CurrentBranch
$ git checkout CurrentBranch

CurrentBranch에서 모든 파일을 커밋 할 필요가 없어 다른 브랜치로 전환 할 수 없을 때 유용 할 수 있습니다.


"원격 : 오류 : 비 빨리 감기 거부"가 발생할 수 있음
Basilevs

3
-f절대적으로 불가피하지 않는 한 옵션을 포함 하지 않을 것입니다. 제 경우에는 그것 없이는 잘 작동합니다.
Melebius
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.