IT

Git: 마스터에서 스테이징되지 않은/커밋되지 않은 변경으로 브랜치를 만듭니다.

itgroup 2023. 4. 13. 20:46
반응형

Git: 마스터에서 스테이징되지 않은/커밋되지 않은 변경으로 브랜치를 만듭니다.

콘텍스트:간단한 기능을 추가하는 마스터 작업을 하고 있습니다.몇 분 후, 저는 그것이 그렇게 간단하지 않다는 것을 깨달았고, 새로운 지사로 일하는 것이 더 나았어야 했다는 것을 깨달았습니다.

항상 있는 일입니다만, 다른 브랜치로 전환해, 이 모든 커밋되지 않은 변경을 마스터 브랜치를 클린 상태로 해 두는 방법을 알 수 없습니다.내가 생각하기에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")

당신은 이 일을 해낼 방법이 있는지 알고 있나요?

보관할 필요가 없습니다.

업데이트 2020 / Git 2.23


2 Git 2.23을 합니다.switch커맨드는, 「」의 , 「」를 참조해 주세요.checkout(「 」, 「 」, 「HEAD」)

Git 부터 Git을 합니다.git checkout하다

git switch -c <new-branch>

동작은 변경되지 않습니다.

업데이트 2020 이전 / Git 2.23


git checkout -b new_branch_name

는 로컬 변경에 영향을 주지 않습니다.현재 HEAD에서 브랜치를 생성하여 HEAD를 설정합니다.그게 네가 원하는 거구나

--- 편집하여 체크아웃 마스터의 결과를 설명합니다 ---

헷갈리세요?checkout master경경 내용 ?기 기? ???

변경은 로컬에 한정되어 있기 때문에 git에서는 쉽게 잃어버리는 것을 원하지 않습니다.브랜치를 변경해도 git은 로컬 변경을 덮어쓰지 않습니다.의 그결의 checkout master 말합니다

M   testing

GIT 파일않았습니다.의 변경이 됩니다.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변경된 파일은 표시되지 않습니다.

--- 작업 디렉토리(로컬파일)에 대한 혼란을 해소하기 위해 편집합니다.

첫번번 、 멘 well well well well well well 、 역, well well well well well well well well well... 음,아, 아, 아, 아, 아, 아, 아, 아, 아, 아.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에는, 단계적인 변경도 필요하게 됩니다).

현재 분기의 현재 커밋되지 않은 변경을 새 분기로 이동하려면 다음 명령을 사용하여 새 분기를 만들고 커밋되지 않은 변경을 자동으로 복사합니다.

git checkout -b branch_name

현재 브랜치(마스터라고 가정)에서 새 브랜치를 만들고 커밋되지 않은 변경을 복사하여 새 브랜치로 전환합니다.

스테이징에 파일을 추가하고 변경을 새로운 브랜치에 커밋합니다.

git add .
git commit -m "First commit"

새로운 브런치가 작성되기 때문에 리모트에 푸시하기 전에 업스트림을 설정해야 합니다.업스트림을 설정하고 리모트로 푸시하려면 다음 명령을 사용합니다.

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

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

마스터 브랜치에서 커밋되지 않은 변경을 폐기하려면 다음 명령을 사용합니다.

git checkout master -f

그러면 체크아웃 시 커밋되지 않은 로컬 변경 내용이 모두 폐기됩니다.

만약 당신이 GitHub Windows 클라이언트(나처럼)를 사용하고 있고 새로운 브랜치로 이동하고 싶은 커밋되지 않은 변경을 하고 있다면 GitHub 클라이언트를 통해 간단히 "Crate a new branch"를 할 수 있습니다.새로 생성된 분기로 전환되어 변경 내용이 유지됩니다.

여기에 이미지 설명 입력

최신 Windows용 GitHub 클라이언트에서 커밋되지 않은 변경이 있는 경우 새 브랜치를 만들도록 선택합니다.
이 경우, 다음의 시나리오에 어떻게 대처할지를 묻습니다.

여기에 이미지 설명 입력

브랜치만 바꿔도 마찬가지입니다.

언급URL : https://stackoverflow.com/questions/2569459/git-create-a-branch-from-unstaged-uncommitted-changes-on-master

반응형