특정 커밋에서 분기점을 만들려면 어떻게 해야 합니까?
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
'programing' 카테고리의 다른 글
iOS 10에서 UITextView 상단의 공백 (0) | 2023.05.03 |
---|---|
WPF Scroll Viewer에서 스크롤 막대 너비를 높이는 방법은 무엇입니까? (0) | 2023.05.03 |
테이블 레벨 백업 (0) | 2023.05.03 |
bash에서 stdout과 stderr 둘 다 배관? (0) | 2023.05.03 |
MongoDB, 인덱스된 필드에 대한 정규식에 의한 쿼리 성능 (0) | 2023.05.03 |