programing

특정 커밋에서 분기점을 만들려면 어떻게 해야 합니까?

topblog 2023. 5. 3. 20:45
반응형

특정 커밋에서 분기점을 만들려면 어떻게 해야 합니까?

Git에서는 분기가 커밋에 대한 포인터라고 알고 있습니다.

특정 커밋에 특정 분기점을 지정하려면 어떻게 해야 합니까?만들고 싶다고 해요.master을 가리키다.1258f0d0aae...,그걸 어떻게 하는 거죠?

만들 수 있습니다.master을 가리키다.1258f0d0aae이쪽:

git checkout master
git reset --hard 1258f0d0aae

하지만 여러분은 이것을 하는 것에 대해 조심해야 합니다.그것은 그 지부의 역사를 다시 쓰는 것이 좋을 것입니다.만약 당신이 그것을 게시했고 다른 사람들이 그 지점에서 일하고 있다면 그것은 문제를 일으킬 것입니다.

그리고 또.git reset --hard명령을 실행하면 커밋되지 않은 변경 사항(예: 작업 트리 또는 인덱스의 변경 사항)이 모두 삭제됩니다.

다음을 사용하여 분기에 강제로 업데이트할 수도 있습니다.

git branch -f master 1258f0d0aae

하지만 Git은 당신이 그것을 하도록 허락하지 않을 것입니다.master그 당시에.

현재 지점 마스터를 사용하지 않는 경우 매우 쉽습니다.

git branch -f master 1258f0d0aae

이것은 바로 여러분이 원하는 것입니다.가리키고 있습니다.master지정된 커밋에서 다른 작업은 수행하지 않습니다.

현재 마스터에 있는 경우 먼저 분리된 헤드 상태로 전환해야 합니다.다음 두 가지 명령 시퀀스를 권장합니다.

git checkout 1258f0d0aae    #detach from master
git branch -f master HEAD   #exactly as above

#optionally reattach to master
git checkout master

그러나 분기 지점의 위치를 명시적으로 조작하면 분기가 더 이상 도달할 수 없는 커밋을 남길 수 있으므로 가비지 수집의 대상이 될 수 있습니다.그러니, 타자를 치기 전에 생각해 보세요!


이 방법이 더 좋습니다.git reset --hard인덱스나 작업 디렉토리의 어떤 것도 파괴하지 않기 때문에 접근.

git reset --hard 1258f0d0aae

하지만 후손이 다음 사이에 범죄를 저지르면 조심해야 합니다.1258f0d0aae그리고.HEAD다른 분기에서는 참조되지 않으므로 복구하는 것이 번거롭지만 불가능하지는 않습니다. 따라서 현재 "백업" 분기를 생성하는 것이 좋습니다.HEAD체크아웃master원하는 커밋으로 재설정합니다.

또한 이전에 커밋되지 않은 변경 사항이 없는지 확인합니다.reset --hard그들은 진정으로 상실될 것입니다(복구할 방법이 없습니다).

git branch -f <이름> <commit>

저는 마크 롱에어의 솔루션과 코멘트를 따르고 연기하기 전에 그것들을 읽는 것을 추천하지만, 강조해야 한다고 제안합니다.

git branch -f <branchname> <commit>

여기 제가 이것을 해야 했던 시나리오가 있습니다.

시나리오

잘못된 분기에서 개발하여 재설정해야 합니다.

정상적으로

일부 소프트웨어를 깨끗이 개발하고 릴리스합니다.

지금까지는 좋습니다.

잘못된 분기에서 개발

실수:추가로 개발하는 동안 실수로 릴리스 분기에 머무릅니다.

실수후

실수를 깨닫습니다.

"아이고! 실수로 릴리즈 브랜치에서 개발했습니다."작업 공간은 진행 중인 작업을 나타내는 절반의 변경된 파일로 어수선할 수 있으며, 우리는 손을 대거나 엉망으로 만들고 싶지 않습니다.현재 상태를 추적하기 위해 몇 가지 포인터를 뒤집고 릴리스 분기를 원래 상태로 되돌리고 싶습니다.

지금까지 커밋된 작업을 유지하고 있는 최신 개발을 위한 분기를 만들고 전환합니다.

git branch development
git checkout development 

다른 분기로 변경됨

분기 수정

이제 우리는 문제 상황에 처해 있고 해결책이 필요합니다!(릴리스 분기를 개발을 진행하는 과정에서) 실수를 수정하고 릴리스 분기를 원래 상태로 되돌립니다.

릴리스 분기를 수정하여 마지막 실제 릴리스를 다시 가리킵니다.

git branch -f release release2

이제 릴리스 분기가 다시 올바릅니다. 이렇게...

수정됨

만약 내가 실수를 리모콘에 밀어넣었다면요?

git push -f <remote> <branch>다른 스레드에서 잘 설명되어 있지만 제목의 단어 "filename"은 오해의 소지가 있습니다."git push"를 강제로 원격 파일 덮어쓰기

언급URL : https://stackoverflow.com/questions/7310177/how-do-i-make-a-branch-point-at-a-specific-commit

반응형