먼저 귀하의 설명에 따르면 git reset --hard,那就可以推断出你已经 add 和 commit 过了。 其次,根据报错,可以推断出你已经 push를 사용했기 때문에 (이 추론은 귀하만이 마스터 브랜치의 변경 권한을 가지고 있다는 사실에 근거합니다.
그런 다음 git reset --hard을 실행하면 기록 기록을 원격 기록과 직접 병합할 수 없습니다. 그렇기 때문에 이런 오류가 발생하는 것입니다.
예를 들어 리모컨은 A -> B -> C -> D,你 git reset --hard 之后是 A -> B。这时候除非远程那边抹掉 C 和 D이고
뒤에는 A -> B가 옵니다. 이때, 원격측에서 C와 D를 지우지 않으면 병합할 수 없습니다.
git push origin master --force따라서 이때는 를 이용하여 원격녹화를 강제로 덮어써야 합니다.
git pull。否则,你的本地又会变成 A -> B -> C -> D。因为 git pull 相当于 git fetch + git merge설명서대로 사용하지 마세요
A -> B -> C -> D (다음 내용은 위 예시를 바탕으로 한 것이며, 리모콘은
이고 B상태로 롤백하고 싶습니다)
git revert。其实,git reset --hard 和 git revertgit revert가 위에서 언급되었습니다. 실제로
및 git revert 모두 "롤백 코드"를 달성할 수 있습니다. 하지만 차이점은 다음과 같습니다.
git revert 会把你的本地变成 A -> B -> C -> D -> E。其中,E 干的事儿是删除 C 和 D。这样做的好处在于,你 git push origin master 就不会有上面的报错了。但,历史线上还是会保留 C 和 D 这两个 commit。如果使用这个命令,记得要 add 然后 commit
.
git reset --hard 会直接删掉 C 和 D,形成 A -> B 这样的结果。好处在于更直接更彻底。缺点在于,首先要通过 git push origin master --force 去强行更改。其次,一旦你后悔了,除非根据本地的 reflog
는 C 및 D를 직접 삭제하여 A -> B와 같은 결과를 생성합니다. 장점은 더 직접적이고 철저하다는 것입니다. 단점은 먼저
를 통해 변경을 강제해야 한다는 것입니다. 둘째, 일단 후회하고 나면 로컬 reflog에 따라 HEAD 포인터를 직접 복원하지 않는 이상 다른 방법이 없습니다.
먼저 귀하의 설명에 따르면
git reset --hard
,那就可以推断出你已经add
和commit
过了。其次,根据报错,可以推断出你已经
push
를 사용했기 때문에 (이 추론은 귀하만이 마스터 브랜치의 변경 권한을 가지고 있다는 사실에 근거합니다.그런 다음
git reset --hard
을 실행하면 기록 기록을 원격 기록과 직접 병합할 수 없습니다. 그렇기 때문에 이런 오류가 발생하는 것입니다.예를 들어 리모컨은
뒤에는A -> B -> C -> D
,你git reset --hard
之后是A -> B
。这时候除非远程那边抹掉C
和D
이고A -> B
가 옵니다. 이때, 원격측에서C
와D
를 지우지 않으면 병합할 수 없습니다.git push origin master --force
따라서 이때는 를 이용하여 원격녹화를 강제로 덮어써야 합니다.git pull
。否则,你的本地又会变成A -> B -> C -> D
。因为git pull
相当于git fetch
+git merge
설명서대로 사용하지 마세요A -> B -> C -> D
(다음 내용은 위 예시를 바탕으로 한 것이며, 리모콘은git revert
。其实,git reset --hard
和git revert
git revert
가 위에서 언급되었습니다. 실제로git revert
모두 "롤백 코드"를 달성할 수 있습니다. 하지만 차이점은 다음과 같습니다.git revert
会把你的本地变成A -> B -> C -> D -> E
。其中,E
干的事儿是删除C
和D
。这样做的好处在于,你git push origin master
就不会有上面的报错了。但,历史线上还是会保留C
和D
这两个 commit。如果使用这个命令,记得要add
然后commit
git reset --hard
会直接删掉C
和D
,形成A -> B
这样的结果。好处在于更直接更彻底。缺点在于,首先要通过git push origin master --force
去强行更改。其次,一旦你后悔了,除非根据本地的reflog
C
및D
를 직접 삭제하여A -> B
와 같은 결과를 생성합니다. 장점은 더 직접적이고 철저하다는 것입니다. 단점은 먼저를 통해 변경을 강제해야 한다는 것입니다. 둘째, 일단 후회하고 나면 로컬
어떤 것을 사용하든 필요에 따라 선택하세요. 🎜🎜reflog
에 따라 HEAD 포인터를 직접 복원하지 않는 이상 다른 방법이 없습니다.일반적으로 이런 상황은 피하도록 노력하세요.
원격 마스터에 대한 권한이 있는 경우 다음을 수행할 수 있습니다.
으아악보다 합리적인 접근 방식은 git revert를 사용하는 것입니다
분할선 편집
또 다른 학생 @S1ngS1ng이 더 자세한 답변을 했지만, 그는 어떤 것이든 사용할 수 있다는 점을 지적했습니다. 여전히 git revert가 더 적절한 접근 방식이라는 점을 다시 강조하고 싶습니다
다인원 개발 시나리오의 경우 원격 마스터의 다른 사람이 최신 코드를 가져왔거나 다른 브랜치에 병합했을 가능성이 높습니다. 이 경우 상대방이 여전히 푸시할 수 있으므로 재설정이 유효하지 않습니다. 커밋
을 삭제하고 싶습니다.그래서 아무거나 사용할 수 있다는 생각에는 실제로 한계가 있습니다