常用git操作

101 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第3天,点击查看活动详情

中文文档:git-scm.com/book/zh/v2/

英文文档:git-scm.com/doc

获取当前分支名

git symbolic-ref --short -q HEAD

获取最新tag

git describe --tags `git rev-list --tags --max-count=1`

基础操作

//显示出所有有差异的文件列表
git diff branch1 branch2 --stat   
​
//显示指定文件的详细差异    
git diff branch1 branch2 文件名(带路径)
​
//显示出所有有差异的文件的详细差异
git diff branch1 branch2 
​
//合并分支 先切换到dev_test
git merge feature/settlement
​
//查看本地分支
git branch -l
​
//查看远程分支
git branch -r
​
//查看全部分支
git branch -a//查看远程分支地址
git remote -v
​

对比本地和远程

git diff master origin/master  

更新

git pull thunder_origin master

解决pr冲突

// 添加远程仓库地址
git remote add 名字 仓库地址
​
git remote add thunder_origin http://git.xx.cn:8082/xxx.git// 更新远程origin仓库代码 到 本地仓库
git pull thunder_origin master
// 然后解决冲突 在提交到自己fork的仓库分支
// 最后再提pr或者之前提过 pr也会更新
// 提过pr后 不要在修改对应分支 修改pr上也会修改

还原远程分支

// 还原本地分支
git reset b56de21f0c5365412c6c0cce5a9297fe390e2a66
// 强制提交,远程端将强制跟新到reset版本
git push -f origin sunxinqiang_poster

pull和merge的区别

git pull = git fetch + git merge
  • fetch和push命令可以分别对远程分支进行fetch和push操作,而pull不是直接跟远程分支对话的。

  • fetch同pull的区别在于:

    • git fetch:是从远程获取最新版本到本地,不会自动merge
    • git pull是从远程获取最新版本并merge到本地仓库
  • 从安全角度出发,git fetch比git pull更安全,因为我们可以先比较本地与远程的区别后,选择性的合并。

  • git push 默认推送到master,如果有多个分支,则多个分支一起推送到远程

git分支与删除

// 创建本地分支1
git branch test
​
git checkout test
​
// 创建本地分支2
git checkout -b test
​
// 推送到远程
git push origin test:test
​
// 删除远程
git push origin --delete test
git push origin -d test
​
//删除本地
git branch -d test
git branch -D test
​
// 批量删除本地
git branch -l | grep feature/settlement | xargs git branch -D

检出项目到指定文件夹

git clone 远程地址 文件夹名
​
git clone http://git.xx.cn:8082/sunxinqiang/xx.git thunderbolt2

检出远程指定分支

git clone -b feature/settlement git@git.xx.cn:Web/xx.git
​
git clone -b 分支名 远程库地址

重命名本地远程仓库名

git remote rename 原名 新名

git还原所有没提交的更改

  • 暂时采用编辑器的功能 这个没验证
git checkout . #本地所有修改的。没有的提交的,都返回到原来的状态

git 暂存更改

// 暂存
git stash
git stash save "work in progress for foo feature"
​
// 恢复 并删除暂存
git stash pop
git stash pop stash@{id}
​
// 恢复不删除
​
git stash apply stash@{id}
​
// 删除
git stash drop <stash@{id}>
// 删除上一个
git stash drop
// 全删
git stash clear

git merge 后未push 撤销

git reset --hard head

git基于远程分支新建分支

git checkout -b branch/new origin/master

合并trunk有冲突的解决方法

基于trunk新建分支temp
合并featrue分支 解决冲突
用temp分支提pr

删除项目git

//删除文件夹下的所有 .git 文件
​
find . -name ".git" | xargs rm -Rf
​
//初始化仓库
​
git init

master分支删除与重建

fork的master搞坏后

# 1.基于master_origin创建分支 master-b
# 2.gitlab设置master-b为默认分支
# 3.删除 master分支
# 4.基于master-b分支新建master
# 5.删除master-b# 默认分支设置:gitlab-settings-general-generalProject

git tag 删除

# 删除本地
git tag -d v1
# 删除远程
git push origin :refs/tags/v1
# tag和远程同步,删除本地有 远程没有的tag
# --prune/-p 拉取代码前,删除远程没有的远程引用(tags除外)
# --prune-tags/-P 拉取代码前,删除远程没有的本地tag (需要加上--prune)
# --force/-f 如果更新了tag, 需要加这个才能更新本地tag引用
git fetch --prune --prune-tags --force
git fetch -pPf