当前位置:   article > 正文

(git指令详解)gitlab创建新分支并上传代码_公司gitlab上传代码

公司gitlab上传代码

windows,在github上clone一个项目到本地,创建一个新分支,在新分支上修改,并将新分支上传。

建议不要直接在clone下来的项目中修改,可以在本地新创建一个分支修改后上传

关于git是什么,可以参考: 廖雪峰

git常用指令



一、win10下git的下载和配置

参考: 下载git并配置

关联远程仓库(以后要clone和push的仓库)

下面origin后面的链接换成自己的

git remote add origin git@gitlab.nroad.com.cn:nroad-edu/vpp.git
git remote add origin https://gitlab.nroad.com.cn/nroad-edu/vpp.git
  • 1
  • 2

绑定用户信息和gitlab

$ git config --global user.name "注册gitlab的名字"
$ git config --global user.email "注册gitlab使用的邮箱"
  • 1
  • 2

(该信息存放在~/.gitconfig文件中)

生成秘钥/公钥:

ssh-keygen -t rsa -C "你的邮箱"
  • 1

在生成过程中会提示输入公钥存储的路径密码,建议全部回车
然后输出的信息中可以看到公钥的存储路径:your public key has been saved in 路径

  1. ubuntu 查看公钥
cat  ~/.ssh/id_rsa.pub
  • 1
  1. windows查看公钥
    一般公钥和私钥保存在C:\Users\Administrator\.ssh里面

打开id_rsa.pub,复制里面的内容 (最后面的邮箱不要复制)
打开gitlab,在设置中找到SSH,将复制内容粘贴到对应位置,添加,完成配置。
上面两步可以参考

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在要上传的项目所在目录下右键鼠标,点击git bash
在这里插入图片描述
会出来一个命令行窗口:
在这里插入图片描述

一些问题

注意项目所在目录位置,图中D:\VPP\vpp 是我正确的目录位置,可以输入git branch看分支:
在这里插入图片描述
stable/2101 是我clone的时候指定要clone的分支,clone下来后这个项目会自带一个.git文件:
在这里插入图片描述
我当时clone的时候把这个项目放在一个新建的D:\VPP中,因此在这个文件夹中打开git bash,输入指令他会提示你没有git 仓库,就像这样:
在这里插入图片描述
所以一定要在正确的目录下上传项目。

新建和切换分支:

git branch newbranch       // 新建分支
git checkout -b newbranch     // 创建并切换(常用)
  • 1
  • 2
git switch -c newbranch  // 创建并切换
git switch yourbranch    // 切换分支
  • 1
  • 2

关联本地仓库到gitlab

先查看你远程仓库的地址,ssh,https这两个地址都可以,复制
在这里插入图片描述
本地git bash中执行:

git remote add origin git@gitlab.nroad.com.cn:jiangxt/vpp.git
  • 1

注意把 git@gitlab.nroad.com.cn:jiangxt/vpp.git 换成你自己的地址。

这样你就可以开始上传项目了。

开始自己的开发

在远程公共仓库页面点击fork,克隆一个到自己的远程仓库,然后再git clone到本地开发。
未来也是git push到自己的远程仓库。

当将自己远程仓库文件推送到公共仓库时,在自己仓库左侧的merge requests中,选择源仓库源分支目标仓库目标分支,确认后即可提交…

二、新建git仓库:git init

  1. 如在E:\my_project下执行
git init 新建项目
  • 1
  1. 或在E:\my_project\project_1下执行
git init
  • 1

通过ls -al命令可以看到,在新建项目的目录下生成一个隐藏的.git文件
在这里插入图片描述
在这里插入图片描述

三、拉取项目:git clone

从远端服务器拉取项目

git clone 项目地址
  • 1

请确保有项目的访问权限,不然会出现以下问题

Cloning into '项目名称'...
remote: Repository not found.
fatal: repository '项目地址' not found
  • 1
  • 2
  • 3

对于大文件的克隆

