栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

git相关教程 - 详细版(一)

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

git相关教程 - 详细版(一)

一、相关介绍 1.1 git免密clone

linux下ssh公钥验证的设置和远程登录

1.1.1 客户端操作
ssh-keygen -t [rsa|dsa]

在目录 /home/yoyo/.ssh/id_rsa 将会生成 密钥文件 和 私钥文件 id_rsa,id_rsa.pub 或 id_dsa,id_dsa.pub。

将 .pub 文件复制到git服务器的 /root/.ssh 目录下。

1.1.2 服务端操作

服务器端 /root/.ssh/ 目录下执行命令。

# 添加密钥
cat id_dsa.pub >> /root/.ssh/authorized_keys

# 设置authorized_keys权限
chmod 600 authorized_keys

# 设置.ssh目录权限
chmod 700 -R .ssh

免密测试

# 测试ssh免密码登录
ssh root@[IP]
1.2 git配置信息

1.6 起步 - 初次运行 Git 前的配置

1.2.1 全局config

该命令只需要运行一次,作用于全局配置

设置全局config

// 设置用户名、邮箱
$ git config --global user.name "John Doe"
$ git config --global user.email "johndoe@example.com"

修改全局config

git config  --global user.name [用户名]
git config  --global user.email [邮箱名]

查看全局级config

# 查看全局级的 config
git config --global -l
~/.gitconfig 或 ~/.config/git/config 文件:只针对当前用户

查看系统级的config

git config --system -l
/etc/gitconfig 文件: 包含系统上每一个用户及他们仓库的通用配置

打开全局配置文件

vi ~/.gitconfig
1.2.2 项目config

为每个项目设置config文件。

打开项目配置文件

vi /PATH/TO/XXX.git/.git/config
或者
vi /PATH/TO/XXX.git/.git/.gitconfig

查看仓库级的 config

# 进入git服务器的项目目录
cd /PATH/TO/TCP_Hardware_Server.git 

# 查看仓库级的 config
git config --local -l

修改仓库级config

# 修改仓库级config
git config user.name [用户名]
git config user.email [邮箱名]
1.2.3 查看config 配置
# 查看当前生效的配置
git config -l
1.3 reset与revert

Git恢复之前版本的两种方法reset、revert(图文详解)

回退(reset)

反做(revert)

二、常用指令

理解git中的head和master

2.1 仓库相关
# 【客户端】初始化git仓库
git init

# 【服务端】初始化Git仓库
git init --bare TF_YOLO_v3_Project.git

# 克隆仓库A
git clone root@[IP]:/PATH/TO/TCP_Hardware_Server.git

# 把工作区所有修改添加到暂存区
git add .

# 提交到git仓库
git commit -m "push current files"

# 查看仓库状态
git status
2.2 分支操作
# 查看所有本地分支
git branch -a
git branch

# 创建分支
git branch [分支名]

# 切换分支
git checkout [分支名]

# 切换master主分支
git checkout master

# 创建并切换分支
git checkout -b [分支名]

# 删除本地分支
git branch -d [分支名]
git branch -D [分支名]

# 删除远程分支
git push origin_101 --delete [分支名]
2.3 远程仓库相关

本地新建分支, push到远程服务器上之后,使用git pull或者git pull 拉取或提交数据时会报错,必须使用命令:git pull origin dev(指定远程分支);如果想直接使用git pull或git push拉去提交数据就必须创建本地分支与远程分支的关联。

# 查看远程分支完整列表
git ls-remote

# 查看远端库基本信息
git remote show origin

# 查看远端库的分支情况
git branch -r 

# 克隆远程分支
git clone -b [指定分支名] [远程分支名]

# 新建本地分支与远程分支关联
git push –-set-upstream [本地分支名] [origin/远程分支名]

# 创建本地分支到远程分支的跟踪
git branch --set-upstream-to=master

# 取消对master的跟踪
git branch --unset-upstream master

# 删除已关联的远程主机
git remote rm origin

# 删除远程分支
git push origin --delete [远程分支名]

# 查看当前远程库
git remote -v

# 拉取远程分支到本地
git pull origin [远程分支名] 

# 拉取远程分支与本地分支合并
git pull <远程主机名> <远程分支名>:<本地分支名>
git pull origin master:lljyoyo

# git pull 等价于:`git fetch` + `git merge`
1. 抓取远程仓库
git fetch [远程分支名]
2. 合并分支
git merge [远程分支名]

# 推送本地分支到远程
git push origin [本地分支名][远程分支名]
git push origin lljyoyo:master

# 推送当前分支到远程分支
git push [远程分支名]
git push origin
2.4 reset与revert

Git恢复之前版本的两种方法reset、revert(图文详解)

回退(reset)

反做(revert)

# 返回过去到最后一次提交位置
git reset --hard HEAD 

# 返回到倒数第二次版本
git reset --hard HEAD~ 

