source

특정 커밋에 대한 리모트 리셋

lovecheck 2023. 4. 12. 22:30
반응형

특정 커밋에 대한 리모트 리셋

커밋 후 변경을 파기하고 .<commit-hash>:서서::::::

git reset --hard <commit-hash>

리모콘에서도 같은 작업을 하고 싶습니다.★★★★★★★★★★★★★★★★★★★? i i i i i i i i i i i i i i 뒤에 커밋( 밀기을 몇 번 .<commit-hash>그냥 다 버리고 싶어요.단지 뭔가 심각하게 잘못되어 있고 나는 그것을 이미 있는 것보다 더 악화시키고 싶지 않다.;(

으로 나의 ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★.origin/master로로 합니다.<commit-hash>

를 들어, 자기 을 치치고고고고고 assuming이다라고 가정하면요.master, , 리모트, 리모트, 리모트 모두, 라고 불립니다.origin을 사용하다

 git reset --hard <commit-hash>
 git push -f origin master

그러나 다른 사용자가 원격 리포지토리에서 작업하고 있고 변경 사항을 가져온 경우에는 이 작업을 수행하지 않도록 해야 합니다.이 경우 원하지 않는 커밋을 되돌린 후 정상적으로 푸시하는 이 좋습니다.

업데이트: 아래에 설명한 바와 같이, 귀하가 푸시한 변경은 다른 사용자가 수행하였으므로, 이러한 모든 변경을 되돌리는 새로운 커밋을 작성하는 것좋습니다.Jakub Narbsbski로부터의 이 답변에는, 이것을 실시하기 위한 선택사항에 대한 훌륭한 설명이 있습니다.어느 것이 가장 편리할지는 되돌리는 커밋의 수와 가장 적절한 방법에 따라 달라집니다.

하신 것을 이미 합니다.git reset --hardmaster는 branch(브랜치)를 해야 할 도 있어요.git reset --hard ORIG_HEADgit reset --hard 꼭, 꼭 확인하세요.git status에 있고,은 「알고 있다」, 「 있습니다.git reflog잃어버린 커밋을 회복하기 위한 툴로 사용됩니다.) 그 때 '보다 낫다'라는 것도 해요.ORIG_HEAD 커밋을 git show ORIG_HEAD.

트러블 슈팅:

"! [remote rejected]a60f7d85 -> master (사전 수신 후크가 거부되었습니다)"와 같은 메시지가 표시되는 경우

다음으로 특정 브랜치의 브랜치 이력 개서를 허가해야 합니다.BitBucket'은 'BitBucket'을 말합니다.라고 되어 있습니다.이 있습니다.Allow rewriting branch history확인하셔야 합니다.

다른 답변을 사용하면 로컬 상태가 불필요하게 손실될 수 있습니다.리모트를 변경하기 위해 로컬 변경이 반드시 필요한 것은 아닙니다.이 방법으로 되돌아가기 위한 잘못된 커밋을 선택해도 리모트가 파손될 수 있지만, 그 경우에도 보통 올바른 커밋을 찾아 재시도할 수 있습니다.

리모트와 대조하는 로컬리포 어딘가에 원하는 커밋이 있어야 합니다.

  1. 리셋을 실시하지 말아 주세요.
  2. git log을 사용법git log -p을 표시하다, 「」를 참조하다git log --graph --all --oneline --decorate작은 나무를 보러 왔어요.
  3. 커밋의 해시, 태그 또는 분기 이름(팁인 경우)을 복사합니다.
  4. 를 실행합니다.
    git push --force <remote> <commit-ish>:<the remote branch>
    
    ★★
    git push --force origin 606fdfaa33af1844c86f4267a136d4666e576cdc:master
    
    ★★★★★★★★★★★★★★★★★」
    git push --force staging v2.4.0b2:releases
    

강제 푸시가 실패하면 리모트에 의해 비활성화될 수 있습니다.이 문제는 및 의 한쪽 또는 양쪽을 일시적으로 변경하여 해결할 수 있습니다.리모트가 셸 액세스가 없는 서비스상에서 호스트 되고 있는 경우는, 강제 푸시를 허가하도록 설정을 변경할 수 있습니다.


는 편리한가명을 .git go할 수

git config --global alias.go 'log --graph --all --decorate --oneline'

다음 명령으로 당신과 같은 문제를 해결했습니다.

git reset --hard <commit-hash> 
git push -f <remote> <local branch>:<remote branch> 

GitLab 에서는, 이것을 실시하기 전에, 브랜치를 비보호로 설정할 필요가 있는 경우가 있습니다.이것은 [repo]> [ Settings ]> [ Repository ]> [ Protected Branchs ]에서 실행할 수 있습니다.그러면 마크의 대답에서 나온 방법이 효과가 있어요.

git reset --hard <commit-hash>
git push -f origin master

이전 버전의 파일을 원하신다면 git checkout을 추천합니다.

git checkout <commit-hash>

이렇게 하면 과거로 돌아가 프로젝트의 현재 상태에 영향을 주지 않습니다. 메인라인 git checkout mainline으로 이동할 수 있습니다.

그러나 인수에 파일을 추가하면 해당 파일은 이전 시간에서 현재 프로젝트 시간으로 되돌아갑니다. 즉, 현재 프로젝트가 변경되어 커밋되어야 합니다.

git checkout <commit-hash> -- file_name
git add .
git commit -m 'file brought from previous time'
git push

이 방법의 장점은 이력을 삭제하지 않고 특정 코드 변경 내용을 되돌리지 않는다는 것입니다(git revert).

자세한 것은 이쪽 https://www.atlassian.com/git/tutorials/undoing-changes#git-checkout을 참조해 주세요.

최근에 같은 문제에 직면했는데 다음 두 단계로 해결되었습니다.

  1. 를 사용하여 로컬 git으로 .git reset --hard HEAD~1【HEAD~】【HEAD~】1 【HEAD~1 【HEAD~】
  2. 에 힘껏 넣습니다.git push -f origin main.

바로 그겁니다.

이전 답변에 대한 나의 의견:

git push --force <remote> <the-hash>:<the remote branch>

안 하는 게 것 요.편집하는 것이 좋을지도 모릅니다.<your-remote-repo>.git/config"이것들"은 다음과 같습니다.

[receive]
  #denyNonFastforwards = true
  denyNonFastforwards = false

브런치를 로컬과 리모트 양쪽에서 마스터라고 부르고, 그 브런치가remote할 수 있는 것은 오리진이라고 불립니다.

git reflog 이력을 모두 하려면 , 「」를 참조해 주세요.commit hash형식은 다음과 같습니다.e34e1ff

git reset --hard <commit-hash>

git push -f origin master

소스 트리: 리모트에서 특정 커밋으로 리셋

  1. 아래 그림과 같이 리모트(오리진/기능/1337_MyAwesomeFeature)에 잘못된 커밋을 푸시한 경우

리모트로 이동

  1. 리모트 > 오리진 > 기능 > 1337_MyAwesome Feature 순으로 이동합니다.
  2. 오른쪽 버튼을 클릭하여 "Delete origin/feature/1337_MyAwesome Feature"(원본/기능 삭제/1337_MyAwesome Feature)를 선택합니다(백업을 원할 경우 이름을 변경하고 스텝 4를 건너뜁니다).
  3. "강제 삭제" 및 "확인"을 클릭합니다.

여기에 이미지 설명 입력 여기에 이미지 설명 입력

  1. 이전 커밋을 선택하고 "현재 브랜치를 이 커밋으로 리셋"을 선택합니다.
  2. 원하는 모드(마지막 변경을 원하지 않는 경우 하드)와 "확인"을 선택합니다.

여기에 이미지 설명 입력 여기에 이미지 설명 입력

  1. 이 커밋을 새로운 오리진/기능에 푸시/1337_MyAwesome Feature

  2. 로컬 기능 브랜치 및 리모트 기능 브랜치가 (선택한) 이전 커밋에 있습니다.

브런치가 개발 또는 운영이 아닌 경우 이를 실현하기 위한 가장 쉬운 방법은 로컬에서 특정 커밋으로 리셋하고 거기에서 새로운 브런치를 작성하는 것입니다.다음을 사용할 수 있습니다.

git 체크아웃 000000

(000000은 문제가 있는 브랜치에 있는 커밋 ID입니다)를 작성한 후 새로운 브랜치를 작성하기만 하면 됩니다.

git remote add [name_of_your_remote]

그러면 새로운 PR을 생성할 수 있으며 모든 것이 정상적으로 작동합니다.

87c9808과 같은 커밋의 SHA 번호를 받은 다음

  1. 자신을 특정 커밋으로 이동합니다(git reset --hard 89cef43//여기서 번호 표시).
  2. 다음으로 랜덤 파일에서 몇 가지 변경을 수행합니다.그래서 git은 그것을 로컬로, 그리고 리모트로 커밋하도록 요구하기 때문에 지금 당신이 해야 할 일은 change git commit - a - m "trial commit"를 적용한 후입니다.
  3. 이제 git push origin master에 의해 다음 커밋(로컬 커밋된 경우)을 푸시합니다.
  4. 이제 당신에게서 부탁할 것은

오류: 일부 참조를 https://github.com/YOURREPOSITORY/AndroidExperiments.git' 힌트에 푸시하지 못했습니다. 현재 분기의 팁이 힌트 뒤에 있기 때문에 업데이트가 거부되었습니다. 즉, 원격 분기의 팁입니다.원격 변경 사항(예: 힌트: 'git pull ...')을 통합한 후 다시 누릅니다.**

  1. 그래서 이제 네가 할 수 있는 건

git push --force origin master

  1. 그래서 잘 됐으면 좋겠다:)

언급URL : https://stackoverflow.com/questions/5816688/resetting-remote-to-a-certain-commit

반응형