Git客户端使用之命令行

embedded/2024/10/22 2:17:53/

git_0">一、git客户端命令行的使用

gitlab_1">1、创建本地用户并绑定ssh-key到gitlab

#在本地注册用户,这个用户随便创建它就是与git仓库连接的一个用户,不过最好喝git仓库用户一样有利于区分。
git config --global user.name "wenqiang1"
git config --global user.email "wenqiangit1@163.com"# 生成ssh-key并绑定gitlab
# ssh-keygen.exe -t rsa -C "wenqiangit1@163.com" -b 4096    # 生成ssh-key windows用法
# ssh-keygen -t rsa -C "gery_sunjian@163.com" -b 4096       # 生成ssh-key Mac用法
# ssh-keygen -t rsa                                         # 生成ssh-key linux用法
# cat ~/.ssh/id_rsa.pub                                     # 查看并复制公钥
登录github或gitlab——点击Settings——点击SSH and GPG keys——New SSH key——添加公钥

2、拉代码、提交代码到主分支(主分支用于直接上线)

(0) 本地测试git是否能通过github验证
$ ssh -T git@github.com
Hi wenqiang! You've successfully authenticated, but GitHub does not provide shell access.(1)方法一:如果web端已经创建了仓库,可以用下面的命令把web端的仓库克隆下来并在该仓库中创建和提交新的代码
git clone git@172.16.12.34:wenqiang1/2.git  #将web端的项目克隆到本地
git clone -b 分支  git@github.com:clouddeepcn/SDP-lite.git
cd 2                 #进入项目目录
git pull origin master   #把远程仓库主分支的内容同步到本地保证远程仓库和本地数据一致
touch README.md      #在本地创建新的文件
git add README.md    #添加新的文件到本地暂存区域
git status                  #查看项目的提交状态
git commit -m "add README20200707"  #将暂存区域的文件提交到本地仓库并做备注
git push -u origin master   #本地仓库的文件提交到远程仓库的主分支(2)方法二:还有一种方法能把web端仓库拉下来,首先在web端创建一个空项目existing_folder
注意:仓库existing_folder和仓库2是不同名的同一个仓库
mkdir existing_folder     #然后再本地也创建同样名字的目录
cd   existing_folder      #进入这个目录
git init                  #这个命令就可以把新创建的目录变成git仓库(本地仓库existing_folder和远程仓库2相当于1一仓库,他们里面放的是相同的文件)
git remote add origin git@172.16.12.34:wenqiang1/2.git #与web端的仓库建立连接,这一步就相当于克隆
git pull origin master   #把远程仓库主分支的内容同步到本地保证远程仓库和本地数据一致
touch 123abc.txt           #随便创建点东西
git add .                  #点表示把所有内容添加到本地暂存区域
git commit -m "all"        #把暂存区的所有代码提交到本地仓库
git push -u origin master   #最后把本地仓库的代码上传到web端远程仓库的主分支

3、创建子分支,并提交代码到子分支(子分支用于开发测试)

(1) 创建子分支
# git checkout -b dev  # 创建一个dev子分支
# git checkout dev     # 切换到子分支
# git branch -a        # 查看所有分支,*号表示正在使用的分支
* devmasterremotes/origin/master(2) 提交代码到子分支
# cd /data/myproject-test    # 进入仓库
# tuch aa                    # 创建一个文件
# git push -u origin dev     # 将代码推送到远程仓库的子分支(3) 把所有分支都拉下来
# git fetch

(3.1)可以看到子分支里面多了一个aa文件,而master分支里面是没有aa文件的
请添加图片描述

4、合并分支:通过命令将dev合并到master主分支

(1) 先在dev分支创建一些文件并提交到子分支
# git checkout dev    # 切换到子分支
# git branch          # 查看当前工作在子分支
* devmaster
# touch 2222.txt     # 创建文件并提交到远程仓库的子分支(此时远程仓库的dev有2222.txt master分支没有2222.txt)
# git add .
# git commit -m "2222.txt"(2) 切换到master分支,并更新代码到最新状态
# git checkout master
# git pull origin master   (3) 将本地的dev子分支合并到本地的master主分支中
# git merge dev
Updating 2772fb0..a2b4d70
Fast-forward2222.txt | 01 file changed, 0 insertions(+), 0 deletions(-)create mode 100644 2222.txt(4) 将本地的master分支代码提交到远程仓库的master分支上
# git add .
# git commit -m "master merge dev"
# git push origin master
Total 0 (delta 0), reused 0 (delta 0)
To git@192.168.1.12:develpment/myproject-test.git2772fb0..a2b4d70  master -> master
Branch master set up to track remote branch master from origin.(5) 每次合并分支之后,都要把之前的子分支删掉,下次再创建新的子分支
# git branch -d dev        #删除旧的子分支
gitlabmaster_103">4.1、直接在gitlab上合并子分支到master分支