# 返回到前几次的某个版本
git reset --hard HEAD~n 

# 返回指定版本(返回后也可以回到将来版本)
git reset --hard [commit_id]
2.5 比较diff修改差异
# 比较文件差异
git diff [文件名]

# 比较本地库历史记录和工作区中的文件修改
git diff [本地库中文件历史记录(指针)] [文件名]

# 比较最新一次修改
git diff HEAD test.txt  

# 比较上一次修改
git diff HEAD^ text.txt 

# 比较[commit_id]为 46e8eaa的修改
git diff 46e8eaa test.txt 

# 比较所有文件
git diff
2.6 git日志
# 查看代码提交记录
git log

# 查看简洁提交历史记录
git log --oneline

# 显示 ASCII 图形历史记录
git log --graph

# 查看所有分支的提交 ASCII 图形历史记录
git log --all --graph

# 查看最近2次提交的历史记录
git log -n2

# 创建版本号
git tag 

# 查看所有标签
git tag

# 查看指定的标签信息
git show 

# 标签打在指定的 [CommitcommitID] 上
git tag V0.9 24f92f4

# 创建带有说明的标签,用-a指定标签名,-m指定说明文字
git tag -a V0.1 -m "version 0.1 released" 1186b5e

# 删除标签
# 创建的标签只存储在本地,不会自动推送到远程。所以,打错的标签可以在本地安全删除
git tag -d V0.1

# 推送指定的标签到远程
git push origin 

# 推送所有的标签到远程
git push origin --tags

# 删除远程标签
# 如果标签已经推送到远程,先从本地删除,然后从远程删除
git tag -d V0.9
git push origin :refs/tags/V0.9
2.7 其他指令
# 删除文件
git rm [文件]

# 删除文件夹
git rm test -r [文件夹]

# 暂存工作区
git stash 

# 恢复工作区(不删除暂存)
git stash apply 

# 删除工作区暂存
git stash drop 

# 恢复工作区(删除暂存)
git stash pop 

# 查看工作区暂存
git stash list 
三、搭建git服务器 3.1 服务器端
# 创建文件夹,用于存放git仓库
mkdir xxx
cd xxx

# 初始化Git仓库
git init --bare TF_YOLO_v3_Project.git

# 添加 git 用户
# 为了不让用户直接登录到服务器上去改工作区,并且服务器上的Git仓库通常以.git结尾,把owner改为git
groupadd git
useradd git -g git
passwd git
修改密码:Assd2633

sudo chown -R git:git TF_YOLO_v3_Project.git
3.2 客户端
# 本地创建文件夹
mkdir xxx
cd xxx

# 初始化仓库
git init 

# 将本地仓库与远程仓库关联起来
git remote add origin(远程仓库名称) root@[IP]:/PATH/TO/TF_YOLO_v3_Project.git

# 在本地新建 dev分支,并切换到dev分支
git checkout -b dev

# 在远端服务器新建dev分支
git push --set-upstream origin(远程仓库名) dev

# 本地分支代码提交到服务器
git push origin 本地分支名:远端分支名
eg:git push origin(远程仓库名) lljyoyo:lljyoyo 
# 本地lljyoyo分支代码提交到远端lljyoyo分支

# 强制提交本地分支覆盖远程分支
git push origin [远程分支名称] --force 

# 删除远程的一条记录
git reset --hard [hash指纹]
四、git关联新仓库
1. 备份本地分支,用作临时分支
git checkout -b lljyoyo_temp

2. 关联远程新仓库
git remote add origin_101 root@[IP]:/PATH/TO/TF_YOLO_v3_Project.git

3. 拉取远程新仓库
git pull origin_101 [分支名称]

4. 修改冲突,提交分支
git add .
git commit -m "xxx"

5. 提交到远程新分支
git push origin_101 lljyoyo_temp:lljyoyo
五、git仓库合并 5.1 合并分支代码到主干
# 切换到develop分支:
git checkout develop

# 把develop分支代码拉取到本地:
git pull [remote] develop

# 切换到master主干:
git checkout master

# 合并develop分支代码到master:
git merge develop

# 提交到远程master主干
git push origin_101 master:master
5.2 合并主干代码到分支
# 切换到master主干
git checkout master

# 把master主干拉取到本地:
git pull  master

# 切换到lljyoyo分支
git checkout lljyoyo

# 提交代码
# 根据提示,哪些文件发生了修改,将这些文件替换成最新的即可
git add .
git commit -m "xxx"

# 合并master到lljyoyo分支:
git merge master

# 提交到远程lljyoyo分支
git push origin_101 lljyoyo:lljyoyo
5.3 远程代码回滚
# 切换到指定分支
git checkout the_branch

# 拉取代码
git pull

# 备份当前分支
git branch the_branch_backup 

# 切换回 the_branch 分支
git checkout the_branch

# 本地回滚
git reset --hard [hash指纹] 

# 删除远程 the_branch
git push origin :the_branch

