更新 : 2019-03-02

写一个常用流程比较清楚 :

项目开始 :

git clone ...

git add file

git commit -m "whatever"

git push

git rebase -i --root

第一个改成 reword 其余的改成 fixup

然后输入总 message, 比如 live

git push origin HEAD --force

之后开始维护和加功能 :

git checkout -b feature

git add feature.txt

git commit -m "s"

git push --set-upstream origin feature  (第一次 push 要 set upstream)

现在假设我们想用 2 个 folder 来维护 2 个版本

git checkout master 回到 master

git clone -b feature url..

假设 master 有新东西, 我们去 master local folder 修改然后 push

在去开 feature local folder,

我不是很确定是不是一定要跑这 2 个

checkout master

git pull

然后是

git rebase -i master

git push origin HEAD --force

做好了以后去 master forlder

git checkout feature

git pull

git checkout master

git merge feature

git rebase -i xxx (从 feature 开始 rebase)

git push origin HEAD --force

结束.

维护 2 个 local folder 最重要的是要知道, 你在 feature 改东西, 回到 master forlder 是不知道的, 必须先 checkout 然后 pull 才可以做 merge 之类的.

分开 folder 不是必要的, 你可以简单通过 checkout 来维护 2 个版本. 我只是比较喜欢分开而已.

refer :

https://github.com/geeeeeeeeek/git-recipes
https://www.clock.co.uk/insight/deleting-a-git-commit
https://stackoverflow.com/questions/1338728/delete-commits-from-a-branch-in-git
https://segmentfault.com/a/1190000009658888
https://git-scm.com/download/gui/windows

1. git clone <url>

把项目克隆到本地

2. git clone <url> -b <BranchName>

克隆某个分支

3.git log

查看历史 commit, q 表示退出

4.git show, git status

查看当前的情况

5.git branch <BranchName>

创建新的 branch

6.git checkout <BranchName>

切换到某个 branch, 我们可以随时穿梭在多个 branch 之间开发. 本地文档会立即转换. checkout 前应该确保当前 branch 的修改都 commit 了.

7. git checkout -b <BranchName>

切换 branch 假如当前没有这个 branch 就创建一个.

8. git branch -d <BranchName>

删除 branch, -D 表示强制删除.

9.git reset

git reset --hard <hash>~2

git reset --soft head~3

git reset --mixed <hash>

reset 是用于删除历史计入的. 凡事重写 history 都要小心.

如果会影响到其它人请通知大家做好 commit, 然后你才重写, 重写后叫大家 re-clone. 这样就安全了. 当然如果整个 branch 就你一个人, 那你想怎样都行.

要解释 hard, soft, mixed , 我们先定义 working -> state -> commit, 这个是我们开发的流程.

--hard 表示回退到某次 commit, 把往后所有的 working, state, commit 都 clear 干干净净.

使用场景 : 发现做错了, 很想重头来过的时候.

--mixed 表示回退到某次 commit, 之后的 commit | state 都变成 working.

使用场景 : 比如我们修改了很多次代码, commit 了很多次. 后来我们发现,其实这么多次也就只是为了 fix 一个 bug.

那么我们可以使用 reset --mixed. 回到我们第一次的 commit, 然后往后的 commit 都变成了 working. 这时我们再 commit 一次就把之前那么多次的事儿一起 commit 了.

--soft 表示回退到某次 commit, 之后的所有 commit 都变成 state

使用场景 : 不清楚.

<hash>~<number> <hash> 就是某次 commit 的 hash, ~<number> 是表示前面第几个.

比如 :

git reset --hard xxxxx~2 意思是退回到 xxxx commit 前的 2 个 commit

git reset head~2 意思是退回到 head (通常就是最新那个) commit 前的 2 个 commit. 也就是删除前 2 次的 commit.

10. git checkout <hash>

回到那个情况 (只是为了查看, 不应该修改哦) git checkout <BranchName> (回到最新的)

11. git rebase

这个也是可以修改历史计入, 通常用于我们开发完成后,想要 merge to master 前,我们希望这个 branch 的历史计入美美, 这样 merge to master, master 才干净.

git rebase -i

修改全部历史 commit

