Git 相关操作

图中的几个专用名词解释:

  1. Workspace: 工作区

  2. Index / Stage: 暂存区

  3. Repository: 本地仓库

  4. Remote: 远程仓库

 

Git相关操作:

查看版本信息:git --version 

配置相关:

1. 查看配置信息:

  • 查看当前git配置:git config --list;
  • 列出repository配置:git config --local --list;
  • 列出全局配置:git config --global --list;
  • 列出系统配置:git config --system --list;

 

  • git remote -v 查看远程地址
  • git remote add origin git@github.com:Liutos/foobar.git
  • git remote set-url origin xxx 更改远程地址


2. 配置用户信息

  • 配置用户名:git config --global user.name "your name";
  • 配置用户邮箱:git config --global user.email "youremail@github.com";
  • 查看用户信息: git config --global user.name


3. 其他配置

  • 配置解决冲突时使用哪种差异分析工具:git config --global merge.tool vimdiff;
  • 配置git命令输出为彩色的:git config --global color.ui auto;
  • 配置git使用的文本编辑器:git config --global core.editor vi;


操作命令相关:

1. 新建代码库:

  • 在当前目录新建一个Git代码库:git init
  • 新建一个目录,将其初始化为Git代码库:git init [project-name]

 


2. 提交

  • 提交到暂存区: git add .
  • 提交到版本库:git commit -m "commit some code"
  • 撤销上一次提交:git commit --amend;
  • 显示所有diff信息:git commit -v


3. 暂存

  • git stash list: 查看当前所有暂存;
  • git stash apply: 应用最新的暂存;
  • git stash apply stash@{2}:应用某个暂存;
  • git stash drop stash{0}:移除指定的暂存;
  • git stash -u : 有新文件时需要暂存,可执行此命令;
  • git stash: 暂存修改过的的文件;
  • git stash pop: 恢复之前缓存的文件


4. 查看状态

  • 查看当前工作区状态:git status;
  • 比较当前文件和暂存区之间的差异:git diff;


5. 分支管理

  • 列出所有本地分支: git branch
  • 列出所有远程分支: git branch -r
  • 列出所有本地分支和远程分支:git branch -a
  • 创建分支:git branch <branch-name>
  • 当前分支切换其他分支:git checkout <branch-name>
  • 新建并切换到新建分支上:git checkout -b <branch-name>
  • 选择一个commit,合并到当前分支:git cherry-pick commitId
  • 删除本地分支:git branch -d <branch-name>
  • 删除远程分支:git branch origin --delete <BranchName> 
  • 查看当前的本地分支与远程分支的关联关系:git branch -vv

 

  • 合并分支(本地分支dev合并到master):

假如在dev分支上开发完并push,现想把dev分支上的代码合并到master,需要切换到master并执行 git pull , 然后git merge dev 即可

  • 查看各个分支最后一次提交的信息:git branch -v
  • 把整个 feature 分支移动到 master 分支的后面,有效地把所有 master 分支上新的提交并入过来

    git checkout feature; git rebase master


6. 合并commitId

  • git reset commitId 

git log --oneline --graph 查看提交历史, 如:* 82489b7 (HEAD -> release/1.0.0, origin/release/1.0.0) update .gitignore* 7ac01e7 fix ci err* 93f7ec8 init dongdongviet project* bc0d48a (master) .gitignore* d3abfa5 init 如果要合并93f7,7ac0, 8248,则执行 git reset bc0d 然后执行 git add . 后执行 git commit git push命令即可

  • git reset HEAD^
  • git rebase i :wq保存

 

Git 问题集锦

情况一:最近一次 commit 的代码有问题怎么办? 

git add 我是修改内容.txt
git commit --amend


【amend】修正,会对最新一条 commit 进行修正,会把当前 commit 里的内容和暂存区(stageing area)里的内容合并起来后创建一个新的 commit,用这个新的 commit 把当前 commit 替换掉。
输入上面的命令后,Git 会进入提交信息编辑界面,然后你可以删除之前的 changeId,并且修改或者保留之前的提交信息,:wq 保存按下回车后,你的 commit 就被更新了。

情况二:刚刚写的提交信息有问题,想修改怎么办?

git commit --amend -m "新的提交信息"

情况三:刚刚提交完代码发现,我有个文件没保存,漏了提交上去怎么办?

// 最简单的方式,再次 commit:

git  commit -m "提交信息"


// 另一中方式,使用--no-edit,它表示提交信息不会更改,在 git 上仅为一次提交。

git add changgeFile // changeFile 刚刚漏了提交的文件
git commit --amend --no-edit

情况四:最新提交的代码没问题,它上一次提交的有问题怎么办?

git rebase -i