# 用回滚后的本地分支重新建立远程分支
git push origin the_branch

# 如果前面都成功了,删除这个备份分支
git push origin :the_branch_backup 
六、git删除远程记录
1. 新建一个lljyoyo分支
git branch -b lljyoyo

2. 拉取远程分支
git pull origin v1.0-develop

3. 备份本地的分支
git checkout -b lljyoyo_temp

4. 切换回原分支
git checkout lljyoyo

5. 查看本地的提交记录
git log --graph

6. 本地回滚
git reset --hard [hash值]

7. 强制更新远程分支
git push --force origin lljyoyo:v1.0-develop

8. 修改代码(或者文件替换),提交本地分支
git add .
git commit -m "xxx"

9. 更新远程分支
git push origin lljyoyo:v1.0-develop
七、gitlab教程 7.1 初次创建仓库
1. 在gitlab网页中手动创建git仓库 pro_koalo_onlyone

2. 将git仓库clone到本地
git clone ssh://git@[IP]:30001/algorithm/pro_koalo_onlyone.git

3. 进入clone下来的目录中
cd pro_koalo_onlyone

4. 新建本地分支
git checkout -b v1.0-develop

5. 将代码拷贝到本地分支中
如果提示是否合并,则不合并或者跳过

6. 添加到仓库
git add .

7. 提交到仓库
git commit -m "稳定版本_202005301413_lljyoyo"

8. 更新到远程仓库
git push origin v1.0-develop
7.2 提交代码到远程仓库
1. clone远程代码
git clone ssh://git@[IP]:30001/algorithm/pro_koalo_onlyone.git
git clone -b <指定分支名> ssh://git@[IP]:30001/algorithm/pro_koalo_onlyone.git

2. 新建本地最新版本的分支 lljyoyo
git checkout -b lljyoyo

3. 将代码拷贝到本地分支中
如果提示是否合并,则不合并或者跳过

4. 提交本地分支 lljyoyo 的代码到仓库中
git add .
git commit -m "xxx"

5. 切换到远程分支 v1.0-develop
如果提示需要新建分支,那新建一个和远程分支一样的分支 v1.0-develop
git checkout remote/origin/v1.0-develop
git checkout -b v1.0-develop

6. 将远程分支pull下来 
git pull origin v1.1-develop

7.1 如果发生冲突,根据提示,哪些文件发生了修改,将这些文件替换成最新的即可
https://www.liaoxuefeng.com/wiki/896043488029600/900004111093344

7.2 git add .

7.3 git commit -m "xxx"

8. 合并分支 lljyoyo 到分支 v1.1-develop
git merge lljyoyo

9. 更新远程分支
git push origin v1.1-develop:v1.1-develop
八、可能出现的问题 Q: 远程 HEAD 指向一个不存在的引用

git clone下载代码提示不存在HEAD指向的文件

git clone 下载一个仓库出现一个警告,没有生成相关的代码
  warning: 远程 HEAD 指向一个不存在的引用,无法检出。
  warning: remote HEAD refers to nonexistent ref, unable to checkout.
解决方案:
1. git clone克隆代码
mkdir demo_file
git clone root@[IP]:/PATH/TO/TF_YOLO_v3_Project.git
cd TF_YOLO_v3_Project

2. 查看分支
git branch
git branch -a

3. 切换分支
git checkout remotes/origin/lljyoyo
git branch -a

4. 创建本地分支
git checkout -b lljyoyo
Q: Automatic merge failed

git常见问题之git pull时Automatic merge failed; fix conflicts and then commit the result

错误原因:
本地分支与远程分支内容不一样,拉取远程分支失败

解决方案:
1. 先提交本地分支 lljyoyo
2. 再创建新分支 develop
3. 切换到新分支,拉取远程分支
4. 切换回原分支,合并远程分支 git merge develop
5. 如果提示合并失败,那用pycharm打开项目,修改报错的代码
6. 修改完成之后,提交本地分支 lljyoyo
7. 推送本地分支到远程分支 git push origin_101 lljyoyo 
Q: gitlab克隆代码出错
Cloning into 'device_video_play'...
> GitLab: The project you were looking for could not be found.
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.
错误原因:
ssh公钥验证失败

解决方法:
重新生成ssh公钥
ssh-keygen -t rsa

在目录 `/home/yoyo/.ssh` 生成公钥 `id_rsa.pub`,再添加到 gitlab SSH Keys 中。
Q: failed to push some refs to
git 错误error: failed to push some refs to error: failed to push some refs to 'git@github.com:....." Updates were rejected because the remote contains work that you do not have locally.

This is usually caused by another repository pushing to
错误原因:
本地和远程的文件应该合并后才能上传本地的新文件

解决方法:
1、先拉下来,会自动合并的(不用操心)
git pull origin lljyoyo

2、再上传
git push origin lljyoyo:lljyoyo
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/849455.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号