Git项目代码拉取、推送及冲突解决

目录

SSH keys配置

Git分支

Git代码拉取推送及冲突解决

查看本地代码变更及代码回退版本操作

Git其它命令补充


SSH keys配置

在Gitlab上创建了对应的项目,进入项目详情后,会生成一个git地址,用于将远程仓库的代码克隆或拉取到本地仓库,本地仓库变更代码后进行推送到远程仓库中,频繁使用建议ssh的方式配置,HTTP的方式需要每次输入gitlab的账户及密码。

首先需确认是否已使用过SSH。当SSH太久未使用,或者相应的设备终端更换,再次使用对应的Git操作时,会报错"permission denied (publickey)",按照如下两个步骤进行操作:

1.检查电脑上是否已有ssh key

# 查看ssh key是否已生成
$ ls ~/.ssh/

# 查看公钥,将对应的公钥复制在Gitlab设置处的ssh key处
$  cat ~/.ssh/id_rsa.pub

2.当不存在ssh key时,进行创建ssh key

# 命令生成Gitlab对应账户的密钥
$  ssh-keygen -t rsa -C 'gitlab的账户名'

# 查看公钥,将对应的公钥复制在Gitlab设置处的ssh key处
$ cat ~/.ssh/id_rsa.pub

Git分支

常用分支:

  • master  主分支,有且只有一个
  • release  线上分支,一般为线上版本,线上版本发布后,会将release分支合并到master
  • develop  开发分支,通常给测试部署环境或者打包的分支,每个人在自己的分支上开发完成后,向develop分支合并
  • feature  通常是一个功能分支或者个人分支,每个公司的用法不一样,feature分支一般会有很多个,通常merge完成后会删除

在本地创建自己的分支,用于Gitlab上代码的拉取推送操作:

1)首次创建本地自己的分支,需加入gitlab的相关的账户:

# 加入邮箱
$ git config --global user.email "[email protected]"

# 加入用户名
$ git config --global user.name "xxx"

2)创建本地分支的操作命令如下:

# 查看当前分支
$ git branch
* master

# 创建并切换分支--从master分支上复制代码到新分支hd,并切换分支为test分支
$ git checkout -b test
Switched to a new branch 'test'

# 查看当前的分支在test分支上
$ git branch
* test
  master

Git代码拉取推送及冲突解决

git的基础操作三步骤:工作区---->add--->缓存区--->commit--->仓库区

在软件代码修改成功后,将代码拉取推送到Gitlab上的合并操作。推送代码之前一定要注意,代码是整个项目文件代码的路径,不是项目内某一个文件内的路径。

# 查看远程分支
$ git branch -a
* test
  master
  remotes/origin/HEAD -> origin/master
  remotes/origin/develop
  remotes/origin/master
  
# 提交变更点  
$ git add .
$ git commit -m 'xx变更'

# 将远程的代码master分支,进行拉取合并在本地查看是否有冲突
$ git pull --rebase origin master

# 合并不相关联的远程develop分支的代码到本地分支
$ git pull --allow-unrelated-histories origin develop

# 解决冲突:
从Gitlab上拉取代码有冲突后,鼠标右键点击GIT=>点击鼠标右键选择(Resolve Conflicts....)==>点击merge键,进行解决冲突

# 解决冲突后进行提交变更点
$ git add .
$ git rebase --continue

# 追加本地变更代码提交变更点
$ git add .
$ git commit -am '修改xx'

# 强制推送该命令到Gitlab上--用户推送到远程分支失败后强制执行推送
$ git push origin test -f

# 将本地分支推送到远程分支test中
$ git push origin test

# 在Gitlab上进行请求合并分支到master上
进入到Gitlab的官网上--合并请求--new merge request--进行选择分支的合并的需求,要合并的分支(test),需要合并到什么分支(master)上--点击COMPARE BRANCHES AND CONTINUE即可
# 在Gitlab上有maintainer权限或者owner权限后,可以进行选择点击‘合并’的按钮到master分支上,点击合并的按钮进行操作合并分支到master上

# 将本地分支test推送到远程的develop分支上--不用合并
$ git push origin test:develop
### 否则报错信息如下:error: src refspec develop does not match any. error: failed to push some refs

# 本地使用远程的master分支,将代码推送到远程分支上--不用合并
$ git push -u origin master

查看本地代码变更及代码回退版本操作

# 查看是否有进行安装git软件
$ git
usage: git [--version] [--help] [-C ] [-c =]
           [--exec-path[=]] [--html-path] [--man-path] [--info-path]
           [-p | --paginate | --no-pager] [--no-replace-objects] [--bare]
           [--git-dir=] [--work-tree=] [--namespace=]
            []
           
# 查看文件有怎样的修改
$ git diff

# 查看已合并的代码片段
$ git log

# 将工作区和缓存区回退到指定的log中
$ git reset --hard 03efbf2e4b652e9c4b4590935ddaf09d6beb89a0
HEAD is now at 03efbf2 update model

 

Git其它命令补充

