source

체크아웃하지 않고 분기 포인터를 다른 커밋으로 이동합니다.

manysource 2023. 4. 25. 22:36

체크아웃하지 않고 분기 포인터를 다른 커밋으로 이동합니다.

체크아웃한 지점의 지점 포인터를 하려면 지점 포인터를 사용할 수 있습니다.git reset --hard체크 아웃되지 않은 브랜치의 포인터를 다른 커밋으로 하려면 어떻게 합니까(원격브랜치 추적과 같은 다른 모든 것을 유지)?하지만 체크 아웃되지 않은 지점의 분기 포인터를 다른 커밋(추적된 원격 지점과 같은 다른 모든 데이터를 유지)으로 이동하려면 어떻게 해야 합니까?

git branch --force <branch-name> [<new-tip-commit>]

만약이다new-tip-commit생략하면 현재 커밋으로 기본 설정됩니다.

new-tip-commit지점 이름(예: 마스터, 오리진/마스터)일 수 있습니다.

임의 참조에 대해 수행할 수 있습니다.분기 포인터를 이동하는 방법은 다음과 같습니다.

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

여기서, where where에 where-m이겁니다.

일반적인 형식은 다음과 같습니다.

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

리플로그 메시지에 대한 내용은 '나는 믿는다'라는 글을 믿습니다.branch -f하나는 다르다, 라고 하는 것과 다릅니다.reset --hard하나, 그리고 이건 정확히 둘 다 아니에요

패스도 할 수 있어요.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


는 보통 이렇게 해요.rebaseDetached HEAD 일 때 :)로 이동합니다.

Git git-switch2.23.0은 이를 위해 사용할 수 있는 명령어를 도입했습니다.

git switch -C <branch-name> [<start-point>]

»는 다음과 같습니다.-C대소문자 C) 옵션은 (C)가 되다<branch-name>이미 존재합니다. 재설정됩니다.<start-point>요.

□□□□□□□□□-c(소문자 C) 새 분기를 만들려고 하지만 분기가 이미 있는 경우 실패합니다.

<start-point>해시, 태그 또는 다른 분기 이름이 될 수 있습니다.

다음에서 다음을 수행합니다.

  • 원하는 커밋을 마우스 오른쪽 버튼으로 클릭합니다.
  • -> 분기를 만듭니다.
  • 기존 지점의 이름을 입력합니다.
  • 해당 이름의 이전 분기 교체를 확인하는 대화 상자에서 Return 키를 누릅니다.

기존 분기를 수정하는 대신 다시 만들면 추적 분기 정보가 손실됩니다.원격이 하나뿐이고 로컬 지점의 이름이 원격의 해당 지점과 동일한 단순한 사용 사례에서는 일반적으로 문제가 되지 않습니다.자세한 내용은 주석을 참조하십시오. 이 단점을 지적해 주셔서 @mbdevpl에 감사드립니다.)

★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★.gitk에는 대화 상자에 덮어쓰기, 기존 수정 또는 취소의 세 가지 옵션이 있는 기능이 있습니다.


에는 나처럼 명령줄 중독자일지라도, ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★.git gui그리고요.gitkgit 사용의 서브셋에 매우 잘 설계되었습니다.gui의 인덱스에 hunk를 선택적으로 스테이징하고 commit.git gui를 사용하는 것을 강력히 권장합니다(crl-s, ctrl-enter) 라고 합니다.

gitk변경 내용을 업스트림에 제출하기 좋은 패치 시리즈로 분류하거나 여러 지사에서 진행 중인 작업을 추적해야 하는 다른 모든 지사를 추적하는 데 유용합니다.

그래픽 파일 브라우저도 열어놓지 않았지만 gitk/git gui를 좋아합니다.

TortoiseGit의 권장 솔루션은 다음과 같습니다.

  • "Git Show 로그"입니다.
  • "모든 지점"을 선택하십시오.
  • 분기 포인터를 이동할 라인(새 포인터)에서 다음을 수행합니다.
    • 마우스 오른쪽 버튼으로 "이 버전에서 지점 만들기"를 클릭합니다.
    • "지점" 옆에 이동할 지점의 이름을 입력합니다(지점-이동 지점).
    • "Base On"에서 새 포인터가 올바른지 확인합니다.
    • "강제"를 선택하십시오.
    • 네 알겠습니다

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

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

솔직히 아무도그 생각을 안 했다는 게 놀랍네요git push이겁니다.

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

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

이 은 변경 을 서버에 저장하는 데 사용되지만 결과는 원격 지점(즉, 원격 지점)을 이동하는 것과 동일합니다.<branch>로컬 지점과 동일한 커밋( )으로 이동합니다<destination>을(를) 참조하십시오.

체크아웃되지 않은 분기를 다른 커밋으로 이동하려면 -f 옵션을 사용하여 git branch 명령을 실행하는 것이 가장 쉬운 방법입니다. 이 옵션은 분기 HEAD가 가리키는 위치를 결정합니다.

git branch -f <branch-name> (<sha1-commit-hash> or <branch-name>)

예를 들어 로컬 개발 분기가 원격(오리진) 개발 분기를 추적하도록 하려면 다음과 같이 하십시오.

git branch -f develop origin/develop

이동하려는 지점이 현재 지점인 경우에는 작동하지 않으므로 주의하십시오.분기 포인터를 이동하려면 다음 명령을 실행합니다.

git update-ref -m "reset: Reset <branch-name> to <sha1-commit-hash>" \
  refs/heads/<branch-name> <sha1-commit-hash>`

git update-ref 명령은 ref에 저장된 개체 이름을 안전하게 업데이트합니다.

호프, 제 답변이 도움이 되었어요.정보의 출처는 이 조각입니다.

파일을 엽니다..git/refs/heads/<your_branch_name>저장된 해시를 지점 헤드를 이동할 해시로 변경합니다.텍스트 편집기를 사용하여 파일을 편집하고 저장하기만 하면 됩니다.수정할 분기가 현재 활성 분기가 아닌지 확인하십시오.

면책 사항: 아마도 권장되는 방법은 아니지만, 일을 완수합니다.

체크아웃된 분기의 경우, 가리키려는 커밋이 현재 분기의 이전인 경우(현재 분기의 마지막 커밋을 실행 취소하지 않는 한 실행되어야 함) 간단히 다음을 수행할 수 있습니다.

git merge --ff-only <commit>

이것은 보다 부드러운 대안을 만듭니다.git reset --hard위에 설명된 경우를 제외하고 이 기능은 실패합니다.

체크아웃되지 않은 분기에 대해 동일한 작업을 수행하려면 다음과 같습니다.

git push . <commit>:<branch>

언급URL : https://stackoverflow.com/questions/5471174/move-branch-pointer-to-different-commit-without-checkout 입니다.