Gitlab에서 코드를 우아하게 끌어오고 병합하는 방법은 무엇입니까? 다음 글에서는 Gitlab에서 코드를 가져오고 병합하는 방법을 소개하겠습니다. 도움이 되셨으면 좋겠습니다!
코드 풀링 작업에는 git pull
과 git fetch
의 두 가지 형태가 있는데, 둘의 차이점은 무엇인가요? ? git pull
和git fetch
,那么这两种有什么区别呢?
让我们先来看看一个架构图
图中展示一个完整的git流程,为了更清晰的了解每个区域,我们下来解释一下他们的功能:
.git
的目录里面有个index
文件,存储着关于暂存区的内容。git add命令将工作区内容添加到暂存区。.git/objects
目录中存放了每一个提交的记录,而在.git/refs
目录下存放的是分支信息和tag信息。git fetch
拉取远程代码仓库的时候,就相当于在本地有一个远程仓库的副本,你可以选择把这个副本合并到本地仓库中。从图中可以看出来,当我们使用git pull
拉取代码的时候,是直接合并到了本地分支,而使用git fetch
拉取代码的时候,会先在本地生成一个远程仓库的副本,然后使用git merge
或者git rebase
合并到本地分支。
既然能直接git pull
何必多次一举呢?试想一个场景,当你想合并别人的代码,又不知道人家改了什么东西,是否能够跟你代码合并到一起,这时候通过git fetch
就能很轻易的实现。git fetch
以后实际并不会立马跟本地分支立马合并,在git fetch
以后,会显示如下图:
上图显示了远程新增了一个test2
分支,在test
分支上多了个一个提交信息,这时候在.git/refs/remotes/origin
目录下可以看到多了一个test2
分支。
使用git log origin/test
,可以查看具体的提交信息
如果想查看提交的内容是啥,只能通过新建一个分支,
git checkout -b test-origin git merge test
讲到这里,相信你已经明白了git pull
和git fetch
的区别了吧。总结一下:
git fetch 更安全,更人性化
git pull 更激进,破坏性更强
一般的Leader在管理项目的时候都是习惯性的使用git fetch
查看最近新增了哪些分支,做了哪些修改,从而对项目做出更好的把控。
上面提到的合并操作,一般我们直接是通过git merge dc0e4c6297cddcd31d51710b6c7de7a4
去合并某个分支的代码。先看看直接使用git merge
的问题,有一条看着很不顺眼的Merge branch
信息,如下图所示:
下图是合并后的一个流程图,当我们在main
分支拉一个dev
进行开发,这时候两个分支都有提交记录,当我们合并的时候,正常情况应该是在main的基础上,直接合并,而不是多了一个C7
的提交信息,也就是上面提到的Merge branch
,这显然是一个很不合理的现象(当然这也不影响git正常工作)。
那如何解决这个现象导致的问题呢?答案就是git rebase
.git
디렉터리에 index
파일이 있는데, 여기에는 임시 저장 영역의 내용이 저장됩니다. git add 명령은 작업 공간 내용을 스테이징 영역에 추가합니다. .git/objects
디렉토리는 각 제출의 기록을 저장하고 .git/refs
디렉토리는 분기 정보와 태그 정보를 저장합니다. git fetch
를 사용하여 원격 코드 저장소를 가져오는 것은 원격 저장소의 복사본을 로컬에 갖는 것과 같습니다. 이 복사본을 로컬 저장소에 병합하도록 선택할 수 있습니다. git pull
을 사용하여 코드를 가져오면 git fetch를 사용하는 동안 로컬 브랜치로 직접 병합됩니다. code>코드를 가져올 때 먼저 로컬에 원격 웨어하우스의 복사본을 생성한 다음 <code>git merge
또는 git rebase
를 사용하여 로컬 분기에 병합합니다. 🎜🎜직접 git pull
할 수 있는데 왜 굳이 여러 번 해야 할까요? 다른 사람의 코드를 병합하고 싶지만 변경된 내용이 무엇인지, 코드와 병합할 수 있는지 여부를 모르는 경우 git fetch
를 통해 쉽게 수행할 수 있습니다. git fetch
는 로컬 브랜치와 즉시 병합되지 않습니다. git fetch
후에는 다음 그림이 표시됩니다: 🎜🎜🎜🎜위 그림은 test2
가 원격으로 추가된 모습입니다> 브랜치에는 test
브랜치에 제출 정보가 하나 더 있습니다. 이때 .git/refs/remotes/origin
디렉터리에서 를 하나 더 볼 수 있습니다. .test2
브랜치. 🎜🎜git log Origin/test
를 사용하여 특정 제출 정보를 확인하세요🎜🎜🎜🎜제출된 콘텐츠가 무엇인지 알고 싶으면 새 브랜치를 생성하면 됩니다. 🎜# 拉取main分支代码 git fetch origin main # 合并到dev git rebase origin/main🎜이제 얘기했으니 이미 믿으실 겁니다.
git 이해하기 pull
과 git fetch
의 차이점은 무엇인가요? 요약하자면: 🎜git fetch
를 사용하여 최근에 어떤 브랜치가 추가되었는지, 어떤 수정이 이루어졌는지 확인합니다. 🎜git merge 0a05886cf065bdedb7b8b7cb9976de29
브랜치를 통해 특정 브랜치를 직접 병합합니다. 암호. 먼저 git merge
를 직접 사용할 때의 문제점을 살펴보겠습니다. 아래와 같이 매우 불쾌한 Merge Branch
메시지가 있습니다. 🎜🎜🎜🎜다음 그림은 합병 후 흐름도입니다. code>maindev
를 가져옵니다. 이때 두 브랜치에는 제출 기록이 있습니다. 병합할 때 일반적인 상황은 main을 기반으로 직접 병합하는 것입니다. 위에서 언급한 Merge 브랜치
인 C7
의 제출 정보를 하나 더 추가하는 대신 이는 분명히 매우 불합리한 현상입니다(물론 이는 정상적으로 git 작업에 영향을 미치지 않습니다). . 🎜🎜🎜🎜이 문제를 해결하는 방법 현상으로 인해 발생하는 문제점은 무엇인가요? 대답은 일반적으로 rebase로 알려진 git rebase
입니다. 🎜下面我们先来看看变基以后git分支是什么样的了
可以看到,当dev
分支更新之后,它会指向这些新创建的提交(commit),而那些老的提交会被丢弃。
上面讲了这么多,现在让我们来实际操作一下。
场景:远程有一个main
分支上有内容更新,现在我们需要把更新的内容合并到本地dev
分支上,然后push
到远程dev
分支,当前分支实在dev分支。
简单实现(就是很朴实无华):
# 拉取main分支代码 git fetch origin main # 合并到dev git rebase origin/main
上面的git rebase
还有个快捷的操作,直接一行命令搞定
# 拉取test分支代码合并到dev git pull --rebase origin test
如果你不想每次都添加rebase
,可以在终端中输入下面的命令:
git config --global pull.rebase true
这个配置就是告诉git在每次pull前先进行rebase操作
# 查看本地分支 git branch # 查看远程分支 git branch -r # 查看所有分支 git branch -a # 拉取所有远程分支代码 git fetch # 拉取origin源上所有分支代码 git fetch origin # 拉取orign源上main分支代码 git fetch origin main # 拉取远程分支到新建的一个本地分支并 git checkout -b newBrach origin/master # 合并远程分支到本地 git pull --rebase origin master # 查看提交日志 git log --oneline # 查看某个人提交的日志 git log --author=xiumubai --oneline # 查看某个文件提交的记录 git blame README.md # 查看某次提交的内容 git show dff1bc9def2d2aa5cbff98bfa970f40b # 查看最近几次的提交 git log -p -n
(学习视频分享:编程基础视频)
위 내용은 Gitlab에서 코드를 우아하게 가져오고 병합하는 방법에 대해 이야기해 보겠습니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!