git에서 가져 오기는 pull과 어떻게 다르며 병합은 rebase와 어떻게 다릅니 까?
나는 이것을 이해할 수 없다. 나는 웹과 책에서 많은 것을 읽었으며 뭔가가 내 머리 속에 남아 있지 않습니다. 누군가 나에게 다음의 더미 버전을 줄 수 있습니까?
- git fetch vs pull
- git merge vs rebase
페치 vs 풀
fetch
원격 * 브랜치에서 변경 사항을 다운로드하여 리포지토리 데이터를 업데이트하지만 로컬 * 브랜치는 변경하지 않습니다.
pull
로컬 브랜치에 대한 변경을 fetch
추가로 수행합니다 merge
.
차이점이 뭐야? pull
가져온 분기의 변경 사항으로 로컬 분기를 업데이트합니다. A fetch
는 현지 지사를 진출시키지 않습니다.
병합 대 리베이스
다음과 같은 기록이 있습니다.
C --- D --- E 지역 / A --- B --- F --- G 리모트
merge
두 개의 개발 이력을 결합합니다. 원격 브랜치에서 분기 된 후 로컬 브랜치에서 발생한 변경 사항을 재생하고 결과를 새 커밋에 기록합니다. 이 작업은 각 커밋의 조상을 유지합니다.
의 효과 merge
는 다음과 같습니다.
C --- D --- E 지역 / \ A --- B --- F --- G --- H 리모트
rebase
로컬 브랜치에 존재하는 커밋을 가져 와서 원격 브랜치 위에 다시 적용합니다. 이 작업은 로컬 커밋의 조상을 다시 씁니다.
의 효과 rebase
는 다음과 같습니다.
C '-D'-E '지역 / A --- B --- F --- G 리모트
차이점이 뭐야? A merge
는 커밋의 조상을 변경하지 않습니다. A rebase
는 지역 커밋의 조상을 다시 작성합니다.
*
이 설명은 현재 분기 로컬 지점이라고 가정하고, 분기에 인수로 지정한 fetch
, pull
, merge
, 또는 rebase
원격 지점입니다. 이것은 일반적인 경우입니다. pull
예를 들어, 지정된 브랜치 에서 변경 사항을 다운로드하고 리포지토리와 현재 브랜치 merge
의 변경 사항을 업데이트합니다 .
페치 vs 풀
Git fetch는 repo 데이터를 업데이트하지만 git pull은 기본적으로 페치를 수행 한 다음 가져온 브랜치를 병합합니다.
'git pull'과 'git fetch'의 차이점은 무엇입니까?
병합 대 리베이스
Atlassian SourceTree 블로그, 병합 또는 리베이스에서 :
병합은 각 커밋 히스토리의 조상을 보존하면서 두 개의 개발 라인을 통합합니다.
반대로, rebasing은 소스 브랜치의 변경 사항을 다시 작성하여 대상 브랜치의 자식으로 표시되도록 개발 라인을 통합합니다. 이러한 커밋은 대상 브랜치의 맨 위에 작성된 것으로 효과적으로 행동합니다.
또한 Learn Git Branching을 확인하십시오. 이 게임은 HackerNews에 게시되어 있고 ( post to link ) 많은 분기 및 병합 트릭을 가르치는 멋진 게임입니다 . 이 문제에 큰 도움이 될 것이라고 믿습니다.
풀 대 가져 오기 :
내가 이것을 이해하는 방식 git pull
은 단순히 git fetch
뒤에옵니다 git merge
. 즉, 원격 지점에서 변경 사항을 가져 와서 현재 지점으로 병합합니다.
병합 대 rebase :
명령에 따라 병합이 수행됩니다. 현재 브랜치와 지정된 브랜치 (현재 브랜치)의 차이점을 병합합니다. 즉, 명령 git merge another_branch
이 another_branch
현재 분기로 병합 됩니다.
리베이스는 약간 다르게 작동하며 멋지다. 명령을 수행한다고 가정 해 봅시다 git rebase another_branch
. Git은 먼저 현재 분기와 사이의 최신 공통 버전을 찾습니다 another_branch
. 즉, 가지가 분기되기 전의 시점입니다. 그런 다음 git은이 분기점을의 머리로 이동합니다 another_branch
. 마지막으로, 원래 분기점 이후 현재 분기의 모든 커밋 이 새로운 분기점에서 재생 됩니다. 이렇게하면 분기와 병합 수가 적은 매우 깨끗한 기록이 만들어집니다.
그러나 함정이없는 것은 아닙니다! 버전 기록은 "다시 작성"되므로 커밋이 로컬 git repo에만 존재하는 경우에만 수행해야합니다. 즉 , 커밋을 원격 리포지토리로 푸시 한 경우이 작업을 수행하지 마십시오 .
이 온라인 서적에 제공된 rebasing에 대한 설명은 이해하기 쉬운 그림과 함께 아주 좋습니다.
병합 대신 rebasing으로 당겨
실제로 실제로 rebase를 많이 사용하고 있지만 일반적으로 pull과 함께 사용됩니다.
git pull --rebase
원격 변경 사항을 가져온 다음 병합 대신 리베이스합니다. 즉, 마지막으로 풀을 수행했을 때 모든 로컬 커밋을 재생합니다. 병합을 사용하여 일반 풀을 수행하는 것보다 훨씬 깔끔하다는 것을 알았습니다.
Merge - HEAD branch will generate a new commit, preserving the ancestry of each commit history. History can become polluted if merge commits are made by multiple people who work on the same branch in parallel.
Rebase - Re-writes the changes of one branch onto another without creating a new commit. The code history is simplified, linear and readable but it doesn't work with pull requests, because you can't see what minor changes someone made.
I would use git merge
when dealing with feature-based workflow or if I am not familiar with rebase. But, if I want a more a clean, linear history then git rebase
is more appropriate. For more details be sure to check out this merge or rebase article.
'IT박스' 카테고리의 다른 글
긴 문자열을 자르는 현명한 방법 (0) | 2020.06.10 |
---|---|
HttpResponseMessage에서 컨텐츠 / 메시지 가져 오기 (0) | 2020.06.10 |
Windows 64 비트에서 프로그램 파일 (x86)을 얻는 방법 (0) | 2020.06.10 |
스칼라에서 def, val 및 var 사용 (0) | 2020.06.09 |
기본 설정에서 글꼴 크기를 변경하면 Android 애플리케이션에서 TextView의 글꼴 크기가 변경됩니다. (0) | 2020.06.09 |