rebase -i 是 rebase --interactive 的缩写形式,意为「交互式 rebase」。
所谓「交互式 rebase」,就是在 rebase 的操作执行之前,你可以指定要 rebase 的
commit 链中的每一个 commit 是否需要进一步修改。


【注意】看 commit 历史的时候,最新的提交在最下面。

根据编辑界面中的提示,我们把要修改的倒数第二个 commit,也就是上面的
【修改代码格式首行缩进】前面 pick 指令改为 edit。edit的意思编辑器
中已给了解释,应用这个commit,但是停下来修正。
改完之后,esc退出,:wq 保存。

情况五:刚刚写完的提交太烂了,不想改了,想直接丢弃怎么办?

可以用 reset --hard 来撤销 commit

git reset --hard HEAD^


// HEAD 表示 HEAD^ 往回数一个位置的 commit ,HEAD^ 表示你要恢复到哪个 commit。
因为你要撤销最新的一个 commit,所以你需要恢复到它的父 commit ,也就是 HEAD^。
那么在这行之后,你的最新一条就被撤销了。

Git 代码已经 push 上去发现有问题

情况一:如果出错内容还在私有分支

这种情况你修改后,再次提交会报错,由于你在本地对已有的 commit 做了修改,这时你再 push 就会失败,因为中央仓库包含本地没有的 commits。这种情况只在你自己的分支 branch1 ,可以使用强制 push 的方式解决冲突。

git push origin branch1 -f


// -f 是 --force 的缩写,意为「忽略冲突,强制 push」

情况二:如果出错内容已经 push 到了 master 分支

这种情况可以使用 Git 的 revert 指令。

git revert HEAD^


// 上面这行代码就会增加一条新的 commit,它的内容和倒数第二个 commit 是相反的,
从而和倒数第二个 commit 相互抵消,达到撤销的效果。

在 revert 完成之后,把新的 commit 再 push 上去,这个 commit 的内容就被撤销了。
revert 与前面说的 reset 最主要的区别是,这次改动只是被「反转」了,
并没有在历史中消失掉,你的历史中会存在两条 commit :
一个原始 commit ,一个对它的反转 commit。

Git 关于暂存的问题

