다른 파일에 여러 커밋을했지만 지금까지 특정 커밋 만 원격 저장소에 푸시하고 싶습니다.
가능합니까?
다른 파일에 여러 커밋을했지만 지금까지 특정 커밋 만 원격 저장소에 푸시하고 싶습니다.
가능합니까?
답변:
주어진 커밋을 통해 푸시하려면 다음과 같이 쓸 수 있습니다.
git push <remotename> <commit SHA>:<remotebranchname>
제공은 <remotebranchname>
이미 원격에 존재합니다. 그렇지 않은 경우 git push <remotename> <commit SHA>:refs/heads/<remotebranchname>
자동 생성에 사용할 수 있습니다 .
이전 커밋 을 푸시 하지 않고 커밋을 푸시 git rebase -i
하려면 먼저 커밋을 다시 정렬 하는 데 사용해야 합니다.
git push <remotename> <commit SHA>:<remotebranchname>
공장. 비결은 git rebase -i
원하는 커밋을 첫 커밋으로 옮기고 커밋을 지정하는 것입니다. commit-sha
git push <remotename> <commit SHA>:refs/heads/<new remote branch name>
. 그런 다음 답변이 설명하는대로 누릅니다.
git push origin HEAD~1:master
.
-f
깃발을 사용하십시오 .
다른 답변은 재정렬 설명에 부족합니다.
git push <remotename> <commit SHA>:<remotebranchname>
하나의 커밋을 푸시하지만 그 커밋은 로컬 커밋되지 않은 커밋 중 가장 오래된 커밋이어야하며 내 의견으로는 모호한 설명 인 top, first 또는 tip 커밋과 혼동해서는 안됩니다. 커밋은 가장 오래된 커밋, 즉 가장 최근 커밋에서 가장 먼 커밋이 필요합니다. 가장 오래된 커밋이 아닌 경우 가장 오래된 로컬 푸시되지 않은 SHA에서 지정된 SHA 로의 모든 커밋이 푸시됩니다. 커밋을 재정렬하려면 다음을 사용하십시오.
git rebase -i HEAD~xxx
커밋을 재정렬 한 후에는 커밋을 원격 리포지토리로 안전하게 푸시 할 수 있습니다.
요약하면, 나는
git rebase -i HEAD~<number of commits to SHA>
git push origin <post-rebase SHA>:master
단일 커밋을 원격 마스터 브랜치에 푸시합니다.
참고 문헌 :
또한보십시오:
git rebase -i
;를 사용하는 것이 좋습니다 . 푸시하려는 커밋을 커밋 맨 위로 이동하십시오. 그런 다음 git log
rebased commit의 SHA를 가져 와서 확인한 다음 밀어 넣으십시오. 리베이스는 다른 모든 커밋이 이제 푸시 한 것의 자식임을 보장하므로 향후 푸시도 잘 작동합니다.
git log
단계를 다시 ?
Cherry-pick은 특정 커밋을 추진하면서 다른 모든 방법과 비교하여 가장 잘 작동합니다.
그렇게하는 방법은 다음과 같습니다.
새로운 지점 만들기-
git branch <new-branch>
원점으로 새 지점을 업데이트하십시오.
git fetch
git rebase
이러한 조치를 통해 원산지와 정확히 동일한 물건을 확보 할 수 있습니다.
sha id
당신이하고 싶은 체리 선택 -
git cherry-pick <sha id of the commit>
당신은 sha id
실행 하여 얻을 수 있습니다
git log
원점으로 푸시-
git push
실행 gitk
당신이 원하는 동일한 방식으로 그 모든 것을 볼 보인다.
git rebase -i
위의 솔루션을 제안 이상적인 솔루션이 될 것입니다. 체리 피킹은 커밋을 복제하려는 경우에만 사용해야합니다.
나는 당신이 그 커밋으로 돌아가서 "git revert"를해야한다고 생각한다. 또는 cherry-pick
새 브랜치를 커밋하고이를 원격 리포지토리의 브랜치로 푸시 할 수 있습니다. 다음과 같은 것 :
git branch onecommit
git checkout onecommit
git cherry-pick 7300a6130d9447e18a931e898b64eefedea19544 # From the other branch
git push origin {branch}
cherry-pick
원하는 커밋을 할 수 있습니다.
다른 디렉토리에서 다음을 수행 할 수도 있습니다.