[repository] bitbucket에서 마지막 커밋 삭제

실수를했는데 리포지토리에서 최근 푸시를 삭제하는 방법을 모르겠습니다. 앱의 최신 업데이트를 가져 왔지만 충돌이 발생하여 저장소로 푸시합니다.

마지막 커밋을 삭제하는 방법? 아니면 그것을 고치는 방법?



답변

같은 코드 저장소에서 다른 사람들과 함께 작업하는 경우 첫째로, 당신은 리포지토리에 업데이트를 강제 할 때이 경우는 (불법 상태 예를 동료의 로컬 저장소를 떠나 이후 커밋 삭제 삭제 한 후 커밋을 수행 한 경우 해당 커밋은 현재 존재하지 않는 커밋을 기반으로했기 때문에 유효하지 않습니다.

당신이 할 수있는 일은 커밋을 되 돌리는 것입니다. 이 절차는 사용중인 CVS에 따라 다르게 수행됩니다 (다른 명령).

자식 :

git revert <commit>

수은 :

hg backout <REV>

편집 :
되돌리기 작업은 되 돌린 커밋과 반대되는 새로운 커밋을 생성합니다 (예 : 원래 커밋에 라인이 추가 된 경우 되돌리기 커밋은 해당 라인을 삭제함).


답변

다른 사람과 함께 작업 하지 않는 경우 (또는 큰 불편을 끼쳐서 기뻐하는 경우) , bitbucket 브랜치에서 커밋을 제거 할 수 있습니다.

비 마스터 브랜치를 변경하려는 경우 :

git reset HEAD^               # remove the last commit from the branch history
git push origin :branch_name  # delete the branch from bitbucket
git push origin branch_name   # push the branch back up again, without the last commit

마스터 브랜치를 변경하려는 경우

git에서 일반적으로 master 브랜치는 특별하지 않습니다. 단지 관례 일뿐입니다. 그러나 bitbucket 및 github 및 유사한 사이트에는 일반적으로 기본 브랜치가 있어야합니다 (저장소에 브랜치가 없다는 이벤트를 처리하기 위해 더 많은 코드를 작성하는 것보다 쉽기 때문에-확실하지 않음). 따라서 새 브랜치를 생성하고이를 기본 브랜치로 만들어야합니다.

# on master:
git checkout -b master_temp
git reset HEAD^              # undo the bad commit on master_temp
git push origin master_temp  # push the new master to Bitbucket

Bitbucket에서 저장소 설정으로 이동하여 “Main branch”를 master_temp(Github에서 “Default branch”변경)로 변경합니다.

git push origin :master     # delete the original master branch from Bitbucket
git checkout master
git reset master_temp       # reset master to master_temp (removing the bad commit)
git push origin master      # re-upload master to bitbucket

이제 Bitbucket으로 이동하면 원하는 기록이 표시됩니다. 이제 설정 페이지로 이동하여 메인 분기를 master.

이 프로세스는 다른 기록 변경 (예 :)에도 적용 git filter-branch됩니다. 새 기록이 이전 기록과 분리되기 전에 적절한 커밋으로 재설정해야합니다.

편집 : 분명히 리셋 브랜치를 강제 푸시 할 수 있으므로 github 에서이 모든 번거 로움을 갈 필요가 없습니다 .

성가신 협력자 다루기

다음에 누군가가 저장소에서 가져 오려고하면 (이미 잘못된 커밋을 가져온 경우) 가져 오기가 실패합니다. 변경된 기록 이전의 커밋으로 수동으로 재설정 한 다음 다시 가져와야합니다.

git reset HEAD^
git pull

그들이 나쁜 커밋을 가져와 그 위에 커밋 했다면 , 재설정해야 할 것이고, 그리고 나서 git cherry-pick그들이 만들고자하는 좋은 커밋을 다시 만들어서 나쁜 커밋없이 전체 브랜치를 효과적으로 다시 생성해야합니다.

그들이 나쁜 커밋을 가져 오지 않았다면,이 전체 프로세스는 그들에게 영향을주지 않을 것이고, 그들은 정상적으로 풀 수 있습니다.


답변

재설정 HEAD^한 다음 강제로 밀어 넣을 수 있습니다.

git reset HEAD^
git push -u origin master --force

마지막 커밋을 삭제하고 커밋이 삭제되면 bitbucket에 반영되지만 서버에는 계속 남아 있습니다.


답변

나는 과거에 git revert에 문제가있었습니다.

내 간단한 해결책은 이것입니다.

1 단계.

 git clone <your repos URL> .

프로젝트를 다른 폴더에 저장 한 다음 :

2 단계.

git reset --hard <the commit you wanna go to>

그런 다음 3 단계.

최신 (및 기본) 프로젝트 디렉토리 (마지막 커밋에 문제가있는 파일)에 2 단계의 파일을 붙여 넣습니다.

4 단계.

git commit -m "Fixing the previous messy commit"

5 단계.

즐겨


답변

다음은 최대 4 단계의 간단한 접근 방식입니다.

0-리포지토리를 수정할 팀에 알립니다.

팀과 연결하여 향후 변경 사항을 알립니다.

1-마지막 커밋 제거

대상 분기가 master다음과 같다고 가정합니다 .

$ git checkout master              # move to the target branch
$ git reset --hard HEAD^           # remove the last commit
$ git push -f                      # push to fix the remote

이 시점에서 혼자 일하는 경우 완료됩니다.

2-팀원의 로컬 저장소 수정

팀원의 :

$ git checkout master              # move to the target branch
$ git fetch                        # update the local references but do not merge
$ git reset --hard origin/master   # match the newly fetched remote state

팀원에게 새로운 커밋이 없다면이 시점에서 완료되었으며 동기화 상태 여야합니다.

3-잃어버린 커밋 가져 오기

팀원이이 프로세스에서 손실 된 새롭고 게시되지 않은 커밋을 가지고 있다고 가정 해 보겠습니다.

$ git reflog                       # find the new commit hash
$ git cherry-pick <commit_hash>

필요한만큼 커밋에 대해이 작업을 수행합니다.

이 방법을 여러 번 성공적으로 사용했습니다. 모든 것이 동기화되도록하려면 팀의 노력이 필요합니다.


답변

다른 사람들이 말했듯이 일반적으로 hg backout또는 git revert. 그러나 때로는 커밋을 제거하고 싶을 때가 있습니다.

먼저, 저장소 설정으로 이동해야합니다. Strip commits링크를 클릭하십시오 .

bitbucket 설정에서 커밋 링크 제거

삭제할 변경 세트의 변경 세트 ID를 입력하고을 누릅니다 Preview strip. 이를 통해 수행하기 전에 어떤 종류의 손상을 입히고 있는지 확인할 수 있습니다. 그런 다음 클릭하면 Confirm커밋이 더 이상 기록이 아닙니다. 모든 공동 작업자에게 자신이 한 일을 말하여 실수로 문제가되는 커밋을 되 돌리지 않도록하십시오.


답변

변경 사항이 커밋되면 삭제할 수 없습니다. 커밋의 기본 특성은 삭제가 아니기 때문입니다.

할 수있는 일 (쉽고 안전한 방법),

인터랙티브 리베이스 :

1) git rebase -i HEAD~2 # 최근 2 개의 커밋을 표시합니다.

2) 커밋은 다음과 같이 나열됩니다. 최근 항목은 페이지 하단에 표시됩니다. LILO (last in Last Out)

여기에 이미지 설명 입력

마지막 커밋 행을 완전히 삭제

3) ctrl+X또는로 저장ESC:wq

이제 분기가 마지막 커밋없이 업데이트됩니다.