目前一些git服务器使用Git LFS(Large File Storage)更高效地管理大文件。Git LFS是Git的一个扩展,允许将大文件单独存储在Git仓库之外。因此这时候使用git clone将无法拉取完整项目代码。
而是要使用:

git lfs clone
  • 1

参考:Git LFS使用教程

四、上传项目

当修改本地项目中一些文件,或是新建文件后,可以:

查看仓库状态:git status

git status
  • 1

出现:
在这里插入图片描述
这里提示要使用 git add ,并且说没有要commit的文件(add后才会有要commit的文件)

然后:

添加文件到暂存区:git add

git add -A     // 表示添加所有文件
git add .      // 同上
  • 1
  • 2

git add 文件名
  • 1

(暂存区指的是还没有被提交的文件区域)
在这里插入图片描述

再次查看仓库状态:
在这里插入图片描述
这里提示需要commit

然后:

提交更改:git commit

将本地暂存区的文件提交到本地的版本库中(不影响服务器):

git commit -am "test"   // 一次提交所有暂存区文件
  • 1

git commit -m "test"   // 一次提交所有暂存区文件
  • 1

一定要加 -m参数,“ ”里面写你这次改动的内容,这在后面查看的时候对这个文件改了啥一目了然。
在这里插入图片描述
再次查看仓库状态:
在这里插入图片描述

很干净,这时候就要push到远程仓库了。

修改最近一次的提交信息

比如修改最近一次提交的说明信息:

git commit --amend
  • 1

会进入vim编辑器进行修改

修改之后会生成一个新的提交节点,用于取代之前需要修改的提交节点

上传:git push

将本地版本库的分支上传到服务器的对应分支

git push 远程仓库(默认就是origin) 本地分支:远程分支
如:
git push origin jxt:jxt
  • 1
  • 2
  • 3

git push 远程仓库(默认就是origin) 本地分支
如:
git push origin jxt
  • 1
  • 2
  • 3

git push origin jxt会自动创建远程分支,该远程分支名即为本地分支名jxt

如果有问题可以加参数 -f 强制上传
不建议强制上传

上传时候的一些问题

在这里插入图片描述
这应该是之前关联仓库错误,需要将之前的仓库删掉换成想要的仓库

// 查看本地关联的仓库详细信息
git remote -v
  • 1
  • 2

我之前因为使用了git镜像网站加快clone速度,因此查看本地的关联仓库为:
在这里插入图片描述
我并不想push到这个仓库上面,因此要删掉:

// origin 替换为你本地要删除的远程仓库名字
git remote rm origin
  • 1
  • 2

然后添加自己的:

git remote add origin git@gitlab.nroad.com.cn:nroad-edu/vpp.git
  • 1

貌似用https地址会找不到分支,建议使用ssh的git地址。

五、拉取分支

拉取分支:git pull

git pull确保本地工作目录与远程仓库保持同步。==用于从远程仓库获取某个分支的更新,并与本地制定分支进行自动合并。
== 它的作用相当于执行了 git fetch(获取远程仓库的最新变化)和 git merge(将远程仓库的最新变化合并到当前分支)两个步骤。

例如:

从远程仓库origin拉取 远程分支并将其合并到本地的 本地分支

git pull origin 远端分支:本地分支       // 如果 本地分支 不存在,Git 会尝试创建一个新的分支。
  • 1

git pull origin 远端分支    // 当 远端分支名 与 本地分支名 相同
  • 1

获取远端更新:git fetch

git fetch origin 远端分支:本地分支
  • 1

git fetch origin 远端分支    // 当远端分支名与本地分支名相同
  • 1

git fetch只更新不合并,因此不影响本地当前分支(只会更新到仓库,不影响工作区),相当于本地使用git branch会看到多了一个新的分支。

合并分支1:git merge

将源分支的更改合并到当前分支中:

git checkout 目的分支    // 首先切换到目的分支上
git merge 源分支
  • 1
  • 2

