Git 便捷操作
虽然现在有很多图形化的 Git 工具,但是命令行依然 yyds。本文记录了工作中很有用的一些 Git 操作。
1.Fork出来的Git仓库同步代码
背景:有的时候从原仓库fork出了一个新仓库,这个新仓库做了自己的修改。可是原仓库也进行了更新,比如修复了bug,增加了新特性之类的。这个时候想要把原仓库代码同步过来。
原理:把原仓库的代码拉到本地,然后通过git merge把原仓库分支代码合到自己的分支代码。
- 先拉取原仓库代码到本地
git remote add upstream (填写你仓库git地址)
git fetch upstream
这样就把原仓库代码拉到本地了,而且 upstream 跟原仓库进行了绑定。(类似origin的绑定,upstream 也可以命名为其它的名称)
此时执行git remote,会看到有两个:
origin
remote
- 合并分支
切换到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 便捷操作的更多相关文章
- Git.Framework 框架随手记--ORM项目工程
前面已经简单介绍过了该框架(不一定是框架),本文开始重点记录其使用过程.可能记录的内容不是太详尽,框架也可能非常烂,但是里面的代码句句是实战项目所得.本文非教唆之类的文章,也非批判之类的文章,更不是炫 ...
- Git与Github的使用学习
摘要 本文讲解下Git的使用,包括使用Git上传项目工程到Github,文末有彩蛋哦. 1.安装Git 使用apt-get安 sudo apt-get update sudo apt-get inst ...
- debian安装git管理本地代码
debian安装git管理本地代码 安装git # aptitude install git-core # aptitude install git-doc git-svn git-email git ...
- Git 子模块 - submodule
有种情况我们经常会遇到:某个工作中的项目需要包含并使用另一个项目. 也许是第三方库,或者你 独立开发的,用于多个父项目的库. 现在问题来了:你想要把它们当做两个独立的项目,同时又想在 一个项目中使用另 ...
- Git 在团队中的最佳实践--如何正确使用Git Flow
我们已经从SVN 切换到Git很多年了,现在几乎所有的项目都在使用Github管理, 本篇文章讲一下为什么使用Git, 以及如何在团队中正确使用. Git的优点 Git的优点很多,但是这里只列出我认为 ...
- Git与Repo入门
版本控制 版本控制是什么已不用在说了,就是记录我们对文件.目录或工程等的修改历史,方便查看更改历史,备份以便恢复以前的版本,多人协作... 一.原始版本控制 最原始的版本控制是纯手工的版本控制:修改文 ...
- Git Bash的一些命令和配置
查看git版本号: git --version 如果是第一次使用Git,你需要设置署名和邮箱: $ git config --global user.name "用户名" $ gi ...
- 在Ubuntu 16.10 安装 git 并上传代码至 git.oschina.net
1. 注册一个账号和创建项目 先在git.oschina.net上注册一个账号和新建一个project ,如project name 是"myTest". 2.安装git sudo ...
- 史上最详细git教程
题外话 虽然这个标题很惊悚,不过还是把你骗进来了,哈哈-各位看官不要着急,耐心往下看 Git是什么 Git是目前世界上最先进的分布式版本控制系统. SVN与Git的最主要的区别 SVN是集中式版本控制 ...
随机推荐
- 免费SSL证书申请及部署实践
网络上关于如何签发免费SSL证书的博文一大片,但是真正操作起来的能让新手不迷惑的却很少,很多操作步骤受限于国内无法访问外网的阻碍,导致无法真正实施成功. 实际上,关于申请免费SSL证书主要涉及两大部分 ...
- 博客从 CloudBase 迁移至云主机
迁移起因 原来的博客 其实从很久以前就想要写博客,但总是断断续续的,一直都没有认真地开始. 最终,决定使用静态博客工具作为自己博客的承载体.在多种工具的比较下,最终选择了 Hugo 并部署到 Gith ...
- Hive优化(面试宝典)(详细的九个优化)
Hive优化(面试宝典) 1.1 hive的随机抓取策略 理论上来说,Hive中的所有sql都需要进行mapreduce,但是hive的抓取策略帮我们 省略掉了这个过程,把切片split的过程提前帮我 ...
- 建立二叉树的二叉链表存储结构(严6.70)--------西工大noj
#include <stdio.h> #include <stdlib.h> #include <string.h> typedef struct TreeNode ...
- CF1700C Helping the Nature
题目大意: 给出一个长度为 n 的序列 a,每次可以进行三种操作中的一种: 选择i,将 a_1,a_2,...,a_i减1. 选择i,将 a_i,a_i+1,...,a_n减1. 将所有 a_i加1. ...
- python主动杀死线程
简介 在一些项目中,为了防止影响主进程都会在执行一些耗时动作时采取多线程的方式,但是在开启线程后往往我们会需要快速的停止某个线程的动作,因此就需要进行强杀线程,下面将介绍两种杀死线程的方式. 直接强杀 ...
- Linux—系统基础一
Linux系统基础(一) Linux的基本原则: 由目的单一的小程序组成,组合小程序完成复杂任务: 一切皆文件: 配置文件保存为纯文本格式. 1.shell 1.1 shell简介 Shell俗称壳( ...
- Odoo14 OWL 如何访问model方法和res_id
首先OWL是Odoo14版本新加的功能. 因为是新加的所以并没有太多的说明文档,包括英文板文档也没有:所以你要用它再没有更详细的文档之前你得自己去看源码. 注意owl是没有do_action函数给你跳 ...
- 无法访问mybatis.dto.StudengInVO-使用maven编译报错-2022新项目
一.问题由来 最近一次拉代码后,合并代码然后进行编译时出现一个问题,使用maven在进行编译的时候报一个错,无法访问mybatis.dto.StudengInVO. 突然出现这个错误让自己感觉很奇怪, ...
- 妙用 CSS 构建花式透视背景效果
本文将介绍一种巧用 background 配合 backdrop- filter 来构建有趣的透视背景效果的方式. 本技巧源自于一名群友的提问,如何构建如 ElementUI 文档的一种顶栏背景特效, ...