다른 지점으로 커밋 푸시


384

한 지점에서 다른 지점으로 변경 사항을 커밋하고 푸시 할 수 있습니까?

나는 변화에 최선을 다하고 가정 BRANCH1을 하고 그들을 밀어 원하는 브랜치 .

에서 BRANCH1 ,이 유효 할 것입니다 :

git push origin **BRANCH2**

그런 다음 BRANCH1을 재설정 하시겠습니까?

답변:


710

거의 작동합니다.

기본이 아닌 분기로 푸시 할 때 소스 참조 및 대상 참조를 지정해야합니다.

git push origin branch1:branch2

또는

git push <remote> <branch with new changes>:<branch you are pushing to> 

26
모두 수행 branch1branch2원격에있을 필요가 있습니까? 로컬 branch1에서 원격 으로 푸시 하려면 origin branch2어떻게합니까?
orad

11
@orad : 아니요. 첫 번째 부분은 실제로 로컬 커밋의 식별자 일뿐입니다. 심지어 브랜치 일 필요는 없습니다.
SLaks

6
@abhisekp : 같은 구문을 사용하십시오. 소스 분기를 참조하려면<remote>/<branch>
SLaks

4
@abhisekp : 방금 말한대로하세요. 현재 브랜치는 전혀 관련이 없습니다.
SLaks

20
git push origin :branch2현재 로컬 브랜치를 리모컨에 밀어 넣고 branch2대신 리모컨을 삭제 하겠다고 생각하고 (나 같은) 유혹을 느끼는 사람이 있다는 것을 명심하라 branch2! 올바른 방법은 git push origin HEAD:branch2입니다.
Helera Pereira

72

확실히, 그것은 그것이 BRANCH2의 빠른 전진이거나 당신이 그것을 강요하는 경우에만 작동합니다. 그런 일을하는 올바른 구문은

git push <remote> <source branch>:<dest branch> 

작동 방식에 대한 자세한 내용 은 git push 매뉴얼 페이지 의 "refspec"에 대한 설명을 참조하십시오 . 또한 강제 푸시와 재설정은 "기록을 다시 작성하는"조작이며 원격 저장소 및 기타와 관련하여 수행중인 작업을 완전히 확신하지 않는 한 희미한 마음으로 시도해서는 안됩니다. 같은 프로젝트의 포크 / 클론을 가진 사람들.


6
감사! 나는 당신이로 할 수 있다고 덧붙일 것입니다 git push --force remote local-branch:remote-branch.
Ferran Maylinch

16

매우 간단합니다. 로컬 및 원격 위치에있는 지점 A 를 변경 했지만이 변경 사항을 어디에도 존재하지 않는 지점 B 로 푸시하려고 한다고 가정하십시오 .

1 단계 : 새 지점 B 를 작성하여 전환

자식 체크 아웃 -b B

2 단계 : 새 로컬 지점에 변경 사항 추가

git add. // 또는 특정 파일

단계 03 : 변경 사항 커밋

자식 커밋 -m "commit_message"

4 단계 : 새 분기 B로 변경 사항을 푸시하십시오 . 아래 명령은 원격으로 새 분기 B 를 만듭니다.

자식 푸시 원점 B

이제 비트 버킷에서 분기 B에 분기 A 보다 하나 이상의 커밋이 있는지 확인할 수 있습니다 . 그리고 지점 A 를 체크 아웃 할 때 이러한 변경 사항은 지점 B 로 푸시되었으므로 변경 사항이 없습니다 .

참고 : 분기 A 로 변경 사항을 커밋 한 후 해당 변경 사항을 새 분기 B 로 변경하려면 해당 변경 사항을 먼저 재설정해야합니다. # 해피 러닝


2

내 경우에는 하나의 로컬 커밋이 origin\master있었지만로 푸시되지 않았지만 로컬 master브랜치에 커밋되었습니다 . 이 로컬 커밋은 이제 다른 브랜치로 푸시되어야합니다.

