​git常用命令

整理常用的一些git命令

基础命令

# 查看当前提交状态
git status
# 添加文件到暂存区
git add [file1] [file2]
# 添加指定文件夹到暂存区
git add [folder]
# 添加所有文件到暂存区
git add -A
# 提交代码到本地仓库
git commit -m [message]
# 提交指定文件到本地仓库
git commit [file1] [file2] -m [message]
# 提交时显示所有diff信息
git commit -v
# 显示暂存区和工作区的差异
git diff
# 查看提交日志
git log

初始化代码库

# 在当前目录下初始化代码库
git init
# 在指定目录下初始化代码库
git init [project-name]
# 远程拉取代码库
git clone [url]
# 远程拉取代码库并指定目录
git clone [url] [project-name]

远程同步仓库

# 显示所有的远程仓库
git remote -v
# 添加远程仓库
git remote add [shortname] [url]
# 删除远程仓库
git remote rm [shortname]
# 重命名远程仓库
git remote rename [old-name] [new-name]
# 多远程仓库同步
git remote set-url --add [remote-name] [new-url]
# 拉取远程仓库所有变动
git fetch [remote]
# 拉取远程仓库指定分支所有变动
git fetch [remote] [branch]
 git remote set-url origin [地址]
# 拉取当前绑定的远程分支的代码
git pull
# 拉取指定远程分支的代码
git pull [remote] [branch]
# 推送当前分支到远程仓库
git push [remote] [branch]
# 推送所有分支到远程仓库
git push --all [remote]
# 强制推送当前分支到远程仓库
git push --force [remote] [branch]
# 强制推送所有分支到远程仓库
git push --force --all [remote]

分支管理

# 显示所有分支
git branch -a
# 显示本地分支
git branch
# 显示远程分支
git branch -r
# 创建分支
git branch [name]
# 新建一个分支并关联远程分支
git branch --track [branch] [remote-branch]
# 本地分支推送到远程仓库
git push origin [branch]
# 创建并切换到分支
git checkout -b [name]
# 切换并创建分支
git switch -c [name]
# 切换分支
git checkout [name]
# 切换分支
git switch [name]
# 删除本地分支
git branch -d [name]
# 删除远程分支
git push origin --delete [name]
# OR
git branch -dr [remote/branch]
# 修改分支名
git branch -m [old-name] [new-name]
# 修改当前分支名
git branch -m [new-name]
# 创建本地分支和远程分支的关联关系
git branch --set-upstream-to=[remote]/[branch] [local]
# OR
git branch --set-upstream [branch] [remote-branch]
# 通过push创建本地分支和远程分支的关联关系
git push -u [remote] [branch]

代码合并和回退

# 合并指定分支到当前分支
git merge [branch]
# 选择一个commit合并到当前分支
git cherry-pick [commitHash]
# 回退到指定版本
git reset --hard [commitHash]
# 回退当前修改未提交到暂存区的文件
git checkout -- [file]
# 回退当前修改未提交到暂存区的所有文件
git checkout -- .
# 回退当前修改未提交到暂存区的指定文件夹
git checkout -- [folder]
# 已经提交到暂存区的代码退到未提交状态
git reset HEAD [file]
# 删除已经提交到暂存区的文件
git rm [file1] [file2]

保存到栈

功能应用场景:

当你在开发一个新功能的时候,突然有一个bug需要修复,这个时候你可以把当前的工作保存到栈中,然后切换到bug分支进行修复,修复完成后再切换回来继续开发新功能。

shell

# 保存当前工作到栈中
git stash
# 给当前工作保存到栈中并添加备注
git stash save "message"
# 查看栈中的工作
git stash list
# 恢复栈中的工作
git stash pop
# 恢复栈中的指定工作
git stash pop stash@{0} # 0表示栈中的第一个工作
# 将堆栈中的内容恢复到当前分支,与pop不同的是,它不会删除栈中的内容,你能够多次恢复到当前工作的目录
git stash apply
# 恢复栈中指定的工作
git stash apply stash@{0} # 0表示栈中的第一个工作
# 删除栈中的工作
git stash drop
# 删除栈中指定的工作
git stash drop stash@{0} # 0表示栈中的第一个工作
# 清空栈中的工作
git stash clear
# 查看堆栈中最新保存的工作和当前目录的差异,show默认显示第一个存储
git stash show

