虽然现在有很多图形化的 Git 工具,但是命令行依然 yyds。本文记录了工作中很有用的一些 Git 操作。

1.Fork出来的Git仓库同步代码

背景:有的时候从原仓库fork出了一个新仓库,这个新仓库做了自己的修改。可是原仓库也进行了更新,比如修复了bug,增加了新特性之类的。这个时候想要把原仓库代码同步过来。

原理:把原仓库的代码拉到本地,然后通过git merge把原仓库分支代码合到自己的分支代码。

  1. 先拉取原仓库代码到本地
git remote add upstream (填写你仓库git地址)

git fetch upstream

这样就把原仓库代码拉到本地了,而且 upstream 跟原仓库进行了绑定。(类似origin的绑定,upstream 也可以命名为其它的名称)

此时执行git remote,会看到有两个:

origin
remote
  1. 合并分支

切换到fork仓库的分支,可以新建一个合并分支。然后执行命令:

# 分支名不一定得是master,也可以是其它的原仓库分支。
git merge upstream/master

如果有冲突就要解决冲突,解决完执行下命令即可:

git merge --continue

最后,如果完成了,可以执行命令移除这个绑定。

git remote remove upstream

2.合并多个提交

完成一小部分功能进行提交是一个良好的习惯,有利于我们随时回溯代码。然而整体功能没完成是不能提交到主干的,而且也倾向于整体功能完成合并为一个提交。因此本地的多个小提交合并成一个提交就很有必要了。下面举个栗子演示合并操作。

执行git log,查看历史提交:

commit 03c72b6dfc24c6bf6f60e2c922552249cc3e5376

git test 3

commit 24276fbd0495c4b337f4058726a48e68118eac0a

git test 2

commit 9f92d8624a3adf7cd6fb69268f99d864390838c4

git test 1

假设要将前两笔提交合并,则记录下第三笔的commitId:9f92d8624a3adf7cd6fb69268f99d864390838c4。(第三笔提交不参与合并)

执行以下命令:

git rebase -i 9f92d8624a3adf7cd6fb69268f99d864390838c4

执行后会弹出以下:

pick 24276fbd git test 2

pick 03c72b6d git test 3

# 省略以下内容

此时要将除第一个外的pick改为squash或者s。即改完后为:

pick 24276fbd git test 2

s 03c72b6d git test 3

# 省略以下内容

改完保存退出,会弹出commit message修改界面,修改保存即可。

再执行git log发现提交已经合并了。

commit 980d318f91f2faa1d748ae5a963b692162dd521c

git test merge

commit 9f92d8624a3adf7cd6fb69268f99d864390838c4

git test 1

3.代码回退

1、在工作区的代码

# 丢弃某个文件
git checkout -- 文件名 # 丢弃全部
git checkout -- .

2、git add到了索引区

# 回退索引区所有文件
git reset HEAD . # 回退索引区指定文件夹
git reset HEAD 文件夹名

3、commit 到本地分支的代码

# 回退最新一笔提交
git reset --hard HEAD^ # 回退到指定的版本
git reset --hard 版本号

这里说下reset时,指定--hard、--soft、--mixed的区别:

  • hard: 回退时HEAD指针被回退,索引区、工作目录都被重置了。

  • soft: 只改变了历史提交(HEAD指针),索引区和工作目录没有更改。

  • mixed: 不指定时默认为mixed,改变了历史提交(HEAD指针),重置了索引区。

4.使用worktree

当你的项目很大,而有多个特性需要开发时,为了避免频繁切换分支,可以使用git worktree

git worktree非常适合大型项目又需要维护多个分支,想要避免来回切换的场景。其有以下几个优点:

  • 单独 clone 项目相比,节省了硬盘空间,又因为 git worktree 使用 hard link 实现,要远远快于 clone

  • 提交可以在同一个项目中共享

  • 可以快速进行并行开发,同一个项目多个分支同时并行演进

git worktree使用非常简单,掌握3个命令即可:

# 添加一个 worktree。
git worktree add filePath
# 移除一个 worktree
git worktree remove filePath
# 查看目前所有的 worktree
git worktree list

创建了worktree后,只需要用IDE打开添加到filePath的项目即可。

5.其它

#本地分支与远程进行关联
git branch --set-upstream-to=origin/(要关联的分支名) #推送本地新建分支到远端分支(远端会自动创建分支)
git push origin newbranch:originbranch #删除远端分支
git push origin --delete (branch_name) #查看本地分支关联的远程分支
git branch -vv #分支重命名
git branch -m oldName newName #修改当前项目的用户名和邮箱
git config --local user.name “userName"
git config --local user.email email@example.com #删除本地版本库上那些失效的远程追踪分支:
git remote prune origin --dry-run

