program story

작업 공간 파일을 변경하지 않고 다른 분기로 전환

inputbox 2020. 12. 1. 07:58
반응형

작업 공간 파일을 변경하지 않고 다른 분기로 전환


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.

참고URL : https://stackoverflow.com/questions/8650310/switch-to-another-branch-without-changing-the-workspace-files

반응형