假如正在开发手中需求的时候,突然来了个紧急 bug 要修复,这时候需要先 stash 已经写的部分代码,使自己返回到上一个 commit 改完 bug 之后从缓存栈中推出之前的代码,继续工作。

  • 添加缓存栈: git stash

  • 查看缓存栈: git stash list

  • 推出缓存栈: git stash pop

  • 取出特定缓存内容:git stash apply stash@{1}
     

    注意:没有被 track 的文件(即从来没有被 add 过的文件不会被 stash 起来,
    因为 Git 会忽略它们。如果想把这些文件也一起 stash,可以加上 -u 参数,
    它是 --include-untracked 的简写。就像这样:git stash -u

     

Git 分支相关问题

问题1:我想把本地创建的一个分支 koalanode提交到远程,并且远程分支名称要求 nodescript,且还未创建,需要怎能做?

  • 我先在远程建了一个分支 nodescript,我本地也有这么一个分支,名字和远程的分支名称还不一样。首先,我把我本地的分支名称修改成和远程分支相同。

  • 将本地新建分支 push 到自己的本地远程 origin 上,因为只在本地创建了一个新的分支,远程origin 上还没有该分支

  • 把本地分支与远程 origin 的分支进行关联处理(通过 --set-upstream-to 命令)

  • 再次通过 git branch -vv 查看分支的关联关系,可见本地分支已于 origin 的分支建立上了关联关系,之后我们每次 push 或者 pull 的时候,只需要输入git push 或者git pull


 

git 用户名密码邮箱相关问题

公司仓库有账号密码,自己的github有账户密码,两个不同账户,有一次提交发现自己仓库的邮箱提交成了公司仓库设置的邮箱,有点尴尬,为什么会出现这种问题呢?

首先这个你在刚开始安装一趟的时候应该就用过:

// 设置查看 git 用户名和邮箱
git config user.name   --查看git当前配置用户名
git config user.email  --查看git当前配置的邮箱
git config user.name 名称 设置用户名
git config user.email 邮箱 设置git邮箱

全局命令设置

 git config  --global user.name 你的目标用户名;

 git config  --global user.email 你的目标邮箱名;

在项目中也可以查看这些信息

vi ~/.gitconfig;

知道了这些配置修改之后,你可以选择全局配置下,在公司电脑,或者提交前自己看下,就不会再出现上面的尴尬问题了。

 

git 提交规范

  • feat:新功能(feature)

  • fix:修补bug

  • docs:文档(documentation)

  • style:格式(不影响代码运行的变动)

  • refactor:重构(即不是新增功能,也不是修改bug的代码变动)

  • test:增加测试

  • chore:其他修改,比如构建过程或辅助工具的变动


 

Git 工具

推荐: SourceThree

SourceThree 下载地址:https://www.sourcetreeapp.com/

vim 常用命令

  • 使用 Git 的时候,偶尔会对 Vim 中对 shell 脚本进行简单操作,为了节约时间,列出几个常用的 vim 快捷命令。

  • a,i,r,o,A,I,R,O 进入编辑模式

  • :q 一般退出

  • :q! 退出不保存

  • :wq 保存退出

  • yy 复制当前行的内容

  • ZZ 保存离开

  • dd 删除光标当前行

 

总结
遇到问题多问度娘,重要的是多练习!!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
完整版:https://download.csdn.net/download/qq_27595745/89522468 【课程大纲】 1-1 什么是java 1-2 认识java语言 1-3 java平台的体系结构 1-4 java SE环境安装和配置 2-1 java程序简介 2-2 计算机中的程序 2-3 java程序 2-4 java类库组织结构和文档 2-5 java虚拟机简介 2-6 java的垃圾回收器 2-7 java上机练习 3-1 java语言基础入门 3-2 数据的分类 3-3 标识符、关键字和常量 3-4 运算符 3-5 表达式 3-6 顺序结构和选择结构 3-7 循环语句 3-8 跳转语句 3-9 MyEclipse工具介绍 3-10 java基础知识章节练习 4-1 一维数组 4-2 数组应用 4-3 多维数组 4-4 排序算法 4-5 增强for循环 4-6 数组和排序算法章节练习 5-0 抽象和封装 5-1 面向过程的设计思想 5-2 面向对象的设计思想 5-3 抽象 5-4 封装 5-5 属性 5-6 方法的定义 5-7 this关键字 5-8 javaBean 5-9 包 package 5-10 抽象和封装章节练习 6-0 继承和多态 6-1 继承 6-2 object类 6-3 多态 6-4 访问修饰符 6-5 static修饰符 6-6 final修饰符 6-7 abstract修饰符 6-8 接口 6-9 继承和多态 章节练习 7-1 面向对象的分析与设计简介 7-2 对象模型建立 7-3 类之间的关系 7-4 软件的可维护与复用设计原则 7-5 面向对象的设计与分析 章节练习 8-1 内部类与包装器 8-2 对象包装器 8-3 装箱和拆箱 8-4 练习题 9-1 常用类介绍 9-2 StringBuffer和String Builder类 9-3 Rintime类的使用 9-4 日期类简介 9-5 java程序国际化的实现 9-6 Random类和Math类 9-7 枚举 9-8 练习题 10-1 java异常处理 10-2 认识异常 10-3 使用try和catch捕获异常 10-4 使用throw和throws引发异常 10-5 finally关键字 10-6 getMessage和printStackTrace方法 10-7 异常分类 10-8 自定义异常类 10-9 练习题 11-1 Java集合框架和泛型机制 11-2 Collection接口 11-3 Set接口实现类 11-4 List接口实现类 11-5 Map接口 11-6 Collections类 11-7 泛型概述 11-8 练习题 12-1 多线程 12-2 线程的生命周期 12-3 线程的调度和优先级 12-4 线程的同步 12-5 集合类的同步问题 12-6 用Timer类调度任务 12-7 练习题 13-1 Java IO 13-2 Java IO原理 13-3 流类的结构 13-4 文件流 13-5 缓冲流 13-6 转换流 13-7 数据流 13-8 打印流 13-9 对象流 13-10 随机存取文件流 13-11 zip文件流 13-12 练习题 14-1 图形用户界面设计 14-2 事件处理机制 14-3 AWT常用组件 14-4 swing简介 14-5 可视化开发swing组件 14-6 声音的播放和处理 14-7 2D图形的绘制 14-8 练习题 15-1 反射 15-2 使用Java反射机制 15-3 反射与动态代理 15-4 练习题 16-1 Java标注 16-2 JDK内置的基本标注类型 16-3 自定义标注类型 16-4 对标注进行标注 16-5 利用反射获取标注信息 16-6 练习题 17-1 顶目实战1-单机版五子棋游戏 17-2 总体设计 17-3 代码实现 17-4 程序的运行与发布 17-5 手动生成可执行JAR文件 17-6 练习题 18-1 Java数据库编程 18-2 JDBC类和接口 18-3 JDBC操作SQL 18-4 JDBC基本示例 18-5 JDBC应用示例 18-6 练习题 19-1 。。。
完整版:https://download.csdn.net/download/qq_27595745/89522468 【课程大纲】 1-1 什么是java 1-2 认识java语言 1-3 java平台的体系结构 1-4 java SE环境安装和配置 2-1 java程序简介 2-2 计算机中的程序 2-3 java程序 2-4 java类库组织结构和文档 2-5 java虚拟机简介 2-6 java的垃圾回收器 2-7 java上机练习 3-1 java语言基础入门 3-2 数据的分类 3-3 标识符、关键字和常量 3-4 运算符 3-5 表达式 3-6 顺序结构和选择结构 3-7 循环语句 3-8 跳转语句 3-9 MyEclipse工具介绍 3-10 java基础知识章节练习 4-1 一维数组 4-2 数组应用 4-3 多维数组 4-4 排序算法 4-5 增强for循环 4-6 数组和排序算法章节练习 5-0 抽象和封装 5-1 面向过程的设计思想 5-2 面向对象的设计思想 5-3 抽象 5-4 封装 5-5 属性 5-6 方法的定义 5-7 this关键字 5-8 javaBean 5-9 包 package 5-10 抽象和封装章节练习 6-0 继承和多态 6-1 继承 6-2 object类 6-3 多态 6-4 访问修饰符 6-5 static修饰符 6-6 final修饰符 6-7 abstract修饰符 6-8 接口 6-9 继承和多态 章节练习 7-1 面向对象的分析与设计简介 7-2 对象模型建立 7-3 类之间的关系 7-4 软件的可维护与复用设计原则 7-5 面向对象的设计与分析 章节练习 8-1 内部类与包装器 8-2 对象包装器 8-3 装箱和拆箱 8-4 练习题 9-1 常用类介绍 9-2 StringBuffer和String Builder类 9-3 Rintime类的使用 9-4 日期类简介 9-5 java程序国际化的实现 9-6 Random类和Math类 9-7 枚举 9-8 练习题 10-1 java异常处理 10-2 认识异常 10-3 使用try和catch捕获异常 10-4 使用throw和throws引发异常 10-5 finally关键字 10-6 getMessage和printStackTrace方法 10-7 异常分类 10-8 自定义异常类 10-9 练习题 11-1 Java集合框架和泛型机制 11-2 Collection接口 11-3 Set接口实现类 11-4 List接口实现类 11-5 Map接口 11-6 Collections类 11-7 泛型概述 11-8 练习题 12-1 多线程 12-2 线程的生命周期 12-3 线程的调度和优先级 12-4 线程的同步 12-5 集合类的同步问题 12-6 用Timer类调度任务 12-7 练习题 13-1 Java IO 13-2 Java IO原理 13-3 流类的结构 13-4 文件流 13-5 缓冲流 13-6 转换流 13-7 数据流 13-8 打印流 13-9 对象流 13-10 随机存取文件流 13-11 zip文件流 13-12 练习题 14-1 图形用户界面设计 14-2 事件处理机制 14-3 AWT常用组件 14-4 swing简介 14-5 可视化开发swing组件 14-6 声音的播放和处理 14-7 2D图形的绘制 14-8 练习题 15-1 反射 15-2 使用Java反射机制 15-3 反射与动态代理 15-4 练习题 16-1 Java标注 16-2 JDK内置的基本标注类型 16-3 自定义标注类型 16-4 对标注进行标注 16-5 利用反射获取标注信息 16-6 练习题 17-1 顶目实战1-单机版五子棋游戏 17-2 总体设计 17-3 代码实现 17-4 程序的运行与发布 17-5 手动生成可执行JAR文件 17-6 练习题 18-1 Java数据库编程 18-2 JDBC类和接口 18-3 JDBC操作SQL 18-4 JDBC基本示例 18-5 JDBC应用示例 18-6 练习题 19-1 。。。
Git中,git reset命令用于将当前分支的HEAD指针移动到指定的提交,并且可以选择是否将更改的文件还原到暂存区或工作区。根据不同的情况,可以使用不同的git reset命令来实现不同的操作。 如果在使用git add提交之前,想要撤销对文件的修改,可以使用以下命令: - git checkout .:将暂存区的文件覆盖工作区的文件,相当于撤销对文件的修改。\[2\] 如果已经使用git add将文件提交到暂存区,但还未进行commit操作,想要撤销暂存区的修改,可以使用以下命令: - git reset:将HEAD指针覆盖当前的暂存区内容,相当于将暂存区的修改撤销。\[1\] 需要注意的是,执行reset命令后,之前的commit仍然存在,只是不可见。如果想要恢复被reset掉的commit,可以使用以下命令: - git reflog:查看操作记录的id。 - git reset <commit_id>:使用reset命令回到指定的commit_id,从而恢复被reset掉的commit。\[3\] 总结起来,git reset命令可以用于撤销对文件的修改或撤销暂存区的修改,而使用git reflog和git reset命令可以恢复被reset掉的commit。 #### 引用[.reference_title] - *1* *2* [【git撤销操作git reset详解](https://blog.csdn.net/qq_38987146/article/details/125149888)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [Git 笔记 - git reset](https://blog.csdn.net/Yuki_yuhan/article/details/122931045)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值