Program Tip

내 마스터를 이전 커밋으로 변경하려면 어떻게해야합니까?

programtip 2020. 10. 11. 11:13
반응형

내 마스터를 이전 커밋으로 변경하려면 어떻게해야합니까?


이전 커밋으로 롤백 한 다음 해당 코드를 게시 한 다음 최신 커밋으로 돌아가고 싶습니다.

즉, 내 마스터가 이전 커밋 버전을 가리키고 있으므로 해당 버전을 게시 할 수 있습니다. 그런 다음 처음에 하나였던 최신 커밋으로 돌아가고 싶습니다.

어떻게 할 수 있습니까?


이렇게하고 마스터를 이전 커밋으로 되돌리려면 다음을 수행하십시오.

git checkout master~1            # Checkout previous commit on master
git checkout -b new_master       # Create branch for new master
git branch -D master             # Delete old master
git branch -mv new_master master # Make new_master master

또는 :

git reset --hard master~1        # Reset current branch to one commit ago on master

질문이 명확하지 않습니다. 나는 당신이 요구하는 것이 이것 이라고 생각 합니다.

git push -f origin $old_commit_id:master

이것은 무엇을할까요? $old_commit_id커밋을 브랜치 origin의 새 헤드로 푸시합니다 .originmaster

그것이 당신이 원하는 것이라면, 당신은 지역 master지점을 전혀 만질 필요가 없습니다 .


사용하다 git reset --hard <old commit number>

HEAD를이 이전 커밋으로 재설정합니다.

또한 git push -f origin원격 저장소를 변경하는데도 사용해야 합니다.


당신은 할 수 있습니다 git checkout <commit-id>, 당신이 다음 할 필요가 무엇이든 git checkout master새로운 코드로 돌아 가야.

실제로 이전 코드를 수정하여 릴리스해야하는 경우 다음을 수행해야합니다.

git checkout -b my_release <commit-id>
... prepare code for release ...
... release code ...
git checkout master
git merge my_release

또한 git flow를 충분히 추천 할 수 없습니다 . 이 모든 것을 아주 쉽게 만듭니다.


다음과 같은 커밋 그래프를 가정합니다.

| (A) ---------> (B) ----------> (C)
|                                 ^
|                              (master)

먼저 체크 아웃 master하고 master현재 위치를 가리키는 분기를 만들고 싶습니다 .

git checkout master
git branch pointer master

이제 다음과 같이 보일 것입니다.

| (A) ---------> (B) ----------> (C)
|                                 ^
|                       (HEAD, master, pointer)

이제 이미에 master있으므로 master분기에 한 커밋 뒤로 이동하도록 지시합니다.

git reset master~1

이제 master한 칸 뒤로 이동해야하지만 pointer브랜치는 여전히 가장 최근 커밋에 있습니다.

| (A) ---------> (B) ----------> (C)
|                 ^               ^
|           (HEAD, master)    (pointer)

이 시점에서 master원격 또는 어느 곳에서나 푸시 한 다음 빨리 감기를 통해 pointer분기에 다시 병합 할 수 있습니다. pointer지점에서 브랜치를 죽일 수 있습니다 :

git push origin master
git merge --ff-only pointer
git branch -D pointer

결승 :

| (A) ---------> (B) ----------> (C)
|                 ^               ^
|         [ origin/master ]    (HEAD, master)

강제 푸시를 피하려면 다음은 저장소를 이전 커밋으로 되돌리고 개입하는 모든 작업을 보존하는 방법입니다.

git checkout 307a5cd        # check out the commit that you want to reset to 
git checkout -b fixy        # create a branch named fixy to do the work
git merge -s ours master    # merge master's history without changing any files
git checkout master         # switch back to master
git merge fixy              # and merge in the fixed branch
git push                    # done, no need to force push!

끝난! 307a5cd를 repo에서 원하는 커밋으로 바꿉니다.

(처음 두 줄을 결합 할 수 있다는 것을 알고 있지만 이로 인해 진행 상황이 명확하지 않은 것 같습니다.)

다음은 그래픽입니다.

c1 -- c2 -- c3 -- c4 -- c2' -- c5 ...
        \              /
         '------------'

c3 및 c4를 효과적으로 제거하고 프로젝트를 다시 c2로 설정합니다. 그러나 c3 및 c4는 다시보고 싶은 경우 프로젝트 기록에서 계속 사용할 수 있습니다.


이전 버전으로 이동하려면 :

git checkout <version hash>

여기서 당신의 일을하고 그것을 커밋하십시오.

git commit --amend

마스터 로 돌아가려면 :

git checkout master

참고URL : https://stackoverflow.com/questions/4359681/want-to-change-my-master-to-an-older-commit-how-can-i-do-this

반응형