Git에 의해 커밋되지 않은 변경 사항을 Master에서 새 지점으로 변경


답변:


151

테스트 브랜치를 체크 아웃 한 다음 커밋하면됩니다. 다른 지점으로 이동할 때 커밋되지 않은 변경 사항은 손실되지 않습니다.

마스터 지점에 있다고 가정합니다.

git checkout test
git add .
git add deletedFile1
git add deletedFile2
...
git commit -m "My Custom Message"

삭제 된 파일에 대해 잘 모르겠지만 사용할 때 포함되지 않은 것 같습니다. git add .


12
변경 사항이 해당 브랜치와 충돌하기 때문에 체크 아웃이 실패하는 경우가 있습니다. checkout -m을 사용하여 병합 할 수 있습니다.
Jouni K. Seppänen

2
나는 이것을 시도했지만 오류가 발생했다 : error : 다음 파일에 대한 로컬 변경 사항이 체크 아웃으로 덮어 쓰여질 것입니다. 브랜치를 전환하기 전에 변경 사항을 커밋하거나 숨기십시오.
ishwr

이것이 효과가 있지만 사용 숨김을 사용하는 것이 좋습니다 (IMO). 어쩌면 개인적인 선택 일 수도 있지만 논리적으로 깔끔한 워크 플로우이며 유용한 명령 인 STASH를 소개합니다.
Patrick

제목에 질문이 "새"분기와 관련되어 있음을 나타내는 "-b"옵션이 없습니다.
Guntram

195

또한 다음을 수행하여 새 분기를 작성하고 전환 할 수 있습니다.

git checkout -b new_branch
git add .

코드 편집을 시작하기 전에 항상 새 브랜치를 시작하는 것을 잊기 때문에 항상 이것을 사용합니다.


3
@jouni가 다른 답변에 대해 언급 한 것과 동일한 문제-추가 변경 사항이 원래 변경 사항과 충돌하면 분기를 마스터로 다시 병합하는 데 어려움이 발생할 수 있습니다. IMO이 글타래가 더 나은 질문에 답합니다 : stackoverflow.com/questions/556923/…
jpw

짧은, 달콤한 안심 ... "나는 ...이 모든 시간을 사용하여"
ΣοδεMεδις

1
new_branch에서 커밋하는 것을 잊지 마십시오. 마스터 브랜치로 다시 전환하고 변경된 파일을 되 돌리면 new_branch에서도 손실됩니다.
petrsyn

36

왜 git stash를 사용하지 않습니까? 복사하여 붙여 넣기처럼 더 직관적이라고 생각합니다.

$ git branch
  develop
* master
  feature1
  TEST
$

현재 분기에 이동할 파일이 있습니다.

$ git status
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#      modified:   awesome.py
#
# Changed but not updated:
#   (use "git add <file>..." to update what will be committed)
#
#      modified:   linez.py
#
$
$ git stash
Saved working directory and index state \
  "WIP on master: 934beef added the index file"
HEAD is now at 934beef added the index file
(To restore them type "git stash apply")
$
$ git status
# On branch master
nothing to commit (working directory clean)
$
$
$ git stash list
stash@{0}: WIP on master: 934beef ...great changes
$

다른 지점으로 이동하십시오.

$ git checkout TEST

그리고 적용

$ git stash apply
# On branch master
# Changed but not updated:
#   (use "git add <file>..." to update what will be committed)
#
#      modified:   awesome.py
#      modified:   linez.py
#

또한 작업 디렉토리에서 변경 사항을 유지하면서 기능 분기 를 완료 하려고 할 때 불평하는을 git stash사용하기 때문에 좋아합니다 .git flow

@ Mikey Bethany와 마찬가지로 여전히 다른 지점에 있다는 것을 잊어 버리고 새로운 문제를 해결하기 때문에 항상 이런 일이 발생합니다. 당신은 할 수 있습니다 숨기고 , 작업 git flow feature finish...git stash apply새에 git flow feature start ...지점을.


2
git stash커밋되지 않은 변경 사항을 처리하는 가장 좋은 방법입니다. 잘라내어 붙여 넣기로 생각하면 직관적 인 방법입니다.
Matthew Mitchell

이것은 나에게 좋은 접근 방식 인 것 같습니다. 문제없이 작동했습니다.
유누스 네딤 Mehel

당신이 이것을 할 수 있다는 것을 몰랐고 그것은 잘 작동했습니다. 다른 방법보다 약간 직관적입니다.
glaucon

git checkout을 사용하고 추가하는 대신보다 전문적인 방법으로 숨길 수 있다고 생각합니다. 귀하의 답변은 100 표 이상이어야한다고 생각합니다.
Matrosov Alexander

1
@ Καrτhικgit stash --include-untracked
2Toad

5
git checkout TEST
git add file1 file2
git commit
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.