分支常用的命令

  • git checkout 分支名称:切换分支;在切换分支之前先把本地的代码进行提交,否则切换不成功
  • git checkout -b 分支名称:创建并切换分支;从当前分支创建另外一个分支,新的分支会有原来分支的所有功能,并且在新的分支上做的任何更改不会影响原来的分支
  • git branch:查看本地所有的分支以及当前处于哪个分支
  • git branch -a:查看远程分支,远程分支会用红色表示出来
  • git branch 分支名称:创建分支,创建新的分支实际上只是创建了一个新的可移动的指针
  • git push origin 分支名称:将本地分支推送到远程分支,如果远程仓库没有这个分支,则会自动创建分支
  • git branch -vv:查看本地分支与远程仓库分支的关联情况,可查看当前分支是否有设置上游分支
  • git branch --merged:筛选已并入当前分支的所有分支
  • git branch --no-merged:筛选尚未并入的所有分支
  • git branch -u origin/分支名称:本地分支与远程仓库分支关联,前提是远程仓库有这个分支,适用于创建分支时忘记指定远程分支名
  • git branch --set-upstream 分支名称 origin/分支名称:指定具体的远程分支,将远程的分支和本地的分支关联起来,适用于创建分支时忘记指定远程分支名。
    和远程分支进行关联的分支也叫作跟踪分支或上游分支。这些分支的好处是,以后我们做push操作的时候,通过git push origin,就会自动的把代码提交到远程关联的分支,以后使用git pull origin 分支名称git push origin 分支名称的时候就可以简写成git pullgit push
  • 分支冲突:处于多人开发中,经常多个人修改同一个文件,合并时会产生冲突。需手动修改代码,解决完冲突后再重新addcommit操作
  • 允许合并没有历史相关的commit:git pull --allow-unrelated-histories origin master 。本地有一个仓库和远程也有一个仓库,本地仓库拉远程仓库,会提示如下错误:fatal: refusing to merge unrelated histories;原因是远程仓库的commit和本地仓库的commit没有历史相关,要想继续合并需使用 --allow-unrelated-histories 参数,只要本地进行commit操作,拉代码的时候就不会被覆盖掉。

#注意:做任何pull操作之前,一定要进行commit。原因是如果你和同事都修改了同一个文件,同事先提交代码到服务器。如果这时你不commit后直接pull,同事优先提交的代码会将你本地的代码进行覆盖掉,会找不回你所修改的代码

远程拉取分支

  • git fetch origin:把远程仓库的数据在本地进行更新
  • git checkout -b 分支名称 origin/分支名称:根据远程的dev分支,创建一个本地的dev分支,并将远程的分支与本地分支进行关联
  • git merge origin/分支名称:将指定的分支合并到当前分支上

 

拉取远程的分支

后续拉取远程分支的代码建议采取:git pull --rebase origin master

git pull origin mastergit pull --rebase origin master的区别:

git pull = git fetch + git merge
git pull --rebase = git fetch + git rebase

  • git merge:用git pull命令把"origin"分支上的修改pull下来与本地提交合并(merge)成版本M,成为菱形结构

Git项目代码拉取、推送及冲突解决_第1张图片

  • git rebase:创建一个新的提交R,R的文件内容和上面M的一样,但我们将E提交废除,当它不存在(图中用虚线表示),保持提交曲线为直线

Git项目代码拉取、推送及冲突解决_第2张图片

rebase好处:想要更好的提交树,使用rebase操作会更好一点。这样可以线性的看到每一次提交,并且没有增加提交节点。
1)merge 操作遇到冲突的时候,当前merge不能继续进行下去。手动修改冲突内容后,add 修改,commit 就可以了。
2)rebase 操作的话,会中断rebase,同时会提示去解决冲突。解决冲突后,将修改add后执行git rebase –continue继续操作,或者git rebase –skip忽略冲突。

删除远程分支

当工作已经完成,代码也已合并到master分支,这时可把这个远程分支删除

  • git branch -d 分支名称:删除本地分支
  • git push origin --delete 分支名称:代码推送到远程仓库master分支后删除远程分支

本地分支及远程分支:

Git项目代码拉取、推送及冲突解决_第3张图片

删除文件:

  • 此操作会删除掉项目中的某个文件还会把本地磁盘中的指定文件也删掉:git rm 文件名后执行git commit操作;
  • 删除暂存区中的文件:git rm --cached 文件名

重命名文件:git mv 原文件名 新文件名

版本回退:

  • git reset --mixed commit_id: 将暂存区的版本进行回退,并不更改本地的工作区数据
  • git reset --hard commit_id:会将指针指向指定commitid,会修改索引(暂存区)和工作区的数据,这个命令直接都回退到之前指定的版本。
  • git reset HEAD^:版本回退一个,往后走两个则是HEAD^^,如果往后走n个用HEAD~n
  • git reflog:查看HEAD指针移动的过程,可以找到对应的commit,进行版本回退
  • git log --pretty=oneline:显示完整的commit id

克隆远程仓库:git clone 仓库地址

注意:克隆的项目默认在本地会生成一个master分支,这个分支跟踪远程的origin/master分支。

查看当前项目中文件在git仓库中的状态:git status

你可能感兴趣的:(Gitlab项目代码管理统计,git,ssh,gitlab)