체크 아웃하지 않고 분기 커밋을 다른 커밋으로 이동 아웃 된 분기의 분기 포인터를 이동하려면

체크 아웃 된 분기의 분기 포인터를 이동하려면 git reset --hard명령을 사용할 수 있습니다 . 그러나 체크되지 않은 분기의 분기 포인터를 이동하여 다른 커밋을 가리 키도록하는 방법 (추적 된 원격 분기와 같은 다른 모든 항목 유지)?



답변

임의의 심판을 위해 할 수 있습니다. 이것은 분기 포인터를 이동하는 방법입니다.

git update-ref -m "reset: Reset <branch> to <new commit>" refs/heads/<branch> <commit>

일반적인 형태 :

git update-ref -m "reset: Reset <branch> to <new commit>" <ref> <commit>

원하는 경우 reflog 메시지에 대한 nits를 선택할 수 있습니다. branch -f하나는 다른 것과 다르고 reset --hard정확하게 두 가지가 아닙니다.


답변

git branch -f <branch-name> <new-tip-commit>


답변

git reset --hard커밋 참조를 전달할 수도 있습니다 .

예를 들면 다음과 같습니다.

git checkout branch-name
git reset --hard new-tip-commit

나는 이런 식으로 자주하는 것을 발견했다.

이 역사를 가정

$ git log --decorate --oneline --graph
* 3daed46 (HEAD, master) New thing I shouldn't have committed to master
* a0d9687 This is the commit that I actually want to be master

# Backup my latest commit to a wip branch
$ git branch wip_doing_stuff

# Ditch that commit on this branch
$ git reset --hard HEAD^

# Now my changes are in a new branch
$ git log --decorate --oneline --graph
* 3daed46 (wip_doing_stuff) New thing I shouldn't have committed to master
* a0d9687 (HEAD, master) This is the commit that I actually want to be master


답변

토론을 풍부하게하기 위해 myBranch분기를 현재 커밋 으로 옮기려면 두 번째 인수를 생략하십시오.-f

예:

git branch -f myBranch


나는 rebase분리 된 HEAD 상태에 있을 때 일반적으로 이것을 수행합니다 🙂


답변

에서 gitk --all:

  • 원하는 커밋을 마우스 오른쪽 버튼으로 클릭하십시오.
  • -> 새로운 지점을 만듭니다
  • 기존 지점의 이름을 입력하십시오
  • 해당 이름의 이전 브랜치 교체확인 하는 대화 상자에서 return을 누르 십시오 .

기존 브랜치를 수정하는 대신 다시 생성 하면 추적 브랜치 정보가 손실됩니다 . (이것은 일반적으로 하나의 리모트 만 있고 로컬 브랜치가 리모트의 해당 브랜치와 이름이 같은 단순한 유스 케이스에는 문제가되지 않습니다. 자세한 내용은 주석을 참조하십시오.이 단점을 지적한 @mbdevpl.)

gitk대화 상자에 덮어 쓰기, 기존 수정 또는 취소의 3 가지 옵션이있는 기능이 있으면 멋질 것 입니다.


당신은 일반적으로 자신과 같은 명령 줄 마약 중독자있어,해도 git guigitk아주 능숙하게 그들이 허용 자식 사용의 부분 집합을 위해 설계되었습니다. git gui에서 인덱스에 인덱스를 선택적으로 스테이징하고 덩어리를 선택하는 것뿐만 아니라 커밋하는데도 사용하는 것이 좋습니다. .)

gitk 업스트림을 제출하기 위해 멋진 패치 시리즈로 변경 사항을 분류하거나 여러 분기로 중간에있는 것을 추적 해야하는 다른 항목을 추적하는 동안 몇 가지 지점을 추적하는 데 좋습니다.

그래픽 파일 브라우저가 열려 있지 않지만 gitk / git gui를 좋아합니다.


답변

권장 솔루션git branch -f branch-pointer-to-move new-pointerTortoiseGit :

  • “깃대 표시 로그”
  • “모든 지점”확인
  • 줄에서 분기 포인터를 (새 포인터)로 이동하십시오.
    • “이 버전에서 지점 작성”을 마우스 오른쪽 단추로 클릭하십시오.
    • “지점”옆에 이동할 지점의 이름을 입력하십시오 (지점 포인터에서 이동).
    • “기준”에서 새 포인터가 올바른지 확인하십시오.
    • “강제”확인
    • 확인

여기에 이미지 설명을 입력하십시오

여기에 이미지 설명을 입력하십시오


답변

솔직히, 나는 아무도 git push명령 에 대해 생각하지 않은 것에 놀랐습니다 .

git push -f . <destination>:<branch>

점 (.)은 로컬 저장소를 나타내며 대상이 “원격 상대방 뒤에” 있을 수 있으므로 -f 옵션이 필요할 수 있습니다 .

이 명령은 서버에서 변경 사항을 저장하는 데 사용되지만 결과는 원격 브랜치 ( <branch>)를 로컬 브랜치 ( <destination>) 와 동일한 커밋으로 이동하는 것과 동일합니다.