source

분기 전환 및 커밋하지 않고 변경 사항 무시

manysource 2023. 5. 15. 22:21

분기 전환 및 커밋하지 않고 변경 사항 무시

Git 브랜치에서 작업 중이었고 변경 사항을 커밋할 준비가 되어 있었기 때문에 유용한 커밋 메시지를 사용하여 커밋했습니다.그런 다음 나는 무심코 코드에 보관할 가치가 없는 사소한 변경을 가했습니다.나는 이제 지점을 바꾸고 싶지만, git이 나에게 줍니다.

오류: "X"에 대한 로컬 변경 사항이 있으므로 분기를 전환할 수 없습니다.

지점을 커밋하지 않고 변경할 수 있습니까?그렇다면 어떻게 설정할 수 있습니까?그렇지 않다면 어떻게 이 문제에서 벗어날 수 있습니까?사소한 변경 사항은 커밋 없이 무시하고 지점만 변경하고 싶습니다.

분기를 변경하려면 상태를 정리해야 합니다.지점 체크아웃은 '더러운 파일'에 영향을 미치지 않는 경우에만 허용됩니다(Charles Bailey의 코멘트처럼).

그렇지 않으면 다음 중 하나를 수행해야 합니다.

  • 현재 거스름돈을 저장하거나
  • reset --hard HEAD (이러한 사소한 변경 사항을 잃어도 괜찮으시다면) 또는
  • checkout -f (지점 전환 시 인덱스 또는 작업 트리가 HEAD와 다르더라도 진행합니다.이것은 로컬 변경사항을 버리는 데 사용됩니다.)

또는 최근에는 다음과 같습니다.

  • Git 2.23(2019년 8월) 및 새 명령어 사용:
    git switch -f <branch-name>
    (-f는 의줄말임의 줄임말입니다.--force은 에대별니다입의 입니다.--discard-changes)

인덱스 또는 작업 트리가 HEAD와 다른 경우에도 계속 진행합니다.
인덱스와 작업 트리가 모두 전환 대상과 일치하도록 복원됩니다.

은 이는와 다니다릅과 .git switch -m <branch-name>현재 분기, 작업 트리 내용 및 새 분기 간의 3방향 병합을 트리거합니다. 이렇게 하면 진행 중인 작업이 손실되지 않습니다.

변경 내용을 취소하려면,

git checkout -- <file>
git checkout branch

변경 사항을 유지하고 싶다면,

git stash save
git checkout branch
git stash pop

음, 그래야 합니다.

git stash save
git checkout branch
// do something
git checkout oldbranch
git stash pop

팔로우,

$: git checkout -f

$: git checkout next_branch

원격 지점을 병합했거나 로컬 커밋이 있으며 원격 HEAD로 돌아가려면 다음 작업을 수행해야 합니다.

git reset --hard origin/HEAD

HEAD단독으로 로컬 커밋/합병만 참조합니다. 재설정할 때 "저의 저장소는 X 커밋 앞에 있습니다."지점으로 .모든 변경 사항/커밋을 취소하고 원격 지점으로 돌아가려고 했을 때.

재설정 및 저장 후에도 추적되지 않은 파일이 남아 있기 때문에 이러한 답변은 도움이 되지 않았습니다.해야만 했습니다.

git reset --hard HEAD
git clean -d -f

git checkout -f your_session_name

git checkout -f your_branch_name

변경 내용을 되돌리는 데 문제가 있는 경우:

git checkout .

추적되지 않은 디렉터리 및 파일을 제거하려는 경우:

git clean -fd

분기를 전환할 때 Git도 변경해야 하는 파일을 변경한 경우에는 변경할 수 없습니다.작업 변경을 취소하려면 다음을 사용합니다.

git reset --hard HEAD

그러면, 여러분은 가지를 바꿀 수 있을 것입니다.

다음 단계를 수행합니다.

  1. Git stash save는 분기 간에 전환하더라도 모든 변경사항을 저장합니다.
git stash save
  1. 다른 지점을 체크아웃하십시오. 이제 변경 사항을 저장했으므로 지점을 이동할 수 있습니다.위의 명령을 사용하면 변경 내용이 저장됩니다.
git checkout branch
  1. 이제 분기로 돌아오면 이 명령을 사용하여 모든 변경 사항을 반환합니다.
git stash pop

쉬운 대답:

지점을 강제로 체크아웃하는 것입니다.

git checkout -f <branch_name>

분기를 강제로 체크아웃하는 것은 현재 분기에서 변경한 내용을 모두 삭제하고 원하는 항목을 체크아웃하도록 지시하는 것입니다.

아니면 당신이 커밋을 체크아웃하는 경우.

git checkout -f <commit-hash>


"나는 약속하지 않고도 지점을 바꿀 수 있다고 생각했습니다.그렇다면 어떻게 설정할 수 있습니까?그렇지 않다면 어떻게 이 문제에서 벗어날 수 있습니까?"

이에 대한 대답은 "아니오"입니다. 말 그대로 모든 변경사항을 추적하고 각 노드(즉, 커밋)는 새로운 커밋을 하지 않는 한 최신 변경사항으로 최신 상태를 유지해야 한다는 Git의 철학입니다.


잔돈을 유지하기로 결정하셨습니까?

그런 다음 다음 다음을 사용하여 저장합니다.

git stash

그런 다음 원하는 분기에서 변경 내용을 해제하려면 다음을 사용합니다.

git stash apply

변경 사항을 적용하지만 저장 대기열에도 유지합니다.이러한 파일을 스택에 보관하지 않으려면 다음을 사용하여 팝업을 표시합니다.

git stash pop

그것은 에 해당합니다.apply그리고 나서.drop

새 분기로 전환하면 변경 내용이 손실됩니다.

git checkout -b YOUR_NEW_BRANCH_NAME --force

기존 분기로 전환하면 변경 내용이 손실됩니다.

git checkout YOUR_BRANCH --force

변경사항을 유지하고 한 줄 명령에서 분기를 변경하려는 경우

git stash && git checkout <branch_name> && git stash pop

마음의 평정을 유지하기 위해(분기 스위치를 사용하여 변경 사항에 훨씬 쉽게 액세스할 수 있음)

전환 전:

git checkout <next_branch>

사용하다

git stash save "brief description of changes"

기본값 대신:

git stash    
// or
git stash save

이것은 만약 당신이git stash list더 긴 목록이며 어딘가에서 시작된 이전 아이디어로 다시 전환해야 합니다.

커밋되지 않은 변경 사항을 새 분기로 이동

다음을 생성했습니다..gitconfig다음에 대한 별칭:

[alias]
spcosp = !"git stash push && git checkout \"$@\" && git stash pop --index #"

변경하는 방법new-branch-name사용:

git spcosp new-branch-name

또한 커밋되지 않은 파일 및 인덱스 변경사항도 유지됩니다.

Gitstash가 작동하지 않을 때 변경 사항을 커밋하지 않고 다른 분기로 전환합니다.다음 명령을 사용할 수 있습니다.

git checkout -f 지점 이름

터미널을 닫고 프로젝트가 있는 폴더를 삭제한 다음 프로젝트와 voila를 다시 복제합니다.

언급URL : https://stackoverflow.com/questions/1304626/switch-branch-and-ignore-any-changes-without-committing