커밋 준비가되지 않았지만 다른 워크 스테이션 또는 랩톱에서 완료해야하는 워크 스테이션에 커밋되지 않은 코드가있는 문제가 발생하는 경우가 있습니다.
“소프트 커밋 (soft commit)”또는 다른 머신으로 변경 사항을 다른 곳으로 옮기는 다른 방법과 같은이 문제에 대한 해결책이 있습니까?
제대로 구현되지 않은 변경 사항을 커밋하고 푸시하지 않는 것이 좋습니다.
답변
다음은 로컬 리포지토리가 다른 서버 (예 : github)에있는 리포지토리의 복제본이라고 가정합니다. 업스트림 서버를 변경할 권리가 있습니다. 이 예에서는이 업스트림 리포지토리를 “원본”이라고했습니다. git remote show
다른 저장소를 나열하기 위해 실행하십시오 . 이것은 그것이 무엇인지에 대한 힌트를 줄 수 있습니다.
지점을 만드는 것이 좋습니다. 그러면 다른 컴퓨터에서 지점을 확인할 수 있습니다. 실제로 작업을 시작하자마자 지점을 만들면 안정적인 코드 세트를 사용하지 않고도 지점에 “커밋”하고 작업을 추적하고 백업 할 수 있습니다. 작업에 만족하면 “마스터”지점으로 다시 병합 할 수 있습니다.
- 리포지를 분기하려면 :
git checkout -b MyNewBranch
- 새 지점의 커밋 된 변경 사항을 푸시하려면
git push origin MyNewBranch
- 다른 머신에서 브랜치를 체크 아웃하려면 :
git checkout MyNewBranch
- 다른 지점으로 전환하려면 (예 : “마스터”)
git checkout master
- 마스터 인 경우 MyNewBranch를 다시 병합하려면 다음을 수행하십시오.
git merge MyNewBranch
- 분기를 나열하려면
git branch
답변
git diff
패치를 만든 다음 다른 컴퓨터에 적용 할 수 있습니다 . 또는 임시 커밋을 만든 다음 다른 컴퓨터에서 가져 오기를 수행 할 수 있습니다. 다른 머신에 임시 브랜치를 생성하고 임시 커밋을 푸시 한 다음 브랜치를 삭제할 수도 있습니다.
내가 좋아하는 방법은 두 번째 방법입니다. 임시 커밋을 만든 다음 다른 컴퓨터로 이동하여 다음과 같이하십시오.
$ git fetch ssh://first_machine/path/to/repo whatever_branch_i_was_working_on
$ git reset --hard FETCH_HEAD
$ git reset HEAD^
답변
나는 그것을 저지른다 . 나는 그것을 개인 지점으로 밀고 다른 쪽을 확인하고 수정합니다. 완료되면 개인 브랜치를 삭제하십시오.
물론 repos 사이를 직접 푸시하거나 bundle 또는 format-patch
/를 사용할 수 am
있지만 개인 브랜치는 훨씬 쉬운 솔루션입니다. 그리고 공유 브랜치에 푸시되지 않는 한 히스토리 재 작성은 큰 문제가되지 않습니다. 많은 프로젝트에서 사람들이하는 가정 들에게 검토를 위해 이해하기 쉽게 유지하는 기능 가지를 되감기 할 수 있습니다.
답변
쉬운 방법은 당신이 설명하는 것입니다 : .git
숨겨진 디렉토리와 프로젝트 파일을 커밋하고 마무리하거나 계속 작업 할 수있는 다른 머신에 복사하십시오 .
.git
디렉토리는 자식 역사는 계속된다, 그래서 실제 파일과 함께이를 보존하는 것이 전체 프로젝트의 역사는 그대로 유지됩니다.
원래 머신을 사용하여 영구적으로 수행 한 경우이 방법을 사용하는 것이 좋습니다.
답변
다른 사람들이 대답했듯이 Git을 사용하면 개인 브랜치에서 완료되지 않은 코드에 신경 쓰지 않아야합니다. 그러나 어떤 이유로 든 미완성 작품이 메인 리포지토리에 닿지 않게하려면 Git의 분산 특성을 활용할 수 있습니다!
git bundle
중앙 저장소없이 쉽게 변경 사항을 전달할 수 있는 간단한 도구 가 있습니다. 먼저 저장소를 복제하십시오.
git clone https://github.com/octocat/Spoon-Knife.git working_copy_1
cd working_copy_1
몇 가지 사항을 변경하고 임시 지점에 적용하십시오.
git checkout -b tmp_branch
git commit -a -m "temporary changes"
이제 변경 사항을 묶습니다.
git bundle create ../tmp.bundle tmp_branch
이제 새 시스템으로 메일을 보낼 수있는 번들 파일이 있습니다. 거기서 어떻게 사용합니까? 새로운 작업 사본을 만들어 봅시다 :
cd ..
git clone https://github.com/octocat/Spoon-Knife.git working_copy_2
cd working_copy_2
번들을 다른 리모컨으로 취급해야 변경 사항을 가져올 수 있습니다.
git remote add tmp ../tmp.bundle
git fetch tmp
요점은 흔적을 남기지 않고 변경 사항을 전송하는 것이 었으므로 임시 커밋을 잃지 않기 위해 변경 사항을 작업 복사본으로 스쿼시하고 싶습니다.
git merge tmp/tmp_branch --squash
남은 것은 임시 리모컨을 제거하는 것입니다.
git remote remove tmp
비올라! 브랜치 나 커밋의 흔적을 남기지 않고 변경 사항이 새 작업 복사본으로 전송되었습니다!
그러나 실제로이 과정은 상당히 길고 번거 롭습니다. 이것은 SVN이 아닌 Git입니다. 개인 지점을 중앙 저장소로 밀지 않을 이유가 없습니다.