标记

shell

# 列出所有标记
git tag
# 创建标记
git tag [name]
# 创建带备注的标记
git tag -a [name] -m "message"
# 删除标记
git tag -d [name]
# 删除远程标记
git push origin :refs/tags/[name]
# 查看标记日志
git show [name]

配置ssh

生成ssh key

bash

ssh-keygen -t rsa -C "你得git邮箱"

查看public key

bash

  cat ~/.ssh/id_rsa.pub

复制key到对应的git平台

github#

通过仓库主页 「Setting」->「SSH and GPG keys」->「New SSH key」 ,将public key添加至仓库中

gitee#

通过仓库主页 「管理」->「部署公钥管理」->「添加部署公钥」 ,添加生成的 public key 添加到仓库中。

测试ssh

# 如果配置的是github中的ssh
ssh -T git@github.com
# 如果配置的是gitee中的ssh
ssh -T git@gitee.com

首次使用ssh连接git,会提示是否继续连接,输入yes即可。

报错处理

如果在push的时候遇到如下的错误信息:

kex_exchange_identification: Connection closed by remote host
Connection closed by 20.205.243.166 port 22

解决办法:

~/.ssh下创建一个config文件,内容如下:

Host github.com
hostName ssh.github.com
User git
Port 443
ProxyCommand nc -v -x 127.0.0.1:7890 %h %p

git flow工作流

git flow是一种用于管理git分支的策略,也是一种工作流程模式。

使用git flow工作流,可以很好的管理项目的版本迭代,也可以很好的管理多人协作开发。

分支类型

  • feature分支: 用于功能开发

  • develop分支: 用于聚合feature分支开发的功能

  • release分支: 用于测试发版

  • main(master) 分支: 打上版本TAG长期稳定支持,任何一个tag都可以稳定发布

  • bugfix分支: bugfix 用于修复不紧急的bug 一般基于release创建,测试过程中出现的bug

  • hotfix 分支: 用于修复线上BUG

分支关系

  • feature分支: 从develop分支分出,合并到develop分支

  • develop分支: 从main分支分出,合并到main分支

  • release分支: 从develop分支分出,合并到develop分支和main分支

  • main(master) 分支: 从release分支分出,合并到release分支

  • hotfix 分支: 从main分支分出,合并到main分支和develop分支

代理配置

在某些情况下需要进行代理配置才能正常pullpush

ssh代理

bash

# 进入ssh配置文件
cd ~/.ssh
# 创建config文件
touch config
# 编辑config文件
vim config

config文件中添加如下内容

bash

Host github.com 
ProxyCommand connect -S 127.0.0.1:1080 %h %p

其中Host可以跟多个域名以空格进行分割即可:

Host github.com gitlab.com

-S代表的是socks代理。

http代理配置

全局全部代理配置

git config --global http.proxy http://127.0.0.1:7890
git config --global https.proxy http://127.0.0.1:7890

根据域名配置代理

git config --global http.https://github.com.proxy http://127.0.0.1:7890
git config --global https.https://github.com.proxy http://127.0.0.1:7890

取消代理配置

# 单个取消
git config --global --unset http.https://github.com.proxy
# 全部取消
git config --global --unset http.proxy

自建内网穿透服务器

介绍

几种通过自己服务器实现内网穿透的教程

基于Docker的FRP内网穿透部署

服务器搭建(FRPS)

创建配置文件

# 创建存放目录
sudo mkdir /etc/frp
# 创建frps.ini文件
nano /etc/frp/frps.ini

frps.ini内容如下:

[common]
# 监听端口
bind_port = 7000
# 面板端口
dashboard_port = 7500
# 登录面板账号设置
dashboard_user = admin
dashboard_pwd = spoto1234
# 设置http及https协议下代理端口(非重要)
vhost_http_port = 7080
vhost_https_port = 7081
​
​
# 身份验证
token = 12345678
#服务器镜像:snowdreamtech/frps
#重启:always
#网络模式:host
#文件映射:/etc/frp/frps.ini:/etc/frp/frps.ini
​
docker run --restart=always --network host -d -v /etc/frp/frps.ini:/etc/frp/frps.ini --name frps snowdreamtech/frps

中转客户端配置(FRPC)

