Git客户端使用之命令行

发布于:2024-10-17 ⋅ 阅读:(11) ⋅ 点赞:(0)

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

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        # 查看所有分支,*号表示正在使用的分支
* dev
  master
  remotes/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          # 查看当前工作在子分支
* dev
  master
# 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-forward
 2222.txt | 0
 1 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.git
   2772fb0..a2b4d70  master -> master
Branch master set up to track remote branch master from origin.

(5) 每次合并分支之后,都要把之前的子分支删掉,下次再创建新的子分支
# git branch -d dev        #删除旧的子分支
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               # 查看当前所在分支
* dev
  master

(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/myproject1

if [[ $? -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/myproject1

if [[ $? -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

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_gitlab

cat ~/.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.