Git 便捷操作的更多相关文章

  1. Git.Framework 框架随手记--ORM项目工程

    前面已经简单介绍过了该框架(不一定是框架),本文开始重点记录其使用过程.可能记录的内容不是太详尽,框架也可能非常烂,但是里面的代码句句是实战项目所得.本文非教唆之类的文章,也非批判之类的文章,更不是炫 ...

  2. Git与Github的使用学习

    摘要 本文讲解下Git的使用,包括使用Git上传项目工程到Github,文末有彩蛋哦. 1.安装Git 使用apt-get安 sudo apt-get update sudo apt-get inst ...

  3. debian安装git管理本地代码

    debian安装git管理本地代码 安装git # aptitude install git-core # aptitude install git-doc git-svn git-email git ...

  4. Git 子模块 - submodule

    有种情况我们经常会遇到:某个工作中的项目需要包含并使用另一个项目. 也许是第三方库,或者你 独立开发的,用于多个父项目的库. 现在问题来了:你想要把它们当做两个独立的项目,同时又想在 一个项目中使用另 ...

  5. Git 在团队中的最佳实践--如何正确使用Git Flow

    我们已经从SVN 切换到Git很多年了,现在几乎所有的项目都在使用Github管理, 本篇文章讲一下为什么使用Git, 以及如何在团队中正确使用. Git的优点 Git的优点很多,但是这里只列出我认为 ...

  6. Git与Repo入门

    版本控制 版本控制是什么已不用在说了,就是记录我们对文件.目录或工程等的修改历史,方便查看更改历史,备份以便恢复以前的版本,多人协作... 一.原始版本控制 最原始的版本控制是纯手工的版本控制:修改文 ...

  7. Git Bash的一些命令和配置

    查看git版本号: git --version 如果是第一次使用Git,你需要设置署名和邮箱: $ git config --global user.name "用户名" $ gi ...

  8. 在Ubuntu 16.10 安装 git 并上传代码至 git.oschina.net

    1. 注册一个账号和创建项目 先在git.oschina.net上注册一个账号和新建一个project ,如project name 是"myTest". 2.安装git sudo ...

  9. 史上最详细git教程

    题外话 虽然这个标题很惊悚,不过还是把你骗进来了,哈哈-各位看官不要着急,耐心往下看 Git是什么 Git是目前世界上最先进的分布式版本控制系统. SVN与Git的最主要的区别 SVN是集中式版本控制 ...

随机推荐

  1. Spring基础入门

    一.Spring了解 Spring:程序员们的春天 Spring主要技术是IOC.AOP两个大概念 它是轻量级的,每个jar包就1M ~ 3M 左右,所以速度快 面向接口编程:降低了耦合度 面向切面编 ...

  2. [Linux] 如何在 Linux 电脑上制作专业的视频教程

    目录 前言 1.软件工具准备 a. 录音软件 b. 录屏软件 c. 摄像头软件 d. 安卓屏幕操作软件 e. 视频剪辑软件 2.视频教程制作 3.效果 参考链接 前言 博主使用 Arch Linux ...

  3. WPF 截图控件之绘制箭头(五)「仿微信」

    前言 接着上周写的截图控件继续更新 绘制箭头. 1.WPF实现截屏「仿微信」 2.WPF 实现截屏控件之移动(二)「仿微信」 3.WPF 截图控件之伸缩(三) 「仿微信」 4.WPF 截图控件之绘制方 ...

  4. linux常见命令(十)

    cut/grep/sort/uniq/wc 连续执行多个命令--;进入/data新建data01目录,在data01目录新建test.txtcd /data;mkdir data01;cd data0 ...

  5. 发布Android库至MavenCentral详解

    Sonatype 账号 MavenCentral 和 Sonatype 的关系 库平台 运营商 管理后台 MavenCentral Sonatype oss.sonatype.org 因此我们要发布L ...

  6. 用JavaScript写输入框的校验

    //Script function cheack(){ var kong = ''//获取值不能放外面,不然一直为空 kong = document.getElementById('name').va ...

  7. 8. 利用Ansible快速构建MGR | 深入浅出MGR

    GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源. 目录 1. 安装ansbile 2. 配置ansible 3. 建立ssh信任 4. 测试ansible 5. 使用ans ...

  8. 深入理解Aarch64内存管理

    本文是对learn_the_architecture_-_aarch64_memory_management的部分翻译和个人注解.个人英文水平有限,若有翻译不当,欢迎加我私人微信LinuxDriver ...

  9. Javaweb06-JDBC

    1.jdbc.properties配置文件 jdbc.properties driverClass=com.mysql.jdbc.Driver jdbcUrl=jdbc:mysql://localho ...

  10. React报错之Encountered two children with the same key

    正文从这开始~ 总览 当我们从map()方法返回的两个或两个以上的元素具有相同的key属性时,会产生"Encountered two children with the same key&q ...