(4.1)开发把远程仓库拉下来并创建子分支

# git clone git@192.168.1.12:develpment/myproject-test.git
# cd myproject-test/
# git checkout -b dev      # 创建分支
# git branch               # 查看当前所在分支
* devmaster

(4.2)创建一些文件并提交到子分支

# git pull origin master        # 先把master分支的代码更新到dev分支,使dev分支代码保持最新状态
# touch ALEX.txt
# git add .
# git commit -m "ALEX.txt"
# git push -u origin dev         # 把创建的新代码提交到dev分支

(4.3)此时dev分支有ALEX.txt 而master分支没有ALEX.txt
(4.4)使用开发账户登录gitlab提交分支合并请求(前提是master分支受保护的情况下才去这么做)
(4.4.1).选择项目仓库——点击【合并请求】
请添加图片描述
(4.4.2) 选择【新建合并请求】
请添加图片描述
(4.4.3)将dev分支合并到master分支并点击【比较分支后继续】,填写标题和描述,完成后选择【提交 合并请求】
请添加图片描述
请添加图片描述
请添加图片描述
(4.4.4)选择【提交 合并请求】后,会看到【Merge】按钮是灰色的,因为开发自己是不能给自己审核的,只能由他的主管或更高权限用户来审核
请添加图片描述
(4.4.5) 登录管理员账户、或开发总监账户去处理开发人员提交的合并请求
1>.点击项目仓库——选择【合并请求】
请添加图片描述
2>.点击【dev合并master 第1次】

请添加图片描述
3>.点击【Merge】就可以完成dev到master的合并了

请添加图片描述

4>.回到项目仓库就可以看到master分支已经有ALEX.txt文件了,并且dev分支已经被删除了(合并后开发在自己的服务器也要删除相应的dev分支)
请添加图片描述

5、checkout 删除本地文件与恢复

# 删除文件
(1)删除本地文件和远程仓库文件
git pull origin master   #把远程仓库主分支的内容同步到本地保证远程仓库和本地数据一致
git rm creat_user1.sh                   #删除文件
git commit -m "删除了creat_user1.sh"     #把现有的文件提交到本地仓库
git push -u origin master                #把本地仓库同步到远程仓库# 恢复本地误删文件
(1)如果本地误删了文件远程版本库还有的话可以恢复
[root@localhost Shell]# rm -f creat_user1.sh    #本地误删文件
[root@localhost Shell]# git checkout  -- creat_user1.sh  #恢复命令
[root@localhost Shell]# git checkout .          #恢复左右文件到最初状态

6、回滚代码

(1) 查看之前提交的历史记录
# git log
commit 735fea6d66ea40b0b66e5fdc3e6e1b9dbeb4089a    # 提交历史id
Author: wenqiang <wenqiangit@163.com>
Date:   Tue Jun 23 07:26:18 2020 -0400             # 提交历史时间(2) 回滚到上个版本
# git reset --hard HEAD^                                       # 回滚到上个版本
# git reset --hard a014e8fa410289b62380a78ce7cf8db51a3ad6fb    # 回滚到指定版本 
--hard选项表示彻底将工作区、暂存区和版本库记录恢复到指定的版本库,HEAD^表示回滚到上一个版本,HEAD^^表示回滚到上上一个版本,以此类推,如果要回滚到上100个版本,可以使用HEAD~100(3) 将回滚后的版本强推到远程仓库
# git push -f origin master(4) 如果文件只是提交到了暂存区,还没有提交到远程版本库,可以通过如下命令将暂存区代码撤回
(1)touch 1.txt     #创建了一个新的文体
(2)git add 1.txt   #将这个文件提交到暂存区
(3)git status      #查看提交状态
(3)git reset HEAD h.txt    #将提交的内容撤回

7、拉代码脚本

#!/bin/bash
# 拉代码到tomcat站点目录# 进入本地git仓库
cd /root/myproject1if [[ $? -eq 0 ]]
then# 从远端git仓库拉去代码到本地仓库git pull origin master# 将本地代码推送到tomcat站点目录并替换\cp test1  /usr/local/apache-tomcat-8.5.55/webapps/ROOT/ 
fi

8、回滚脚本

#!/bin/bash
# git回滚代码到上个版本并推送到tomcat# 进入本地git仓库
cd /root/myproject1if [[ $? -eq 0 ]]
then# 回滚到上个版本,并将本地代码强制推到远程仓库git reset --hard HEAD^# git push -f origin master  这一步可以不做# 将回滚后的代码重新拉下来并推送到tomcat站点目录并替换git pull origin master\cp test2  /usr/local/apache-tomcat-8.5.55/webapps/ROOT/ 
fi