Git Extensions 를 사용하면 다음과 같은 작업을 수행 할 수 있습니다.

  • 커밋을 푸시하려는 새 브랜치를 체크 아웃하십시오 (존재하지 않는 경우 생성).
  • 히스토리에서 커밋을 선택하십시오. 커밋 되고이 분기로 푸시되어야합니다.
  • 마우스 오른쪽 단추를 클릭하고 Cherry pick commit을 선택하십시오 .
  • 그 후 Cherry pick 버튼을 누르십시오 .
  • 선택한 커밋이 체크 아웃 된 브랜치에 적용됩니다. 이제 커밋하고 푸시하십시오.
  • 잘못된 커밋으로 이전 브랜치를 확인하십시오.
  • 이 분기를 두 번째 마지막 커밋으로 다시 재설정하십시오. 마지막 커밋을 마우스 오른쪽 버튼으로 클릭하고 현재 분기 재설정을 여기로 선택 하십시오 . 무엇을하고 있는지 아는 경우 조작을 확인하십시오.

GIT 명령 줄 에서도 그렇게 할 수 있습니다 . David Christensen 에서 복사 한 예 :

나는 당신이 git cherry-pick+ git reset훨씬 빠른 워크 플로우를 찾을 것이라고 생각합니다 .

"feature"가 최상위 커밋이 잘못된 브랜치 인 동일한 시나리오를 사용하면 훨씬 쉽게 수행 할 수 있습니다.

git checkout master
git cherry-pick feature
git checkout feature
git reset --hard HEAD^

상당히 많은 작업을 저장 git cherry-pick 하고 처리하도록 설계된 시나리오입니다 .

또한 이것이 최선의 커밋이 아닌 경우에도 잘 작동합니다. 다음을 통해 체리 픽에 대한 논쟁에 대한 헌신이 필요합니다.

git checkout master
git cherry-pick $sha1
git checkout feature
git rebase -i ... # whack the specific commit from the history


2

나는 git push origin branch1:branch2명령 으로 나쁜 결과를 얻었습니다 .

제 경우 branch2에는 삭제되고 branch1새로운 변경 사항으로 업데이트되었습니다.

당신이 원하는 경우에 따라서 만 변화가 밀어 branch2로부터 branch1, 아래의 절차를 시도 :

  • 켜기 branch1:git add .
  • 켜기 branch1:git commit -m 'comments'
  • 켜기 branch1:git push origin branch1

  • 켜기 branch2:git pull origin branch1

  • 켜기 branch1: 이전 커밋으로 되돌립니다.


0

당신은 이것을 쉽게 할 수 있습니다

git status
git add .
git commit -m "any commit"
git pull origin (branch name, master in my case)
git push origin current branch(master):branch 2(development)(in which you want to push changes)

-1

git init 
#git remote remove origin
git remote add origin  <http://...git>
echo "This is for demo" >> README.md 
git add README.md
git commit -m "Initail Commit" 
git checkout -b branch1 
git branch --list
****add files***
git add -A
git status
git commit -m "Initial - branch1"
git push --set-upstream origin branch1
#git push origin --delete  branch1
#git branch --unset-upstream  


1
코드에 대한 설명을 추가하십시오.
Nakx

-4

BRANCH1에 커밋했으며 변경 사항을 잃지 않고이 커밋을 제거하고 싶습니까? git reset 이 필요합니다. 하다:

git branch BRANCH2

BRANCH2를 새 브랜치로 사용하려는 경우 원하는 경우이를 다른 분기와 병합 할 수도 있습니다. BRANCH2가 이미 존재하면이 단계를 생략하십시오.

그런 다음 수행하십시오.

git reset --hard HEAD~3

커밋 한 브랜치에서 커밋을 재설정하려는 경우. 이것은 마지막 3 개의 커밋을 변경합니다.

그런 다음 재설정 된 커밋을 BRANCH2로 가져 오려면 다음을 수행하십시오.

git checkout BRANCH2

이 소스는 도움이되었습니다 : https://git-scm.com/docs/git-reset#git-reset-Undoacommitmakingitatopicbranch

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.