使用GitLab进行版本控制是开发者日常工作的重要部分。无论是个人项目还是团队协作,GitLab提供了一个强大的平台,以支持代码的托管、review、CI/CD等功能。本指南将带你了解如何从GitLab拉取项目代码,以及如何将修改后的代码上传回GitLab。

开始之前

确保你已经安装了Git,并且有一个GitLab账户以及对应项目的访问权限。如果你是项目的创建者或被赋予了相应权限,那么你将能够执行以下操作。

1. 克隆(Clone)项目

克隆项目是将项目的仓库复制到本地的过程。首先,找到你想要克隆的项目在GitLab上的仓库地址。

  • 打开GitLab,导航到你的项目页面。
  • 点击“Clone”按钮,选择并复制提供的URL。你可以选择使用HTTPS或者SSH,但使用SSH需要事先设置SSH密钥

在你希望存放项目的本地目录中打开终端或命令提示符,然后运行:

git clone <仓库URL>

<仓库URL>替换为你刚才复制的URL。

2. 创建新分支(Branch)

为了避免直接在主分支上工作,创建一个新分支是一个好习惯。在项目目录中执行以下命令创建并切换到新分支:

git checkout -b <新分支名>

这里的<新分支名>应该反映出你即将进行的工作内容。

在这里插入图片描述

3. 进行更改并提交(Commit)

在本地编辑文件,完成你的修改后,使用git status命令查看哪些文件被修改过。然后,使用git add命令添加更改:

git add .

.代表添加所有更改,如果你只想添加特定文件,可以将.替换为文件名。

接着,使用git commit命令来提交这些更改到本地仓库:

git commit -m "提交信息"

"提交信息"中填写一个简洁明了的描述,说明你做了哪些更改。

4. 推送(Push)更改到GitLab

在提交本地更改后,你需要将这些更改推送到GitLab。首先,确保你的本地仓库与远程仓库同步,<你的分支名>必须要是gitlab上有的,不清楚的可以往后看:

git pull origin <你的分支名>

然后,使用以下命令将更改推送到GitLab:

git push origin <你的分支名>

5. 创建合并请求(Merge Request)(这步用自己的我暂时没发现用处,可能团队会用到)

推送更改后,在GitLab上为你的分支创建一个合并请求(Merge Request, MR)。这允许项目维护者查看你的更改,并决定是否将它们合并到主分支中。

  • 在GitLab项目页面,点击“Merge Requests” > “New merge request”。
  • 选择你的分支作为“Source branch”,通常主分支(比如mastermain)作为“Target branch”。
  • 填写MR的标题和描述,然后提交。

在这里插入图片描述

注意

1. push出错

你尝试推送(push)到远程仓库时,当前分支newtree1没有关联(或者说没有设置上游)远程分支。Git 不知道你想将这个分支推送到远程仓库的哪个分支上,因此会提示这个错误。

fatal: The current branch newtree1 has no upstream branch.
To push the current branch and set the remote as upstream, use

    git push --set-upstream origin newtree1

To have this happen automatically for branches without a tracking
upstream, see 'push.autoSetupRemote' in 'git help config'.

为了解决这个问题,你需要按照提示设置一个上游分支,也就是告诉Git你想将当前分支推送到远程仓库的哪个分支。根据提示,你可以使用以下命令来实现:

git push --set-upstream origin newtree1

这个命令的意思是,将当前分支newtree1推送到远程仓库origin的同名分支newtree1上,并将这个远程分支设置为当前分支的上游。如果远程仓库中没有newtree1这个分支,Git会自动为你创建一个。

2. pull担心

当你执行 git pull origin <你的分支名> 并且遇到冲突时,Git会尝试自动合并变更。如果Git无法自动解决这些冲突(通常是因为同一部分代码在本地和远程分支上都被修改了),它会标记出冲突的文件并暂停拉取操作,要求你手动解决这些冲突。这个过程不会导致你的本地数据丢失,但需要你进行选择和操作来决定最终的代码状态。

解决冲突的步骤

  1. 查找冲突:Git会明确告诉你哪些文件存在冲突。你也可以通过运行 git status 来查看冲突的文件。

  2. 解决冲突:打开冲突的文件,Git会在文件中直接标记出冲突的部分,通常看起来像这样:

    <<<<<<< HEAD
    这是你本地的版本
    =======
    这是远程的版本
    >>>>>>> origin/<你的分支名>
    

    你需要决定保留哪个版本的代码,或者合并这两个版本的更改。编辑文件,删除Git的标记(<<<<<<<=======>>>>>>>),并保存你想要的最终内容。

  3. 添加和提交更改:一旦解决了所有冲突,使用 git add <文件名> 命令将解决了冲突的文件标记为已解决。之后,你可以用 git commit 来提交这些更改。Git通常会为你提供一个关于合并冲突的默认提交信息,你可以直接使用或编辑它。

  4. 继续拉取:解决所有冲突并提交后,你已经成功合并了远程分支的更改到你的本地分支,此时没有其他额外的拉取操作需要完成。

3. git pull origin <你的分支名>和git pull的区别

在Git中,origin是远程仓库的默认名称,当你克隆一个仓库时,Git自动给这个远程仓库设置的名称就是origin。这个名称指向了你克隆的仓库的远程版本。使用origin可以帮助Git明确你想要与哪个远程仓库进行交互。

使用 git pull origin <你的分支名>

当你执行 git pull origin <你的分支名> 命令时,你是在告诉Git执行两个动作:

  1. 从远程仓库(origin)拉取指定分支(<你的分支名>)的最新更改。
  2. 将这些更改合并到你当前的本地分支中。

这个命令明确指定了从哪个远程仓库(origin)拉取数据,以及拉取哪个分支的数据。

直接使用 git pull

当你只输入git pull而不指定远程仓库和分支时,Git会采取默认行为:

  • 默认远程仓库:Git会使用当前分支配置的上游分支的远程仓库,如果没有配置上游分支,Git通常会使用origin
  • 默认分支:Git会拉取当前分支跟踪的远程分支的更新。如果当前分支没有跟踪任何远程分支,这个命令可能会失败,除非你设置了默认的拉取行为。

选择哪种方式

  • 明确指定远程仓库和分支:当你在一个多人协作的项目中工作,或者你需要从特定的远程分支拉取更新时,使用git pull origin <你的分支名>可以明确地指定你的操作,这有助于避免错误。
  • 使用默认值:如果你通常只与一个远程仓库工作,并且当前分支已经设置了跟踪对应的远程分支,那么简单地使用git pull会更快捷方便。

总的来说,origin和指定分支名的使用提供了更多的控制和明确性,有助于确保你正与预期的远程仓库和分支进行交互,特别是在复杂的工作流中。而git pull的简洁性适用于更简单或已经明确配置好的工作场景。

保护你的数据

  • 数据不会丢失:在合并冲突的过程中,Git不会自动覆盖你的本地更改,除非你告诉它这么做。在解决冲突之前,你的更改都会保留在本地。
  • 利用分支:在拉取可能导致冲突的更改前,你可以创建一个新的分支来尝试合并,这样即使出现了问题,你的主分支的状态也不会受到影响。
  • 备份:如果你担心重要数据的安全,在进行合并之前,可以将当前分支的状态备份到一个新分支上。

总之,虽然合并冲突可能看起来令人担忧,但Git提供了工具和流程来帮助你安全地解决冲突,而不会丢失数据。通过手动审查和解决这些冲突,你可以确保代码的整合符合你的期望。

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