git命令
一、创建远程git仓库
1、服务器设置
- 安装git:
yum install git
- 创建专用用户:
sudo adduser git
sudo passwd git
- 初始化裸仓库:
# 切换到 git 用户
sudo -u git -s
cd ~
# 创建裸仓库目录(一般以.git结尾)
mkdir -p repos/my-project.git
cd repos/my-project.git
# 初始化裸仓库
git init --bare
- 设置权限
# 确保 git 用户拥有所有权
sudo chown -R git:git /home/git/repos
2、 SSH 密钥认证
- 生成本地 SSH 密钥
# 非服务器执行
ssh-keygen -t rsa
- 将公钥上传到服务器
# 在服务器上创建授权文件
su git
mkdir -p ~/.ssh
touch ~/.ssh/authorized_keys
# 将本地 ~/.ssh/id_rsa.pub 内容添加到 authorized_keys
- 设置权限
sudo chmod 700 /home/git/.ssh
sudo chmod 600 /home/git/.ssh/authorized_keys
3、本地连接远程仓库
- 克隆空仓库到本地
git clone git@server-ip:~/repos/my-project.git
cd my-project
- 添加文件并推送
echo "HELLO WORD" > test.txt
git add .
git commit -m "it's my test"
git push origin master
注意:
- 如果远程仓库无法推送,建议使用
git status
检查是否干净,如果不干净,用以下方式解决
# 在服务器上执行 cd /path/to/repo git config --bool core.bare true # 裸仓库无工作目录,专用于代码协作
- 如果远程仓库无法推送,建议使用
二、git开发命令
1、仓库管理
# 初始化仓库
git init [项目名] # 新建本地仓库
git clone # 克隆远程仓库
git clone -b <分支名> --single-branch <仓库URL> # 指定clone的分支
# 配置信息
git config --global user.name "name" # 设置全局用户名
git config --global user.email "email" # 设置全局邮箱
2、文件操作
# 提交工作区变更
git add 文件名 # 添加指定文件到暂存区
git add . # 添加所有修改文件
git commit -m "describe" # 提交本地仓库
# 撤销操作
git reset 文件名 # 取消暂存文件
git checkout 文件名 # 撤销工作区更改
git reset --hard # 重置到最后提交状态
3、 分支管理
# 分支操作
git branch # 查看本地分支
git branch 分支名 # 创建新分支
git checkout 分支名 # 切换分支
## 删除前必须切换分支,不能删除当前分支
git branch -d # 删除已合并分支
git branch -D # 强制删除未合并分支
git branch -d branch1 branch2 # 同时删除多个本地分支
git push --delete # 标准删除命令
# 合并代码
git merge 分支名 # 合并指定分支到当前分支
git rebase 分支名 # 变基合并
git cherry-pick 提交hash # 选择性合并提交
# 回滚到目标hash
git reset --hard
git reset --soft # 修改保留在暂存区(仅重置提交记录)
git revert <提交哈希> # 撤销单个提交
git revert OLD_HASH..NEW_HASH # 撤销连续多个提交
4、 远程协作
# 远程仓库操作
git remote add origin 地址 # 关联远程仓库
git push -u origin 分支名 # 首次推送分支
git pull # 拉去远程更新
# 列出所有远程仓库
git remote -v
git remote show origin # 替换 origin 为实际远程仓库名
# 通过 .git/config 文件能够查看URL配置
# 仅获取远程仓库URL
git config --get remote.origin.url
#验证是否已关联远程仓库
git remote # 无输出表示未关联任何远程仓库
5、 其他功能
# 日志查询
git log # 查看提交历史
git diff # 查看未暂存变更
git status # 显示当前状态
### 删除已存在的索引记录 ###
git rm -r --cached 目录
# 添加子模块
git submodule add <仓库URL> <路径>
# 实例: 添加 docs 子模块到 docs 目录
git submodule add https://github.com/your/docs-repo.git docs
# 初始化子模块
git submodule update --init
# 提交变更
git add .gitmodules
# 查看子模块状态
git submodule status # 显示子模块哈希和路径
### clone 包含子模块的项目 ###
# 克隆主项目(子模块目录为空)
git clone https://github.com/your/main-project.git
# 初始化并更新子模块(两步法)
git submodule init
git submodule update
# 一步克隆所有内容
git clone --recurse-submodules https://github.com/your/main-project.git
### 更新子模块 ###
# 进入子模块目录执行更新
cd submodule-dir
git pull origin main
# 返回主项目提交更新
cd ..
git add submodule-dir
git commit -m "更新子模块至最新版本"
# 更新所有子模块到远程最新提交
git submodule update --remote
### tar ###
tar -cvf 目标文件名.tar 源文件或目录
tar -xvf 文件名.tar -C /path/