힘내 : 마스터의 단계적 / 커밋되지 않은 변경 사항으로 분기 만들기

컨텍스트 : 간단한 기능을 추가하는 마스터 작업 중입니다. 몇 분 후 나는 그것이 그렇게 간단하지 않다는 것을 깨닫고 새로운 지사로 일하는 것이 더 좋았을 것입니다.

이것은 항상 나에게 발생하며 다른 지점으로 전환하고 커밋되지 않은 모든 변경 사항을 마스터 지점을 깨끗하게 유지하는 방법을 모릅니다. 나는 git stash && git stash branch new_branch단순히 그것을 달성 할 것이라고 생각 했지만 이것이 내가 얻는 것입니다.

~/test $ git status
# On branch master
nothing to commit (working directory clean)

~/test $ echo "hello!" > testing

~/test $ 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:   testing
#
no changes added to commit (use "git add" and/or "git commit -a")

~/test $ git stash
Saved working directory and index state WIP on master: 4402b8c testing
HEAD is now at 4402b8c testing

~/test $ git status
# On branch master
nothing to commit (working directory clean)

~/test $ git stash branch new_branch
Switched to a new branch 'new_branch'
# On branch new_branch
# 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:   testing
#
no changes added to commit (use "git add" and/or "git commit -a")
Dropped refs/stash@{0} (db1b9a3391a82d86c9fdd26dab095ba9b820e35b)

~/test $ git s
# On branch new_branch
# 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:   testing
#
no changes added to commit (use "git add" and/or "git commit -a")

~/test $ git checkout master
M   testing
Switched to branch 'master'

~/test $ 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:   testing
#
no changes added to commit (use "git add" and/or "git commit -a")

이것을 달성하는 방법이 있는지 아십니까?



답변

숨길 필요가 없습니다.

git checkout -b new_branch_name

로컬 변경 사항을 건드리지 마십시오. 현재 HEAD에서 분기를 작성하고 HEAD를 설정합니다. 그래서 당신이 원하는 것 같아요.

— 체크 아웃 마스터의 결과를 설명하기 위해 편집 —

checkout master변경 사항을 버리지 않기 때문에 혼란 스럽 습니까?

변경 사항은 로컬이기 때문에 git은 너무 쉽게 잃기를 원하지 않습니다. 분기를 변경하면 git은 로컬 변경 사항을 덮어 쓰지 않습니다. 당신의 결과는 다음 checkout master과 같습니다

M   testing

즉, 작업 파일이 깨끗하지 않습니다. git은 HEAD를 변경했지만 로컬 파일을 덮어 쓰지 않았습니다. 당신이 켜져 있지만 마지막 상태가 여전히 로컬 변경 사항을 표시하는 이유입니다 master.

로컬 변경 사항을 실제로 삭제하려면을 사용하여 강제로 체크 아웃해야 -f합니다.

git checkout master -f

변경 사항이 커밋되지 않았으므로 잃게됩니다.

지점으로 돌아가서 변경 사항을 커밋 한 다음 마스터를 다시 체크 아웃하십시오.

git checkout new_branch
git commit -a -m"edited"
git checkout master
git status

당신은 가야 M최초의 체크 아웃 후 메시지를,하지만하지 더 이상 후 checkout master, 그리고 git status더 수정 된 파일을 보여주지해야한다.

— 작업 디렉토리 (로컬 파일)에 대한 혼란을 없애기 위해 편집하십시오 —

첫 번째 의견에 대한 답변으로, 로컬 변경 사항은 … 로컬입니다. Git은 자동으로 저장하지 않으므로 나중에 저장하도록 지시해야합니다. 변경하고 명시 적으로 커밋하거나 숨기지 않으면 git은 버전을 변경하지 않습니다. HEAD ( checkout master) 를 변경하면 저장되지 않은 이후 로컬 변경 사항을 덮어 쓰지 않습니다.


답변

시험:

git stash
git checkout -b new-branch
git stash apply


답변

당신이 할 수있는 두 가지 :

git checkout -b sillyname
git commit -am "silly message"
git checkout -

또는

git stash -u
git branch sillyname stash@{0}

( git checkout -<-대시는 이전 분기의 바로 가기입니다)

( git stash -u<- -u스테이지되지 않은 변경도 필요함을 의미)


답변

GitHub Windows 클라이언트를 사용하고 있고 (있는 그대로) 새 브랜치로 이동하려는 커밋되지 않은 변경이있는 경우 GitHub 클라이언트를 통해 “새 브랜트를 걸기”만하면됩니다. 새로 작성된 분기로 전환되고 변경 사항이 보존됩니다.

여기에 이미지 설명을 입력하십시오


답변

현재 분기에서 커밋되지 않은 현재 변경 사항을 새 분기로 이동하려면 다음 명령을 사용하여 새 분기를 만들고 커밋되지 않은 변경 사항을 자동으로 복사하십시오.

git checkout -b branch_name

그러면 현재 브랜치에서 새 브랜치를 생성하고 (마스터로 가정) 커밋되지 않은 변경 사항을 복사하고 새 브랜치로 전환합니다.

새로운 지점에 변경 사항을 적용하십시오.

git commit -m "First commit"

새 분기가 만들어 지므로 원격으로 푸시하기 전에 업스트림을 설정해야합니다. 아래 명령을 사용하여 업스트림을 설정하고 원격으로 푸시하십시오.

git push --set-upstream origin feature/feature/NEWBRANCH

이 명령을 누르면 원격에서 새 분기가 생성되고 새 로컬 분기가 원격으로 푸시됩니다.

이제 커밋되지 않은 변경 사항을 마스터 브랜치에서 버리고 싶다면 다음을 사용하십시오.

git checkout master -f

체크 아웃시 커밋되지 않은 로컬 변경 사항이 모두 삭제됩니다.


답변

커밋되지 않은 변경 사항이있는 경우 Windows 용 최신 GitHub 클라이언트 에서 새 브랜치를 작성하도록 선택하십시오.
이 정확한 시나리오를 처리하는 방법을 묻습니다.

여기에 이미지 설명을 입력하십시오

단순히 분기를 전환하는 경우에도 마찬가지입니다.


답변


카테고리Git

답글 남기기