这时 git 会开启编辑器, 我们会看到从开始到现在的所有 commit, 按照它的指示做, 我们可以合并 commit, 修改 commit message, 删除 commit 等等.

关闭编辑器代表完成, 建中我们可以通过 git rebase --abort 取消这次的 rebase.

git rebase -i head~<number> 
git rebase -i <hash>~<number>

我们不一定要 rebase 所有的 commit, 也是可以通过 <hash>~<number> 去定位. 只处理后一部分的 commit.

注 : git rebase 和 reset 都不应该发生代码冲突 (conflict) . 因为 reset 的目的是移除, rebase 的目的是整理.

12. git push origin HEAD --force

强制同步到云端. 通常是因为我们修改了历史计入才需要强制.

13. git merge <BranchName>

git checkout master -> git merge feature-branch 通常开发好新功能就是这样的命令. 意思是把 feature-branch 合并到 master 里面.

14. git rebase -i <BranchName>

这个 rebase 和刚才的不同. 这个是当上游的分支有新的 commit 时,我们下游的分支需要做的 rebase.

比如 : 有 master 和 feature

feature 已经开发了 2 个 commit 了. 这时 master 有 bug 做了一个 fix bug 的 commit.

那现在 feature 也需要 fix 掉这个 bug. 如果我们使用 merge master to feature 的话, 我们的 history 看上去就不太好看.

我们更希望时间可以倒退, 早点发现这个 bug, 在还没有开始 feature branch 之前 bug 就 fix 好了.

要把历史计入修改成这样,我们需要

git checkout feature -> git rebase -i master

如果有 error 就试试 git rebase -i origin/master

这时有开启编辑器, 我们可以直接关掉, 如果遇到代码冲突 (这个是很有可能会发生的), 我们可以通过 vs code 查看对比.

修改好文件后, 我们通过 git add <FileName> 把修改好的 file add 进去, 然后 git rebase --continue 继续执行.

git 会一个个检查, 直到所有的冲突都没有. 就算完成了.

这个 rebase 的过程中,我们有能力去修改 commit message 或者做合并, 但是我不建议大家这样做, 因为我们的目前是 merge master to feature,并不是要整理 feature 的 hsitory.

15. git revert <hash>

这个和 reset 有点像,区别在于它是通过新开一个 commit 去执行这个倒退.

这样的好处是没有修改到之前的历史计入.

也是一样可以使用 head~<number>

这个回滚通常会有代码冲突.

比如 commit 1 -> commit 2 -> coomit 3 -> revert to commit 1

这时就好像我硬生生的 commit 1 场景下的代码直接覆盖进来, 肯定是有冲突的嘛.

然后我们就修改解决冲突. 然后 git add <FileName> -> git commit

如果建中遇到麻烦, 也可以 git revert --abort 取消操作.

16. git branch

查看目前在哪一个 branch 中.

17. git rebase -i --root

git reset 无法去掉第 1 个 commit, 可以用这个替代.

注意 : 上面有好几个命令都用到 head <hash>~<number> 这样的定位法, 定位之后是否会使用当前的 commit 或者是前一个 commit, 大家自己去测试.

比如 git reset --hard xxx 那请问 xxx 这个 commit 是保留还是保留它的前一个 ? 我不常用, 没记着.

