git常用指令及应用案例

一、常用指令

用户配置

复制代码
git config --global user.name "bettyaner"
git config --global user.email bettyaner@163.com

工作常用指令

复制代码
// 初始化仓库
git init 

// 对状态的跟踪、分为内容状态和文件状态
// 内容状态标示内容文件的改变,有三个区域:工作目录,暂存区和提交区
// 文件状态有两个状态:已跟踪和未跟踪
git status

// 添加文件内容到暂存区(同时文件被跟踪)
git add

// 添加所有文件
git add .

// 仅从暂存区删除
git rm --cached
// 从暂存区与工作目录同时删除
git rm

// 从暂存区提交 -m:注释
git commit -m 'first commit' 
// 从工作区提交
git commit -a -m 'full commit'

// 查看提交历史记录
git log

// 工作区与暂存区的差异
git diff

分支

复制代码
// 切换分支
git checkout newBranch
// 放弃工作区中全部的修改
git checkout .
// 将文件内容从暂存区复制到工作目录, 放弃工作区中某个文件的修改
git checkout -- filename
// 将内容从上次提交复制到工作目录
git checkout HEAD -- <file> 
// 强制放弃 index 和 工作区 的改动:
git checkout -f

// 列出所有本地分支
git branch
// 列出所有远程分支
git branch -r
// 列出所有本地分支和远程分支
git branch -a
// 创建分支
git branch newBranch [origin/newBranch]
// 删除分支
git branch -d [branch-name]

# 删除远程分支
$ git push origin --delete [branch-name]
$ git branch -dr [remote/branch]

# 合并指定分支到当前分支
git merge [branch]

# 选择一个commit,合并进当前分支
git cherry-pick [commit]

git rebase

撤销

复制代码
// 可以指定退回某一次提交的版本
// --mixed为默认, 重置暂存区的指定文件的某次add, 工作区保持原有修改
// --soft, 重置本地仓库的某次commit提交, 工作区和暂缓区保持原有修改
// --hard, 重置本地仓库、暂存区与工作区,与上一次commit保持一致, 放弃原有修改
// --keep, 重置当前HEAD为指定commit,但保持暂存区和工作区不变
git reset [--soft | --mixed | --hard | --keep] [HEAD]

// 新建一个commit,用来撤销指定commit
// 后者的所有变化都将被前者抵消,并且应用到当前分支
git revert [commit]

远程同步

复制代码
// 下载远程仓库的所有变动
git fetch [remote]

// 显示所有远程仓库
git remote -v
// 添加新的远程仓库
git remote add [shortname] [url]

// 取回远程仓库变化,与本地分支合并
// git pull = git fetch + git merge FETCH_HEAD 
// git pull --rebase =  git fetch + git rebase FETCH_HEAD 
git pull [remote] [branch]

// 上传本地指定分支到远程仓库
git push [remote] [branch]

// 强行推行当前分支到远程仓库,即使有冲突
git push [remote] --force

打包指定分支

复制代码
// 生成项目压缩包,遵守.gitignore
git archive -o ./dist.zip HEAD

缓存修改

复制代码
git stash         // 存储当前分支下的所有改动
git stash list    // 查看所有的存储列表
git stash pop     // 释放最近一次保存的内容,并且将该次保存的内容出栈
git stash apply stash@{0}   // 应用某一次的存储内容,但不删除改内容
git stash push .../.../     // 存储指定的文件修改
git stash show stash@{0}    // 查看某一个压栈修改了哪几个文件  -p 查看修改内容

二、应用

1. 撤销本地仓库修改

未使用 git add 缓存代码时

复制代码
// 放弃指定文件的修改
git checkout -- [readme.md]
// 放弃所有的文件修改
git checkout . 

​ 不要忘记中间的 "--" ,不写就成了检出分支了!!

​ 此命令用来放弃掉所有还没有加入到缓存区(就是 git add 命令)的修改:内容修改与整个文件删除。但是此命令不会删除掉刚新建的文件。因为刚新建的文件还没已有加入到 git 的管理系统中。所以对于git是未知的。自己手动删除就好了。

已经使用了 git add 缓存了代码

复制代码
// 放弃指定文件的缓存
git reset HEAD [readme.md]
// 放弃所以的缓存可以使用
git reset HEAD

​ 此命令用来清除 git 对于文件修改的缓存。相当于撤销 git add 命令所在的工作。在使用本命令后,本地的修改并不会消失,而是回到了如(一)所示的状态。继续用(一)中的操作,就可以放弃本地的修改。

已经用 git commit 提交了代码

复制代码
 // 回退到上一次commit的状态
 git reset --hard HEAD^
 // 回退到任意版本
 git reset --hard commitid
 // 可以查看请交历史记录 
 git log 

2. 想要撤回中间某次commit

revert

复制代码
// 新建一个commit,用来撤销指定commit
git revert commit_id

​ 然后如果有冲突,解决冲突,然后重新commit,push到远程分支,这时远程仓库会多了一个commit,而原来想要撤销的那条commit记录还在,但是最终代码,也就是最新的commit,已经把不要的代码移除了,此时达到了我们的目的。

复制代码
// 如果想撤销的不是一次commit,而是连着的几次,那么
git revert --no-commit commit1..commit2

cherry-pick

复制代码
// 回退到出错版本前一个commit
git reset --hard 1d7444
// 将某次commit的更改应用到当前版本(将出错 commit 之后别人提交的代码合并到当前正常代码分支上)
git cherry-pick 626335
// 强制提交
git push origin HEAD --force

3. git设定不合并的文件

场景:自己self分支的代码想要合并到master主分支,但是有一个read.me文件与主分支的read.me文件不一样,但是又不想合并到read.me文件。

1、设置git merge配置项,启用merge策略

复制代码
git config --global merge.ours.driver true

2、新建.gitattributes文件,配置要忽略merge的文件

根目录下创建.gitattributes文件,在文件中写入:read.me merge=ours

3、我们切到master分支,执行git merge,read.me文件不会合并

相关推荐
wearegogog1236 小时前
基于 MATLAB 的卡尔曼滤波器实现,用于消除噪声并估算信号
前端·算法·matlab
Drawing stars6 小时前
JAVA后端 前端 大模型应用 学习路线
java·前端·学习
品克缤6 小时前
Element UI MessageBox 增加第三个按钮(DOM Hack 方案)
前端·javascript·vue.js
小二·6 小时前
Python Web 开发进阶实战:性能压测与调优 —— Locust + Prometheus + Grafana 构建高并发可观测系统
前端·python·prometheus
小沐°6 小时前
vue-设置不同环境的打包和运行
前端·javascript·vue.js
qq_419854057 小时前
CSS动效
前端·javascript·css
烛阴7 小时前
3D字体TextGeometry
前端·webgl·three.js
王老邪7 小时前
Windows下利用PowerShell实现Git自动推送
windows·git
桜吹雪7 小时前
markstream-vue实战踩坑笔记
前端
极客先躯7 小时前
如何自动提取Git指定时间段的修改文件?Win/Linux双平台解决方案
linux·git·elasticsearch