작업 공간 파일을 변경하지 않고 다른 분기로 전환
GitHub에서 git 저장소를 복제하고 몇 가지 변경 사항과 커밋을 수행했습니다. 나는 꽤 많이 만들었고 모두 꽤 더럽 기 때문에 풀 리퀘스트에 적합하지 않습니다. 이제에서 브랜치 cleanchanges
를 만들었 origin/master
으므로 깨끗하고 멋진 커밋 주석이있는 하나의 커밋으로 변경 내용을 커밋하고 싶습니다.
로컬 마스터에있을 때 cleanchanges
파일을 변경하지 않고 내로 전환하고 싶습니다 . 그리고 저는 커밋 할 수 있습니다.
파일을 변경하지 않고 분기를 전환하려면 어떻게해야합니까?
분명히하고 싶습니다. 모든 변경 사항은 로컬 master
. 커밋되지 않은 변경 사항이 없습니다.
편집 : 나는 당신이 이미 몇 가지 커밋을 만들었다 고 말한 것을 발견했습니다. 이 경우 git merge --squash
단일 커밋을 만드는 데 사용하십시오 .
git checkout cleanchanges
git merge --squash master
git commit -m "nice commit comment for all my changes"
( 편집 : 커밋되지 않은 변경 사항 이 있으면 다음 답변이 적용됩니다 .)
분기를 git checkout cleanchanges
. 분기가 동일한 참조를 참조하면 커밋되지 않은 모든 변경 사항은 전환 할 때 작업 디렉토리에 보존됩니다.
저장소의 일부 파일과 다른 경우 당신은 충돌이있을 것이다 유일한 시간이다 origin/master
하고 cleanchanges
. 브랜치를 방금 생성했다면 문제 없습니다.
항상 그렇듯이 작업 손실이 걱정된다면 먼저 백업 사본을 만드십시오. Git은 먼저 묻지 않고 작업을 버리지 않도록 설계되었습니다.
힘내. 다른 지점으로 전환
git checkout branch_name
가장 좋은 방법은 변경 사항 을 숨기고 분기를 전환하는 것입니다. 분기를 전환하려면 깨끗한 상태가 필요합니다. 그래서 그들을 숨기고, 새 브랜치를 체크 아웃하고, 새 브랜치에 변경 사항을 적용하고 커밋합니다.
변경 한 것처럼 들리며 그 과정에서 마스터하기 위해 커밋하고 이제는 단일 커밋으로 결합하고 싶습니다.
그렇다면 커밋 을 리베이스 하여 단일 커밋으로 스쿼시하려고합니다.
나는 당신이 정확히 무엇을 원하는지 완전히 확신하지 못하기 때문에 스크립트로 당신을 유혹하지 않을 것입니다. 그러나 나는 당신 git rebase
이 "스쿼시"에 대한 옵션을 읽고 몇 가지를 시도해 보는 것이 좋습니다.
또 다른 방법은 병합을 수행하는 대신 새 커밋을 생성하려는 경우입니다.
git checkout cleanchanges
git reset --hard master
git reset cleanchanges
git status
git add .
git commit
첫 번째 (하드) 재설정은 작업 트리를 .NET의 마지막 커밋과 동일하게 설정합니다 master
.
두 번째 재설정은 HEAD를 원래 위치로 되돌려 cleanchanges
분기 의 끝을 가리 키지 만 파일은 변경하지 않습니다. 이제 추가하고 커밋 할 수 있습니다.
이후에 작성한 더티 커밋을 제거하려면 master
(아직 푸시하지 않았다고 가정) 다음을 수행 할 수 있습니다.
git checkout master
git reset --hard origin/master
이렇게하면 모든 새 커밋이 삭제되고 로컬 master
브랜치가 저장소에있는 커밋과 동일한 커밋으로 반환 됩니다.
가장 간단한 방법은 다음과 같습니다.
git fetch && git checkout <branch_name>
왜 안돼 git reset --soft <branch_name>
?
데모:
mkdir myrepo; cd myrepo; git init
touch poem; git add poem; git commit -m 'add poem' # first commit
git branch original
echo bananas > poem; git commit -am 'change poem' # second commit
echo are tasty >> poem # unstaged change
git reset --soft original
결과:
$ git diff --cached
diff --git a/poem b/poem
index e69de29..9baf85e 100644
--- a/poem
+++ b/poem
@@ -0,0 +1 @@
+bananas
$ git diff
diff --git a/poem b/poem
index 9baf85e..ac01489 100644
--- a/poem
+++ b/poem
@@ -1 +1,2 @@
bananas
+are tasty
One thing to note though, is that the current branch changes to original
. You’re still left in the previous branch after the process, but can easily git checkout original
, because it’s the same state. If you do not want to lose the previous HEAD
, you should note the commit reference and do git branch -f <previous_branch> <commit>
after that.
'program story' 카테고리의 다른 글
루비에서 많은 심볼을 동적으로 만드는 것이 좋은 생각이 아닌 이유는 무엇입니까? (0) | 2020.12.01 |
---|---|
텍스트 영역에서 커서 위치를 어떻게 얻습니까? (0) | 2020.12.01 |
$ .browser는 정의되지 않은 오류입니다. (0) | 2020.12.01 |
“transaction.atomic”은“transaction.commit_on_success”와 동일합니까? (0) | 2020.12.01 |
Java 프로그램 종료 (0) | 2020.12.01 |