git merge 源分支 目的分支
  • 1

在当前分支上创建一个新的合并提交,将源分支(要合并的分支)和当前分支的历史记录整合在一起。
特点:保留了原有分支的提交历史,合并后的提交历史是一条线性的合并历史,可以清晰地看出每个分支的贡献。

合并分支2:git rebase

将远端目标分支的更改移动到当前分支上,并使提交历史保持线性。

git rebase 远端分支      // 远端分支最好不要是公共的master分支,不然会更改master分支的log
  • 1

将源分支的提交逐个应用到当前分支的最新提交上,然后将当前分支指向最新的提交,形成一条新的提交历史线。
特点:创建了一个新的提交历史,看起来就像所有的更改都是在一个分支上进行的一样,保持了提交历史的线性性。

参考:Git合并操作之merge、rebase、squash详解

合并的冲突处理:

git merge时, 例如两个分支的同一句话有不同的修改,在合并时会产生冲突:

Auto-merging 发生冲突的文件名
CONFLICT (content): Merge conflict in 发生冲突的文件名
Automatic merge failed; fix conflicts and then commit the result.
  • 1
  • 2
  • 3

此时使用git status会提示有无法合并的文件:

On branch main
You have unmerged paths.
  (fix conflicts and run "git commit")
  (use "git merge --abort" to abort the merge)

Unmerged paths:
  (use "git add <file>..." to mark resolution)
        both modified:   file.txt

no changes added to commit (use "git add" and/or "git commit -a")
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

根据提示,可以手动修改冲突文件:

vim 发生冲突的文件名
  • 1

会出现以下内容:

<<<<<<< HEAD
This is some content on the main branch.
=======
This is some content on the feature branch.
>>>>>>> feature-branch
  • 1
  • 2
  • 3
  • 4
  • 5

=======上面是当前分支该文件内容,下面是需要合并过来的分支该文件内容,手动修改
(注意把<<<<<<< HEAD>>>>>>> feature-branch内容也删掉)

然后根据git status中出现的提示,解决冲突后使用 git add来标记已经解决,然后使用 git commit完成合并操作

六、其他git指令

删除文件:git rm

git rm 文件名
  • 1

删除文件后,该文件不再被git管理追踪

移动\重命名文件:git mv

移动文件:

git mv 文件名 路径
  • 1

重命名文件:

git mv 旧文件名 新文件名
  • 1

比较分支之间的差异:git diff

比较分支差异:

git diff 本地分支 比较分支
  • 1

比较节点差异:

git diff commit_id_1 commit_id_2
  • 1

查看日志:git log

git log
  • 1

可以查看commit提交的日志(最上面是最新的),包括作者、时间和说明。

查看详细日志,包括修改、新建、删除等:

git log --name-status
  • 1

只看最近两个提交节点信息:

git log -2
  • 1

查看分支:git branch

查看本地分支:

git branch
  • 1

查看服务器上分支:

git branch -r
  • 1

查看本地和服务器上所有分支:

git branch -a
  • 1

创建、切换分支:git checkout

git branch newbranch       // 新建分支
git checkout -b newbranch     // 创建并切换(常用),新的分支内容和之间的一模一样
  • 1
  • 2
git checkout newbranch     // 切换分支
git checkout -f newbranch     // 强制切换
  • 1
  • 2

删除分支:git branch -d

  1. 删除本地分支:
git branch -d 本地分支名
git branch -D 本地分支名    // 强制删除
  • 1
  • 2
  1. 删除服务器上的远程分支:
git push origin -d 远程分支名
  • 1

push相当于是将删除操作推送到服务器

撤销操作:git reset

通过执行git log查看历史提交节点,确定要回退的commit_id

git reset commit_id
  • 1

git reset用于撤销当前工作区执行的git addgit commit操作

查看最近git指令:git reflog

git reflog
  • 1
本文内容由网友自发贡献,转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/508778
推荐阅读
相关标签
  

闽ICP备14008679号