gitlab_github_225">9、让windows下ssh-key既支持gitlab 又支持github

# 这里测试结果是id_rsa的文件不能删除,否则ssh -T gitlab不生效$ ls
SDP-lite/       config      id_rsa      id_rsa_github  known_hosts
backup_id_rsa/  config.bak  id_rsa.pub  id_rsa_gitlab$ cp backup_id_rsa/id_rsa  ./id_rsa_github
$ cp id_rsa  ./id_rsa_gitlabcat ~/.ssh/config
#github
Host github.com
HostName github.com
User git
IdentityFile "C:\Users\redcore.000\.ssh\id_rsa_github"
ProxyCommand nc -v -x 40.125.172.218:1090 %h %p#gitlab
Host gitlab
HostName gitlab.clouddeep.cn
User git
IdentityFile "C:\Users\redcore.000\.ssh\id_rsa_gitlab"[redcore@mac-dev-11 ~/.ssh]$ ssh -T git@gitlab.clouddeep.cn
Welcome to GitLab, @qiang.wen!
[redcore@mac-dev-11 ~/.ssh]$ ssh -T git@github.com         
Connection to github.com port 22 [tcp/ssh] succeeded!
Hi clouddeep-devops! You've successfully authenticated, but GitHub does not provide shell access.

http://www.ppmy.cn/embedded/129437.html

相关文章

Android中的内存泄漏及其检测方式

Android中的内存泄漏及其检测方式 一、Android内存泄漏概述 在Android开发中&#xff0c;内存泄漏是一个常见且严重的问题。内存泄漏指的是在应用程序中&#xff0c;由于某些原因&#xff0c;已经不再使用的对象仍然被引用&#xff0c;导致垃圾回收器&#xff08;Garbage Col…

Golang | Leetcode Golang题解之第480题滑动窗口中位数

题目&#xff1a; 题解&#xff1a; type hp struct {sort.IntSlicesize int } func (h *hp) Push(v interface{}) { h.IntSlice append(h.IntSlice, v.(int)) } func (h *hp) Pop() interface{} { a : h.IntSlice; v : a[len(a)-1]; h.IntSlice a[:len(a)-1]; return v }…

python 爬虫 入门 四、线程,进程,协程

线程和进程大部分人估计都知道&#xff0c;但协程就不一定了。 一、进程 进程是操作系统分配资源和调度的基本单位&#xff0c;一个程序开始运行时&#xff0c;操作系统会给他分配一块独立的内存空间并分配一个PCB作为唯一标识。初始化内存空间后进程进入就绪态&#xff0c;PC…

MySQL 设计数据表

一个数据表主要包含信息有 : 表名、主键、字段、数据类型、索引&#xff0c;本节主要介绍表的命名规范、字段命名、字段的数据类型选择。 新建的表都是新建在 “item_name” 数据库中的&#xff0c;新建 “item_name” 数据库命令如下 : CREATE DATABASE item_name;新建数据库…

信号与噪声分析——第一节-确定信号的分析

目录 1.确定信号的分析 1.1确定信号的分类&#xff1a; 1.周期信号与非周期信号&#xff1a; 周期信号的定义&#xff1a; 性质&#xff1a; 2.能量信号与功率信号&#xff1a; 定义 区别&#xff1a; 3.基带信号与频带信号&#xff1a; 基带信号的定义&#xff1a; …

shell错误修改

错误处理 检查ffmpeg和ffprobe命令是否已安装 if ! command -v ffmpeg &> /dev/null || ! command -v ffprobe &> /dev/null thenecho "ffmpeg或ffprobe未安装&#xff0c;请先安装它们。"exit ficommand -v xxxx command 是一个内置命令&#xff0c;…

工业物联网关-TCP透传

TCP透传功能提供类似于DTU(Data Transmit Unit)的功能&#xff0c;用户在网络端使用TCP协议连接网关&#xff0c;与串口通道绑定&#xff0c;建立起TCP与串口的通道&#xff0c;网关相当于一个中转点。 菜单选择"数据上行-tcp透传"&#xff0c;查看当前透传通道列表&…

【WPF】中Binding的应用

在 WPF (Windows Presentation Foundation) 中&#xff0c;数据绑定是一种强大的机制&#xff0c;它允许你将用户界面&#xff08;UI&#xff09;元素的属性与各种数据源关联起来。这种关联可以是单向的、双向的或一次性的。WPF 的数据绑定支持多种数据源&#xff0c;包括普通对…