source

로컬 깃 커밋을 취소하려면 어떻게 해야 합니까?

nicesource 2023. 5. 4. 20:03
반응형

로컬 깃 커밋을 취소하려면 어떻게 해야 합니까?

문제는 파일을 변경했다는 것입니다. 예:README에서 'this for my testing line'이라는 새 행을 추가하고 파일을 저장한 후 다음 명령을 실행했습니다.

git status

# On branch master
# Changed but not updated:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#   modified:   README
#
no changes added to commit (use "git add" and/or "git commit -a")


git add README

git commit -a -m 'To add new line to readme'

GitHub에 코드를 푸시하지 않았습니다.이제 이 커밋을 취소합니다.

이거는 제가.

git reset --hard HEAD~1

그런데 README 파일에서 새로 추가된 'this for my testing line' 줄을 잃어버렸습니다.이런 일이 있어서는 안 됩니다.나는 거기에 있을 내용이 필요합니다.내용을 유지하고 로컬 커밋을 취소할 수 있는 방법이 있습니까?

그냥 사용하기git reset을 제외하고--hard플래그:

git reset HEAD~1

PS: Unix 기반 시스템에서 사용할 수 있습니다.HEAD^와 같은 것HEAD~1Windows에서HEAD^다음과 같은 이유로 작동하지 않을 것입니다.^라인 연속을 나타냅니다.그래서 명령 프롬프트가 당신에게 묻습니다.More?.

사용하다--soft대신에--hard깃발

유닉스:

git reset --soft HEAD^

Windows:

git reset --soft HEAD~

마지막 로컬(푸시되지 않은) 커밋은 제거되지만 변경한 내용은 유지됩니다.

커밋 중인 경우(즉, 이미 편집기에서) 첫 번째 줄 위의 모든 줄을 삭제하여 커밋을 취소할 수 있습니다.#그러면 커밋이 중단됩니다.

따라서 커밋 메시지가 비어 있도록 모든 행을 삭제한 다음 파일을 저장할 수 있습니다.

이렇게 해야 돼요.

그러면 다음과 같은 메시지가 표시됩니다.Aborting commit due to empty commit message..

먼저 커밋 메시지를 삭제하기 전에 로컬 변경사항을 유지할지 여부를 결정해야 합니다.

사용하다git log현재 커밋 메시지를 표시한 다음commit_id 삭제할 커밋이 아닌 삭제할 커밋 앞에 표시됩니다.

로컬에서 변경된 파일을 유지하고 커밋 메시지만 삭제하려면 다음을 수행합니다.

git reset --soft commit_id

로컬에서 변경된 모든 파일과 커밋 메시지를 삭제하려면 다음을 수행합니다.

git reset --hard commit_id

그게 소프트와 하드차이점입니다.

다음 매개 변수 중 하나를 사용하여 Git 재설정을 수행할 때 인덱스(다음 커밋이 될 파일 집합) 및 작업 디렉터리에서 수행할 작업을 Git에 지시할 수 있습니다.

--soft인덱스 및 작업 디렉터리는 변경되지 않고 커밋만 재설정됩니다.

--mixed이렇게 하면 색인이 HEAD와 일치하도록 재설정되고 작업 디렉토리는 터치되지 않습니다.모든 변경사항은 작업 디렉토리에 남아 수정된 것으로 나타납니다.

--hard모든 항목(커밋, 인덱스, 작업 디렉터리)을 HEAD와 일치하도록 재설정합니다.

당신의 경우, 저는git reset --soft수정된 변경사항을 색인 및 작업 디렉토리에 보관합니다.더 자세한 설명을 위해 이것을 꼭 확인하세요.

아래 명령 사용:

$ git reset HEAD~1

이 후에는 아래 응답과 같이 반환되는 파일도 볼 수 있습니다.

Unstaged changes after reset:
M   application/config/config.php
M   application/config/database.php

@Amal Kumar가 말했듯이.git 명령어를 사용하면 됩니다.

git reset HEAD~1

여기서 저는 또 다른 상황에 부닥쳤습니다.

두 개의 분기가 있습니다. 하나는 'dev', 하나는 'new'입니다. 하나는 'new'입니다. 하나는 dev에서 버그를 수정한 다음, 다른 하나는 new:

git rebase origin/dev
git push -f

서버에서 새 분기가 실행되고 있는 동안 서버에서 새 분기를 업데이트하면 로컬 커밋을 추가할 수 있습니다.

git pull

# On branch new
# Your branch and 'origin/new' have diverged,
# and have 7 and 10 different commits each, respectively.
#  (use "git pull" to merge the remote branch into yours)

# nothing to commit, working tree clean

'git pull'이 작동하지 않습니다...

'git reset HEAD~1'이(가) 작동하지 않습니다...

사용합니다

git reset origin/new

일을 끝내려고요

언급URL : https://stackoverflow.com/questions/4850717/how-to-cancel-a-local-git-commit

반응형