服务器镜像:snowdreamtech/frpc
重启:always
网络模式:host
文件映射:/路径/frp/:/etc/frp/

配置文件示例:

[common]
# server_addr为FRPS服务器IP地址
server_addr = x.x.x.x
# server_port为服务端监听端口,bind_port
server_port = 7000
# 身份验证
token = 12345678
​
[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 2288
​
# [ssh] 为服务名称,下方此处设置为,访问frp服务段的2288端口时,等同于通过中转服务器访问127.0.0.1的22端口。
# type 为连接的类型,此处为tcp
# local_ip 为中转客户端实际访问的IP 
# local_port 为目标端口
# remote_port 为远程端口
​
[ssh]
type = tcp
local_ip = 192.168.1.229
local_port = 80
remote_port = 18022
​
[unRAID web]
type = tcp
local_ip = 192.168.1.229
local_port = 80
remote_port = 18088
​
[Truenas web]
type = tcp
local_ip = 192.168.1.235
local_port = 80
remote_port = 18188
​
[speedtest]
type = tcp
local_ip = 192.168.1.229
local_port = 6580
remote_port = 18190
​
​
[webdav]
type = tcp
local_ip = 192.168.1.235
local_port = 18080
remote_port = 18189
​
[RDP PC1]
type = tcp
local_ip = 192.168.1.235
local_port = 3389
remote_port = 18389
  • 如果监听服务可以有IP限制的设置,需要允许的访问IP为中转内网设备的内网IP;

  • FRP由于端口会暴露在互联网上,虽然说使用方便但安全性较差;

基于Zerotier根服务器的内网穿透部署

创建(伪)根服务器 | 项目地址:GitHub - Jonnyan404/zerotier-planet: 一分钟自建zerotier-planet

docker run --restart=on-failure:3 -d --name ztncui -e HTTP_PORT=4000 -e HTTP_ALL_INTERFACES=yes -e ZTNCUI_PASSWD=mrdoc.fun -p 4000:4000 keynetworks/ztncui

创建 moon 服务器 | 项目地址:GitHub - Jonnyan404/docker-zerotier-moon: 🐳 A docker image to create zerotier moon in one step.

#创建容器
docker run --name zerotier-moon -d -p 9993:9993 -p 9993:9993/udp -v /etc/ztconf/:/var/lib/zerotier-one jonnyan404/zerotier-moon -4 [公网ipx.x.x.x]
​
#查看moon ID
docker logs zerotier-moon

群晖 DSM 7.x 安装Zerotier客户端

登录SSH并创建虚拟网络设备TUN
#获取权限
sudo -i
​
#创建“创建虚拟网络设备TUN”的脚本,并设为开机自动运行
echo -e '#!/bin/sh -e \ninsmod /lib/modules/tun.ko' > /usr/local/etc/rc.d/tun.sh
​
#给予脚本运行权限
chmod a+x /usr/local/etc/rc.d/tun.sh
​
#运行脚本创建TUN
/usr/local/etc/rc.d/tun.sh
​
#确认TUN是否创建成功
ls /dev/net/tun

创建存放配置文件的目录

mkdir /var/lib/zerotier-one

创建Zerotier应用容器:

docker run -d           \
  --name zt             \
  --restart=always      \
  --device=/dev/net/tun \
  --net=host            \
  --cap-add=NET_ADMIN   \
  --cap-add=SYS_ADMIN   \
  -v /var/lib/zerotier-one:/var/lib/zerotier-one zerotier/zerotier-synology:latest

常用命令:

#查看zerotier状态
docker exec -it zt zerotier-cli status
​
#加入网络
docker exec -it zt zerotier-cli join [xxxxxxxxxxxx]
#加入moon服务器
docker exec zt zerotier-cli orbit [moon_ID] [moon_ID]
#确认是否加入
docker exec zt zerotier-cli listpeers 

Windows 客户端加入moon服务器

cd C:\ProgramData\ZeroTier\One
zerotier-cli orbit [moon_id] [moon_id]

常见问题

每次克隆代码都要输入用户名和密码怎么处理

1.第一种方式使用SSH免登陆配置。

2.第二种方式可以使用git config --global credential.helper store,会在本地生成一个文件,记录账号和密码 同时这么api可以指定文件的存放位置,默认是~/.git-credentials,可以通过--file [file-path]来指定目录。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值