2013-11-20 1 views
243

저는 dmgr2 (개발)라는 지점을 갖고 있으며, master 지점 (라이브 사이트)에서 당겨서 모든 변경 사항을 개발 지점에 통합하려고합니다. 이 작업을 수행하는 더 좋은 방법이 있습니까?git에서 개발 지점으로 마스터를 가져옵니다.

git checkout dmgr2 
git pull origin master 

이 내 개발 지점에 라이브 변경을 잡아 당기거나해야 내가이 잘못이 있습니까 : 여기 이 나는 ​​일을 무엇을 계획했다입니까?

+1

먼저 dmgr2 분기의 모든 변경 사항을 커밋합니다. master 1.git checkout master를 가리킨 다음 최신 변경 내용을 가져옵니다. 2.git pull 3.git merge dmgr2 4.git push -u origin master 그런 다음 dmgr2로 돌아갑니다. 5.git checkout dmgr2 –

+0

나는 이미 dmgr2 브랜치에 대한 모든 변경 사항을 커밋했습니다. 죄송합니다. 4 단계를 수행하면 –

+0

을 추가하는 것을 잊어 버렸습니다. 내 발달이 마스터로 바뀌지 않을까요? 그 일을하고 싶지 않다. –

답변

360

당신이 작동 나열된 단계는하지만, 당신에게 더 많은 옵션을 제공하는 더 이상 방법이있다 :

git checkout dmgr2  # gets you "on branch dmgr2" 
git fetch origin  # gets you up to date with origin 
git merge origin/master 

fetch 명령이 merge 전에 어느 시점에서 할 수있는, 즉, 당신의 순서를 바꿀 수는 fetch은 이름이 지정된 리모컨 (origin)으로 넘어 가서 "내가 갖고 있지 않은 모든 것을 내놔"라고 말합니다. 즉, 모든 지점에서 모든 커밋을 가져옵니다. 저장소로 복사되지만 리모트의 branch 브랜치에 대해서는 origin/branch으로 명명됩니다.

이 시점에서 모든 뷰어 (git log, gitk 등)를 사용하면 자신이 갖고 있지 않은 것을 볼 수 있으며 반대의 경우도 마찬가지입니다. 때로는 Warm Fuzzy Feelings ("아, 네, 그게 사실 내가 원하는 것입니다")에만 유용합니다. 때로는 전적으로 전략을 변경하는 데 유용합니다 ("그 물건은 아직 원하지 않습니다").

마지막으로, merge 명령은 origin/master로 이름을 지정할 수있는, 주어진 커밋합니다, 그리고 당신이 merge를 실행할 때에 당신이 어떤 지점에, 커밋과 그 조상을 유치하기 위해 무슨 짓이든한다. --no-ff 또는 --ff-only을 삽입하여 빨리 감기를 방지하거나 원하는 경우 빨리 감기 만 병합 할 수 있습니다. 당신이 순서 사용할 때

:

git checkout dmgr2 
git pull origin master 

pull 명령 지시를 자식은 git fetch을 실행하고, git merge origin/master의 다음 도덕적 해당. 따라서 이것은 입니다.은 두 단계를 수작업으로 수행하는 것과 같습니다.하지만 약간의 미묘한 차이가있을 수 있습니다. (특히 pull 운영하는 fetch 단계는 origin/master을 통해 제공하고, 그것은 당신의 repo에 심판을 업데이트하지 않습니다 : 1 새로운 커밋 가 바람이라고-에만 특별한 FETCH_HEAD 참조.)

당신이 git fetch origin 더 노골적인를 사용하는 경우 (다음 선택적으로 주위를 둘러 보면) 다음 git merge origin/master 순서는, 당신은 또한 네트워크를 통해 하나의 fetch 실행하여 원격으로 최신 상태로 자신의 지역 master을 가져올 수 :

git fetch origin 
git checkout master 
git merge --ff-only origin/master 
git checkout dmgr2 
git merge --no-ff origin/master 

예를 들면.


1이 두 번째 부분은 변경-I가 된 말을 지금은 기회 주의적 "원격 지사"참조를 업데이트 "고정"-in 자식 1.8.4. (릴리스 노트가 말했듯이, 업데이트를 건너 뛰는 고의적 인 디자인 결정 이었지만, 더 많은 사람들이 git을 업데이트하는 것을 선호합니다.이전 원격 지점 SHA-1을 원한다면 기본적으로 reflog에 저장되어 복구 할 수 있습니다. 또한 업스트림 리베이스를 찾기위한 새로운 git 1.9/2.0 기능을 사용할 수 있습니다.)

+12

난 그냥, 어, 친구를 부탁하고있어. - 여기 (checkout/fetch/merge)에있는 첫 번째 코드 블록을 취소하는 방법은 어떨까요? –

+4

@RichBradshaw :'git checkout'은 일반적으로 비파괴적이고'git fetch'를 실행 취소 할 이유가 없으므로 병합 커밋을 취소하는 방법을 묻는 것처럼 들립니다. 그 답은'git reset' 또는'git revert'와 같은 다른 커밋과 같습니다. * 게시되지 않은 * 변경 사항에는 'git reset'이 보통 가장 좋은 방법입니다. 다른 사람들이 이미 가지고있는 변경 사항에 대해서는'git revert'가 더 좋을 수도 있지만 병합을 되 돌리는 것에 대한 Linus Torvald의 조언을 참조하십시오 : https://www.kernel.org/pub/software/scm/git/docs/howto/revert-a- faulty-merge.txt – torek

+0

사용할 병합 뷰어 프로그램을 어떻게 설정합니까? – PositiveGuy

관련 문제