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文件不会合并

相关推荐

  1. git指令应用案例

    2024-01-09 10:44:06       40 阅读
  2. gitGit回退版本命令多种场景应用指南

    2024-01-09 10:44:06       12 阅读
  3. git指令

    2024-01-09 10:44:06       30 阅读
  4. git指令

    2024-01-09 10:44:06       33 阅读
  5. Git指令

    2024-01-09 10:44:06       46 阅读
  6. git指令

    2024-01-09 10:44:06       15 阅读
  7. Git指令

    2024-01-09 10:44:06       10 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-01-09 10:44:06       14 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-01-09 10:44:06       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-01-09 10:44:06       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-01-09 10:44:06       18 阅读

热门阅读

  1. 程序员必备的面试技巧

    2024-01-09 10:44:06       32 阅读
  2. Django创建RSS订阅

    2024-01-09 10:44:06       33 阅读
  3. 网络协议到底是什么?

    2024-01-09 10:44:06       34 阅读
  4. js中window的OPen方法,弹窗的特征

    2024-01-09 10:44:06       33 阅读
  5. 每日算法打卡:激光炸弹 day 8

    2024-01-09 10:44:06       31 阅读
  6. 【python】神经网络

    2024-01-09 10:44:06       34 阅读
  7. matlab subs 函数计算太慢

    2024-01-09 10:44:06       38 阅读
  8. Serverless架构的理论基础和发展历程

    2024-01-09 10:44:06       34 阅读
  9. 【flink番外篇】14、Flink异步I/O访问外部数据示例

    2024-01-09 10:44:06       39 阅读