常用的 git 命令的更多相关文章

  1. 几个最常用的git命令

    之前在Windows下一直用可视化的tortoise git,在Linux下最好是用命令行,以下是常用的git命令: git status:显示当前已修改的文件,新增的文件 git checkout  ...

  2. 简单 常用的git命令

    常用的git命令 git pull  获取最新 git add . 提交所有 git commit  -m “我的注释” git status 查看状态 git push origin master ...

  3. 关于常用的git命令列表

    我博客园中所写的git内容几乎都是看的蒋鑫老师的<git权威指南>这本书实在太好了. 常用的Git命令. git add  添加到暂存区 git add interactive  交互式添 ...

  4. 常用的Git命令

    我的常用的Git命令 Git仓库配置常用 1. clone 克隆一份远程的Git版本库 git clone git://github.com/someone/some_project.git some ...

  5. 常用的Git命令整理

    之前一直忙于项目苦于没有时间总结,今天刚好有时间特来总结一下在工作中常用到的代码版本管理器Git.至于为什么要用Git?Git相比SVN有哪些好处?我就不多说了,前人已经总结的很好.今天主要介绍的是常 ...

  6. GitHub的SSH key配置以及常用的git命令介绍

    一. GitHub的SSH key配置 (以windows为例,Mac iOS系统类似) SSH Key 是一种方法来确定受信任的计算机,从而实现免密码登录.Git是分布式的代码管理工具,远程的代码管 ...

  7. 工作中常用的git命令

    一 常用Git命令 git clone:(区分SSH or HTTP) git init:初始化仓库 二 Git命令详解 Git Bash下,cd /c git clone,从远程Git版本库克隆一份 ...

  8. 记录常用的git命令

    之前的公司都是用svn的,现在的公司用git了,所以现在记录一下所用到的git命令,方便以后查看! git 常用命令 git add git add 命令可将该文件添加到缓存 git add . // ...

  9. Git学习系列之一些常用的Git命令收录更新ing

    不多说,直接上干货!  前言 对于Git工具,有必要整理和总结一些常用实用的命令. http://p.primeton.com/articles/53cce3a3e138236138000026 ht ...

  10. 我所常用的git命令

    说明公司向用git来管理项目的代码,我以前只是在eclipse中使用菜单来操作git,现在,学习一下命令,这样也不用安装各种git客户端软件了.git安装在官网上下载git,安装完成之后,在命令行中输 ...

随机推荐

  1. Linux - TCP编程相关配置1

    100万并发连接服务器笔记之1M并发连接目标达成 第四个遇到的问题:tcp_mem 在服务端,连接达到一定数量,诸如50W时,有些隐藏很深的问题,就不断的抛出来. 通过查看dmesg命令查看,发现大量 ...

  2. VMware Ubuntu 虚拟机安装 VMwareTools (VMware虚拟机如何与主机互相复制文件)

    1.关闭虚拟机 2.CD-ROM开机连接取消对号 3.开启虚拟机 4.此时可能提示安装,点击即可 或者在VMware上方选择 :虚拟机 → 安装VMware Tools 5.虚拟机桌面会弹出相应安装包 ...

  3. CentOS7的安装以及redis的下载安装和连接redis desktop manager出现的问题

    因为需要在springboot下使用redis,所以打算在linux下使用redis,并且使用redis desktop manage来连接管理,但是一路上出现个种问题现在总结一下. 如何安装Cent ...

  4. centos7 install rabbtimq

    yum install deltarpm erlang wget https://dl.bintray.com/rabbitmq/all/rabbitmq-server/3.7.8/rabbitmq- ...

  5. 【Python029--一个任务】

    一.文件编写 任务:将文件(record.txt)中的数据进行分割,并按照以下规律保存起来: --小甲鱼的对话单独保存为boy_*.txt的文件(去掉“小甲鱼:”) --小客服的对话单独保存为girl ...

  6. topcoder srm 460 div1

    problem1 link 设$f[i][j]$表示已经分配了answers中的前$i$个,分配给的问题的状态为 $j$的方案数. 其中状态可以用$n$位的三进制表示,0表示还未分配,1表示已分配是 ...

  7. ODAC(V9.5.15) 学习笔记(三)TOraSession(4)

    4. 数据库信息 名称 类型 说明 GetDatabaseNames 获取对应的数据库对象名称列表 GetSequenceNames GetStoredProcNames GetTableNames ...

  8. luogu1387 最大正方形

    P1387 最大正方形 正方形O(n) 题目描述 在一个n*m的只包含0和1的矩阵里找出一个不包含0的最大正方形,输出边长. 输入输出格式 输入格式: 输入文件第一行为两个整数n,m(1<=n, ...

  9. Docker 使用Docker-Compose编排容器

    简介: Docker Compose是一个用来定义和运行复杂应用的Docker工具.一个使用Docker容器的应用,通常由多个容器组成.使用Docker Compose不再需要使用shell脚本来启动 ...

  10. FJUT 聪明的商人(树上倍增)题解

    思路:求树上两点的距离,显然是dep[u] + dep[v] - 2 * dep[lca],用树上倍增去写. 参考:树上倍增的写法和应用(详细讲解,新手秒懂) 代码: #include<set& ...