Git 命令收集
记录一些比较特别的命令:
1.清理恢复
git clean -xdf
清理所有未untracked的文件和文件夹
git reset --hard
恢复所有已tracked的文件和文件夹
将这两个合并起来就是恢复到旧的干净的版本。
删除所有未untracked的文件和文件夹,但是不删除在.gitignore中的文件或文件夹
git clean -df
删除之前不知道删除什么文件,可以加-n,比如:
git clean -ndf
2.回滚,reset与revert的区别
git reset --hard 4971ebc
git reset回滚到某个版本,只是移动指针,可以向前,也可以向后。
git revert就不一样,它是创建一个新的commit,来覆盖旧的commit,指针只往后移动
λ git revert head
[master 67d4613] Revert "delete abc.txt"
2 files changed, 8 insertions(+)
create mode 100644 ABc.txt
create mode 100644 abc.txt
回滚到指定版本:
λ git revert 5ccc4db
[master 9149046] Revert "删除大小写的诡异"
4 files changed, 32 insertions(+)
create mode 100644 File1.txt
create mode 100644 Readme.txt
查看两次revert的日志记录:
* 9149046 - (HEAD -> master) Revert "删除大小写的诡异" (41 seconds ago) | hongdada
* 67d4613 - Revert "delete abc.txt" (7 minutes ago) | hongdada
* 906417c - (origin/master) delete abc.txt (14 minutes ago) | hongdada
* 5ccc4db - 删除大小写的诡异 (14 minutes ago) | hongdada
所以一般在工作中,如果线上代码发生冲突,要用git revert来回滚,并签入到远程服务器,
因为用git reset,在签入远程服务器时会发现全是冲突,因为远程服务器里面最近的commitid在本地不存在。
如果实在有把握,可以git reset回到某个版本,并强制推送远程服务器
git push -f
3.merge,rebase,cherry-pick区别
git merge --squash dev
git cm "..."
merge --squash 是合并dev分支中的commit,再添加描述提交
git rebase dev
git rebase --continue
git rebase --abort
git rebae --skip
在rebase的过程中,也许会出现冲突(conflict). 在这种情况,Git会停止rebase并会让你去解决冲突;
在解决完冲突后,用"git-add"命令去更新这些内容的索引(index), 然后,你无需执行 git-commit,只要执行 git rebase --continue来继续
或者根本不解决冲突,调用git rebase --skip 将引起冲突的commits丢弃掉
这样git会继续应用(apply)余下的补丁。在任何时候,你可以用git rebase --abort参数来终止rebase的行动。
git cherry-pick commitid
cherry-pick可以对整个项目中的某个commitid进行合并,不仅可以用在不同分支之间, 还可以用在同一个分支上,不同分支的用法如上所述. 同一分支用法也是一样的, 同一分支使用情形:
比如说你在某一个向某个分支中添加了一个功能, 后来处于某种原因把它给删除了_,_然而后来某一天你又要添加上这个功能了, 这时候就可以使用cherry-pick把添加那个功能的commit
4.删除不存在对应远程分支的本地分支
D:\Development\lpapi.rongzi.comn (master)
λ git b -a
developer
hongqi * master
remotes/origin/HEAD -> origin/master
remotes/origin/developer
remotes/origin/hongqi
remotes/origin/master
remotes/origin/newdev
D:\Development\lpapi.rongzi.comn (master)
λ git remote prune origin newdev
Pruning origin
URL: http://10.40.3.31/rzr.net/lpapi.rongzi.com.git
* [pruned] origin/newdev
fatal: 'newdev' does not appear to be a git repository
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.
远程已不存在分支newdev,但是本地还是存在,所以删除本地对应的远程分支
具体的操作:
D:\Development\Rongzi.RZR.M (master)
λ git b -a
bugfix
hongqi
* master
remotes/origin/Develper
remotes/origin/HEAD -> origin/master
remotes/origin/bugfix
remotes/origin/develop
remotes/origin/developer
remotes/origin/feature
remotes/origin/hongqi
remotes/origin/master
D:\Development\Rongzi.RZR.M (master)
λ git remote show origin
* remote origin
Fetch URL: http://10.40.3.31/rzr.net/Rongzi.RZR.M.git
Push URL: http://10.40.3.31/rzr.net/Rongzi.RZR.M.git
HEAD branch: master
Remote branches:
Develper tracked
developer tracked
feature tracked
master tracked
refs/remotes/origin/bugfix stale (use 'git remote prune' to remove)
refs/remotes/origin/develop stale (use 'git remote prune' to remove)
refs/remotes/origin/hongqi stale (use 'git remote prune' to remove)
Local branches configured for 'git pull':
hongqi merges with remote hongqi
master merges with remote master
Local ref configured for 'git push':
master pushes to master (up to date)
D:\Development\Rongzi.RZR.M (master)
λ git remote prune origin
Pruning origin
URL: http://10.40.3.31/rzr.net/Rongzi.RZR.M.git
* [pruned] origin/bugfix
* [pruned] origin/develop
* [pruned] origin/hongqi
D:\Development\Rongzi.RZR.M (master)
λ git b -a
bugfix
hongqi
* master
remotes/origin/Develper
remotes/origin/HEAD -> origin/master
remotes/origin/developer
remotes/origin/feature
remotes/origin/master
5.git pull,git push 报错(本地分支没有对应的远程分支)
D:\Development\Rongzi.RZR.MI (develop)
$ git pull
There is no tracking information for the current branch.
Please specify which branch you want to merge with.
See git-pull(1) for details.
git pull <remote> <branch> If you wish to set tracking information for this branch you can do so with:
git branch --set-upstream-to=origin/<branch> develop
D:\Development\Rongzi.RZR.MI (develop)
$ git branch -vv * develop bd19efd fengsheng
feature/RZRAPP 427ea9c [origin/feature/RZRAPP] Merge branch 'develop'
feature/ThirdCooperation ebbe5e8 [origin/feature/ThirdCooperation] 金额单位修改
hongqi cbb9edd [origin/hongqi: gone] modify mojie channelId
master 39a624f [origin/master: behind 1] fix bug“
使用git branch -vv 可以查看本地分支和远程分支的关联关系
使用命令 git branch --set-upstream-to=origin/远程分支的名字 本地分支的名字
D:\Development\Rongzi.RZR.MI (develop)
$ git branch --set-upstream-to=origin/develop develop
Branch develop set up to track remote branch develop from origin.
D:\Development\Rongzi.RZR.MI (develop)
$ git pull
Already up-to-date.
D:\Development\Rongzi.RZR.MI (develop)
$ git branch -vv * develop bd19efd [origin/develop] fengsheng
feature/RZRAPP 427ea9c [origin/feature/RZRAPP] Merge branch 'develop'
feature/ThirdCooperation ebbe5e8 [origin/feature/ThirdCooperation] 金额单位修改
hongqi cbb9edd [origin/hongqi: gone] modify mojie channelId
master 39a624f [origin/master: behind 1] fix bug“
也可以使用简化版本
git branch --set-upstream-to=origin/develop develop
(简化版-此命令的含义是,是指当前分支的upstream为origin远程仓库的develop分支)
git b -u origin/develop
6.对远程分支的操作:
在远程生成本地分支对应的远程分支
$ git push -u origin feat
$ git push -u origin feat:feat
$ git b -u origin/feat
$ git b -u origin/feat feat
(注意这里为b,而且名称必须origin/远程名称)
git b.... :当前分支的upstream为origin远程仓库的dev分支,(必须已经存在对应的远程分支)
git push....:推送feat分支到远程origin仓库feat分支,并且建立本地分支feat的upstream为origin/feat(远程可不存在,如果存在,要看commit版本,可能会有冲突)
删除:(冒号方式的删除,原理是,冒号左边应该为本地分支,右边为远程分支,现在推送了一个空的本地分支到远程分支)
删除远程dev分支,分别是2种不同的命令
$ git push origin :dev
$ git push origin -d dev
$ git push origin --delete dev
取消upstream:
取消当前分支的upstream
$ git branch --unset-upstream
取消其他分支的upstream
$ git branch --unset-upstream [分支名]
7.模糊匹配:
查看某文件修改
git diff *House*
撤销某文件修改
git co *House*
8.error: src refspec hongqi does not match any.
出现上述问题时,执行下面的命令进行推送,一般是因为本地分支名称与远程分支名称不一致导致。
$ git push origin HEAD:hongqi
9.取消某次合并
git merge --abort #如果Git版本 >= 1.7.4
git reset --merge #如果Git版本 >= 1.6.1
**10.暂存命令stash使用 **
git stash #将本地修改暂时存储起来
git stash list #查看暂存的信息
git stash pop #应用最近一次暂存的内容
git stash apply stash@{1} #应用指定版本的暂存内容
git stash clear #清空暂存栈
11.git revert撤销merge
正常方式revert merge的commitid:
$ git revert 98ddcac
error: commit 98ddcace161b532103597f5eaa4b9ac8b873ca1c is a merge but no -m option was given.
fatal: revert failed
log:
* g - Merge branch 'dev' (30 minutes ago) | hongda
|\
| * e - (dev) 3333 (45 minutes ago) | hongda
| * d - 1111 (45 minutes ago) | hongda
* | f - 4444 (52 seconds ago) | hongda
|/
* c - (origin/master, origin/HEAD) 取消注释 (1 year, 3 months ago) | hongda
* b - 调整后台调用的接口,修改分页 (1 year, 3 months ago) | hongda
* a - 修改 (1 year, 3 months ago) | hongdada
可以看到它merge是两个commitid,分别是它整个提交的commitid的起始
a -> b -> c -> f -- g -> h (master)
\ /
d -> e (dev)
上图中,g 是 merge commit,其他的都是常规 commit。g 的两个 parent 分别是 f 和 e。
在你合并两个分支并试图撤销时,Git 并不知道你到底需要保留哪一个分支上所做的修改。从 Git 的角度来看,master 分支和 dev 在地位上是完全平等的,只是在 workflow 中,master 被人为约定成了「主分支」。
于是 Git 需要你通过 m 或 mainline 参数来指定「主线」。merge commit 的 parents 一定是在两个不同的线索上,因此可以通过 parent 来表示「主线」。m 参数的值可以是 1 或者 2,对应着 parent 在 merge commit 信息中的顺序。
$ git show 98ddcac
commit 98ddcace161b532103597f5eaa4b9ac8b873ca1c
Merge: d9090a1 f032a1b
Author: hongda <hongda159505@qq.com>
Date: Wed Dec 5 16:39:23 2018 +0800
Merge branch 'dev'
那么,$ git revert g -m 1 将会保留 master 分支上的修改,撤销 dev 分支上的修改。
参考:
Git 命令收集的更多相关文章
- git命令收集(记得持续更新)
这里收集了一些常用的git命令: git remote add origin git@192.168.1.128:sabo/ycdd-server.git git push -u origin mas ...
- git命令收集整理
git init # 初始化本地git仓库(创建新仓库) git config --global user.name "xxx" # 配置用户名 git config --glob ...
- github踩坑之git命令收集与整理(windows)
最近开始又捡起git,第一家公司用的就是git,一直掌握的也不深刻,就知道常用的几个命令,虽然现在用svn,但是觉得git还是不能丢,遂又捡起来了.先总结一部分目前练习用到的,慢慢填补吧~ githu ...
- Git命令收集【不断更新中】
git stash 可以用来保存暂时不想提交但又被修改过的文件. git stash pop 用来取出被保存在stash栈中的修改过的所有文件. git stash show 查询哪些文件被存放在了s ...
- git命令收集
$ git clone ... $ git status 查看状态 $ git commit -am "XXX" 提交信息 $ git commit -am "XXXX& ...
- Git初探--笔记整理和Git命令详解
几个重要的概念 首先先明确几个概念: WorkPlace : 工作区 Index: 暂存区 Repository: 本地仓库/版本库 Remote: 远程仓库 当在Remote(如Github)上面c ...
- 工作中常用的git命令
一 常用Git命令 git clone:(区分SSH or HTTP) git init:初始化仓库 二 Git命令详解 Git Bash下,cd /c git clone,从远程Git版本库克隆一份 ...
- 常用 Git 命令清单
我每天使用 Git ,但是很多命令记不住. 一般来说,日常使用只要记住下图6个命令,就可以了.但是熟练使用,恐怕要记住60-100个命令. 下面是我整理的常用 Git 命令清单.几个专用名词的译名如下 ...
- 常look的Git命令
常用的Git命令 命令 简要说明 git add 添加至暂存区 git add–interactive 交互式添加 git apply 应用补丁 git am 应用邮件格式补丁 git a ...
随机推荐
- Python记录7:函数3,函数对象
#函数对象指的是:函数的内存地址可以像变量值一样去使用,如何使用?def func(): print('from func')#1. 可以被引用# f=func# print(f)# f() #2. ...
- Comparator与Comparable用法与区别
一.概述. Comparator和Comparable两者都属于集合框架的一部分,都是用来在对象之间进行比较的,但两者又有些许的不同,我们先通过一个例子来看一下他们的区别,然后再分别学习下它们的源 ...
- Spring Boot中Service用@Transactional 注解
一般来说function2和function1用的是同一个Transaction. 这个取决于@Transactional 的 propagation设置(事务的传播性) 默认的是 1 @Transa ...
- mysql主从配置,读写分离
Mysql主从配置,实现读写分离 大型网站为了软解大量的并发访问,除了在网站实现分布式负载均衡,远远不够.到了数据业务层.数据访问层,如果还是传统的数据结构,或者只是单单靠一台服务器扛,如此多的数据库 ...
- 在lua中从一个字符串中移除空间源码
/* trim.c - based on http://lua-users.org/lists/lua-l/2009-12/msg00951.html from Sean Conner */ #inc ...
- Qt信号之自定义数据类型
[1]为什么需要自定义数据类型? 内置类型毕竟很有局限性,否则为什么还需要类呢.总之,有时候,我们多么希望信号能发送自定义数据类型. 幸哉~ Qt是支持自定义信号,且自定义信号可以发送自定义数据类型的 ...
- 20165305 Linux安装及学习
一.虚拟机的安装 在根据老师所给的<基于VirtualBox虚拟机安装Ubuntu图文教程>的时候,我发现虚拟化处于被禁用状态,于是我在网上查找了一下解决办法,在我将bios中虚拟化设置为 ...
- JAVA中获取文件MD5值的方法
1 DigestUtils.md5Hex(new FileInputStream(path)); 如果你只需要使用标准的MD5,其实一行代码就够了,JAVA自带的commons-codec包就提供了获 ...
- px-pt-dp-rem像素单位的换算问题
px-pt-dp-rem像素单位的换算问题 dp 的意思从 MDPI 到 XXXHDPI 每单位物理尺寸的像素数越来越大.也就是说 mdpi 时 1dp = 1pxxxxhdpi 时 1dp = 4p ...
- TensorFire:WEB端的高性能神经网络框架
TensorFire:WEB端的高性能神经网络框架 摘要: 近日,一种专门用于在网页内执行神经网络算法的JavaScript库——TensorFire引起了人们的关注,这种JavaScript库在浏览 ...