답변:
간단하게 실행하여 패치 파일을 적용 할 수 있습니다 (변경 사항을 아직 커밋하지 않고).
git apply patchfile
그런 다음 현재 작업 디렉토리에서 새 숨김을 만들 수 있습니다.
git stash
git stash show "stash@{0}" -p > patch
OP의 두 번째 쉘 명령 대신 다음과 같이했습니다.
stash@{0}
..
또는 다음을 사용하여 숨김 컴퓨터 (컴퓨터 1)에서 분기를 만들 수 있습니다.
git stash branch stashed_changes_branch
변경 사항을 커밋하십시오.
git commit -a
그런 다음 컴퓨터 2에서 원격으로 추가하십시오.
git remote add pc1 user@computer1:/path/to/repo
지금 당신은 사용하여 원격 정보를 검색 할 수 있습니다
git fetch pc1
이제 커밋을 원하는 방식으로 가져올 수 있습니다. 사용하여 자식 체리 - 선택 , 자식 REBASE 또는 같은 ... 당신이 방금 않았다처럼 보이게하려는 경우 당신이 무엇을 자식 숨긴 적용을 ; git cherry-pick --no-commit을 사용할 수 있습니다 .
computer1과 computer2를 직접 연결하지 않은 경우; 원격을 사용할 수 있습니다 (github 또는 이와 유사한 것) :
git push origin stashed_changes_branch
컴퓨터 2 :
git fetch
git stash list --oneline
하면 기술적으로 스 태쉬를 새로운 커밋 객체에 적용 할 필요가 없습니다. 다시 말해, 새로운 브랜치를 생성 할 필요가 없습니다. 그러나 스 태쉬를 리모콘에 직접 밀어 넣는 것은 가장 까다 롭습니다.
또는 다음과 같이 전체 로컬 스 태쉬를 다른 compter로 내보낼 수 있습니다
git pull
이전 및 새 git 디렉토리 모두에서 최신 변경 사항이 있는지 확인하십시오.한 시스템에서 패치 파일로 숨김을 생성 한 다음 해당 패치 파일을 다른 시스템과 공유 할 수 있습니다.
숨김을 패치로 작성
$ git stash show "stash@{0}" -p > changes.patch
"stash @ {0}"은 숨김의 참조이며 최신 숨김으로 패치 파일을 작성합니다. 다른 명령 $ git stash list
을 사용 하려면 스 태쉬 목록을보고 패치 할 패치를 선택하십시오.
패치 적용
이제 해당 숨김을 다른 시스템으로 전송하여 프로젝트의 루트 폴더에 붙여 넣습니다. 그런 다음이 명령을 실행하십시오.
$ git apply changes.patch
실수가 있고 변경을 취소하려는 경우
$ git apply changes.patch --reverse
다른 옵션은 한 컴퓨터에서 다른 컴퓨터 로 rsync
의 .git
폴더입니다. rsync
파일 변경 만 처리합니다 (사본보다 빠름).
이 접근 방식의 한 가지 단점은 구성을 덮어 쓰는 것입니다. 두 시스템간에 서로 다른 .git 구성을 실행하는 경우 바람직하지 않을 수 있습니다. 그러나의 --exclude
옵션으로 파일을 제외하면이를 극복 할 수 rsync
있습니다.
전반적으로 네이티브 Git 솔루션이 더 깨끗하다고 생각하지만이 rsync
해킹은 git보다 rsync에 더 익숙한 서둘러 누군가에게 좋을 수 있습니다.
원래 게시물의 시작 명령 :
git stash show -p stash@{x} > patch_file
나를 위해 작동하지 않았습니다 (어떤 이유로 사용할 수없는 패치 파일을 만들었습니다). 대신 나는해야했다 :
git stash apply stash@{x}
git commit
내가 숨기고 싶은 각 은신처마다. 그런 다음 '부모'저장소를 '자식'저장소의 file : /// 도달 범위 내에 배치하고 각 숨김 커밋에 대해 다음을 수행했습니다.
git fetch file:///path_to_parent_git && git cherry-pick commit_sha
git reset --soft HEAD^
git stash save my_new_stash_on_child
이것은 더 복잡하지만 나를 위해 속임수를 사용했습니다.
스 태시는 기본 커밋과 인덱스 사이의 작업 트리의 특수 병합 커밋입니다. 한 가지 방법은 각각을 별도의 패치로 저장하고, 숨김 첫 번째 상위를 체크 아웃하고, 두 패치에서 인덱스와 작업 트리를 복원 한 다음, 숨김을 복원하는 것입니다 (하나의 답변이 이런 식으로 진행되는 것처럼 보입니다).
이것은 숨김에서 모든 정보를 완전히 재생성하는 데 필요하며, 걱정하지 않을 경우 충돌을 피하고 숨김이 생성 된 위치를 추적하기 위해 복원하기 전에 숨김의 첫 번째 부모를 최소한 체크 아웃해야합니다.
이것이 한 저장소에서 다른 저장소로 모든 숨김을 완전히 복원하기 위해 수행 한 작업입니다. 동일한 컴퓨터에 태그를 보유 할 수없는 경우 숨김 태그를 작성한 후 번들에 저장하고 참조 목록 및 번들을 대상 컴퓨터에 복사 할 수 있습니다.
원래 저장소의 루트에서 :
stash_
논리 숨김 참조의 숫자 + 사용 )refs=$(git stash list|cut -d: -f1)
for ref in $refs; do tag stash_${ref//[^0-9]} $ref; done
refs=$(git rev-parse $refs|tac)
oldpath=$PWD
주의 : 이것은 bash 또는 호환 쉘이 필요합니다 (ksh, zsh should do ...) stash_$((i++))
쉘이 지원하지 않는 경우 변수를 증가시킬 수도 있습니다${param//pattern}
이제 새로운 레포에서 각 심판에 대해 :
for ref in $refs; do git fetch $oldpath $ref; git stash store -m "$(git show -s --pretty=%s $ref)" $ref; done
git stash save
는 이제 더 이상 사용되지 않습니다git stash push