常用git 命令备忘
1. 提交
1.1 正常提交
git add . //添加所有文件
git commit -m "本功能全部完成"
1.2 提交后想撤回
git reset --soft HEAD^ // 仅仅是撤回commit操作,写的代码仍然保留 HEAD^的意思是上一个版本,也可以写成HEAD~1, 如果你进行了2次commit,想都撤回,可以使用HEAD~2
--mixed 意思是:不删除工作空间改动代码,撤销commit,并且撤销git add . 操作 这个为默认参数,git reset --mixed HEAD^ 和 git reset HEAD^ 效果是一样的。
--soft 不删除工作空间改动代码,撤销commit,不撤销git add .
--hard 删除工作空间改动代码,撤销commit,撤销git add . 注意完成这个操作后,就恢复到了上一次的commit状态。
git commit --amend // 如果commit注释写错了,只是想改一下注释。 此时会进入默认vim编辑器,修改注释完毕后保存就好了。
1.3 合并提交记录
背景:一个repo通常是由一个team中的多个人共同维护,如果需要增加新feature,那么就是一个feature分支了。由于开发中各种修改,本feature分支多次commit。最后提交master后,会看到乱七八糟的所有增量修改历史。其实对别人来说,我们的改动应该就是增加或者删除,给别人看开发过程的增量反而太乱。于是我们可以将feature分支的提交合并后然后再merge到主干这样看起来就清爽多了。
rebase的作用简要概括为:可以对某一段线性提交历史进行编辑、删除、复制、粘贴;因 此,合理使用rebase命令可以使我们的提交历史干净、简洁!
合并前可以先使用。git log --oneline
展示历史提交
bf37959b (HEAD -> master) test 2
2f8f6624 test 1
c53ad628 comit test end
然后使用命令 git rebase -i [startpoint] [endpoint]
其中-i
的意思是--interactive
,即弹出交互式的界面让用户编辑完成合并操作,[startpoint] [endpoint]
则指定了一个编辑区间,如果不指定[endpoint]
,则该区间的终点默认是当前分支HEAD所指向的commit(注:该区间指定的是一个前开后闭的区间)。 在查看到了log日志后,我们运行以下命令:
git rebase -i c53ad628
或者
git rebase -i HEAD~2
然后进入编辑, 选择f 进行合并commit
pick 2f8f6624 test 1
f bf37959b test 2# Rebase c53ad628..bf37959b onto c53ad628 (2 commands)
#
# Commands:
# p, pick <commit> = use commit
# r, reword <commit> = use commit, but edit the commit message
# e, edit <commit> = use commit, but stop for amending
# s, squash <commit> = use commit, but meld into previous commit
# f, fixup <commit> = like "squash", but discard this commit's log message
# x, exec <command> = run command (the rest of the line) using shell
# b, break = stop here (continue rebase later with 'git rebase --continue')
# d, drop <commit> = remove commit
# l, label <label> = label current HEAD with a name
# t, reset <label> = reset HEAD to a label
# m, merge [-C <commit> | -c <commit>] <label> [# <oneline>]
# . create a merge commit using the original merge commit's
# . message (or the oneline, if no original merge commit was
# . specified). Use -c <commit> to reword the commit message.
#
# These lines can be re-ordered; they are executed from top to bottom.
#
# If you remove a line here THAT COMMIT WILL BE LOST.
#
# However, if you remove everything, the rebase will be aborted.
#
# Note that empty commits are commented out
上面的选项说明如下
pick:保留该commit(缩写:p)
reword:保留该commit,但我需要修改该commit的注释(缩写:r)
edit:保留该commit, 但我要停下来修改该提交(不仅仅修改注释)(缩写:e)
squash:将该commit和前一个commit合并(缩写:s)
fixup:将该commit和前一个commit合并,但我不要保留该提交的注释信息(缩写:f)
exec:执行shell命令(缩写:x)
drop:我要丢弃该commit(缩写:d)
然后再查看。git log --oneline
发现提交已经被合并了
0c6ba35e (HEAD) test 1
c53ad628 comit test end
2. 删除本地和远程分支
我现在在dev20181018分支上,想删除dev20181018分支
1 先切换到别的分支: git checkout dev20180927
2 删除本地分支: git branch -d dev20181018
3 如果删除不了可以强制删除,git branch -D dev20181018
4 有必要的情况下,删除远程分支(慎用):git push origin --delete dev20181018
5 在从公用的仓库fetch代码:git fetch origin dev20181018:dev20181018
6 然后切换分支即可:git checkout dev20181018
注:上述操作是删除个人本地和个人远程分支,如果只删除个人本地,请忽略第4步
3. 推送代码
使用git commit命令将修改从暂存区提交到本地版本库后,只剩下最后一步将本地版本库的分支推送到远程服务器上对应的分支了,如果不清楚版本库的构成,可以查看我的另一篇,git 仓库的基本结构。
git push的一般形式为 git push <远程主机名> <本地分支名> <远程分支名> ,例如 git push origin master:refs/for/master ,即是将本地的master分支推送到远程主机origin上的对应master分支, origin 是远程主机名,
第一个master是本地分支名,第二个master是远程分支名。
3.1 git push origin master
如果远程分支被省略,如上则表示将本地分支推送到与之存在追踪关系的远程分支(通常两者同名),如果该远程分支不存在,则会被新建
3.2 git push origin :refs/for/master
如果省略本地分支名,则表示删除指定的远程分支,因为这等同于推送一个空的本地分支到远程分支,等同于 git push origin --delete master
3.3 git push origin
如果当前分支与远程分支存在追踪关系,则本地分支和远程分支都可以省略,将当前分支推送到origin主机的对应分支
3.4 git push
如果当前分支只有一个远程分支,那么主机名都可以省略,形如 git push,可以使用git branch -r ,查看远程的分支名
3.5 git push 的其他命令
这几个常见的用法已足以满足我们日常开发的使用了,还有几个扩展的用法,如下:
(1) git push -u origin master 如果当前分支与多个主机存在追踪关系,则可以使用 -u 参数指定一个默认主机,这样后面就可以不加任何参数使用git push,
不带任何参数的git push,默认只推送当前分支,这叫做simple方式,还有一种matching方式,会推送所有有对应的远程分支的本地分支, Git 2.0之前默认使用matching,现在改为simple方式
如果想更改设置,可以使用git config命令。git config --global push.default matching OR git config --global push.default simple;可以使用git config -l 查看配置
(2) git push --all origin 当遇到这种情况就是不管是否存在对应的远程分支,将本地的所有分支都推送到远程主机,这时需要 -all 选项
(3) git push --force origin git push的时候需要本地先git pull更新到跟服务器版本一致,如果本地版本库比远程服务器上的低,那么一般会提示你git pull更新,如果一定要提交,那么可以使用这个命令。
(4) git push origin --tags //git push 的时候不会推送分支,如果一定要推送标签的话那么可以使用这个命令
3.6 关于 refs/for
// refs/for 的意义在于我们提交代码到服务器之后是需要经过code review 之后才能进行merge的,而refs/heads 不需要
3.7 跟踪指定的远程分支
git checkout -b tmp origin/TMP
或者
git checkout --track origin/4.1.x
如果想要查看设置的所有跟踪分支,可以使用 git branch
的 -vv
选项。
$ git branch -vviss53 7e424c3 [origin/iss53: ahead 2] forgot the bracketsmaster 1ae2a45 [origin/master] deploying index fix
* serverfix f8674d9 [teamone/server-fix-good: ahead 3, behind 1] this should do ittesting 5ea463a trying something new
这里可以看到 iss53 分支正在跟踪 origin/iss53 并且 “ahead” 是 2,意味着本地有两个提交还没有推送到服务器上。 也能看到 master 分支正在跟踪 origin/master 分支并且是最新的。 接下来可以看到 serverfix 分支正在跟踪 teamone 服务器上的 server-fix-good 分支并且领先 3 落后 1, 意味着服务器上有一次提交还没有合并入同时本地有三次提交还没有推送。 最后看到 testing 分支并没有跟踪任何远程分支。
参考博客
Git push 常见用法 - 浅浅念 - 博客园
git删除本地分支和删除远程分支 - 李勇888 - 博客园
常用git 命令备忘相关推荐
- linux git 命令备忘
1.查看某次提交的文件文件列表(不包括修改内容) git log --stat 2.清除本地所有修改(包括已加入缓冲区文件) git reset --hard git clean -xdf 3.命令 ...
- KVM 虚拟机 virsh 命令备忘单
这是一个全面的 virsh 命令备忘单: virsh 是 KVM 虚拟机的命令管理用户界面.virsh 可用于创建.暂停.重新启动和关闭域.此外,virsh 可用于列出您的虚拟化管理程序平台中可用的当 ...
- 常用 Git 命令清单
我每天使用 Git ,但是很多命令记不住. 一般来说,日常使用只要记住下图6个命令,就可以了.但是熟练使用,恐怕要记住60-100个命令. 下面是我整理的常用 Git 命令清单.几个专用名词的译名如下 ...
- 常用 Git 命令清单(转)
一般来说,日常使用只要记住下图6个命令,就可以了.但是熟练使用,恐怕要记住60-100个命令. 下面是我整理的常用 Git 命令清单.几个专用名词的译名如下. Workspace:工作区 Index ...
- 常用Git命令清单。
上期传送门:[清单]7个管理和优化网站资源的工具 下面是我整理的常用 Git 命令清单.几个专用名词的译名如下. Workspace:工作区 Index / Stage:暂存区 Repository: ...
- 常用Git指令常用git命令清单
下面是我整理的常用 Git 命令清单.几个专用名词的译名如下. Workspace:工作区 Index / Stage:暂存区 Repository:仓库区(或本地仓库) Remote:远程仓库 一. ...
- git切换用户密码_Java小白入门,常用Git命令有哪些?
Git简介 Git是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目. Git是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件. ...
- freedos 常用命令_庆祝FreeDOS 24周年:有用的命令备忘单
freedos 常用命令 FreeDOS在6月29日满24岁. FreeDOS是一个完整的,免费的,与DOS兼容的操作系统,您可以使用它来玩经典的DOS游戏 , 运行商务软件或开发嵌入式系统. 在MS ...
- 常用GIT命令整理 - WIP
目录 简介 GIT设置系列命令 GIT路径系列命令 GIT仓库系列命令 子模块 (Submodule) GIT Attributes GIT常见故障排除 Errno 10054 Permission ...
最新文章
- 怎么区分五类线、超五类线和六类线
- Webpack实战(三):作为前端你不得不懂的Webpack资源入口和出口的配置
- ONNX系列五 --- 在C#中使用可移植的ONNX AI模型
- AST语法结构树初学者完整教程
- 协程学习-python
- From Apprentice To Artisan 翻译 08
- DBeaver 导出数据库结构和数据
- UNIX环境高级编程(中文第三版)
- 易宝支付银行接口,各参数
- 云计算技术简述及发展分析
- Rainmeter雨滴天气-(永不过时版通过获取网页数据实现)
- 2019icpc南京网络赛 Holy Grail(SPFA)
- Android/安卓 文本添加中划线、下划线的方法
- 一文详尽解释CatBoost
- php微信获取素材列表,20.6.7 获取素材列表
- HTML防止input回车提交表单
- ibm服务器报错代码大全_IBM_x系列服务器报错代码
- iOS 【如何去除 UILabel 边缘异常黑线/阴影】
- 在Corex-M3开发板上移植.Net Micro Framework系列文章
- 在html文档中创建段落应使用,2016职称计算机考试Dreamweaver基础试题1
热门文章
- 幸福密码:与原生家庭和解后,才能直面真正的自己
- 中继(扩展)wifi覆盖范围的路由器的设置(图文教程)【中继路由器的设置图文教程】
- 【硬十宝典目录】——1、电源类(更新中~)
- 微信小程序iBeacon获取问题(wx.onBeaconUpdate不执行)【已解决】
- 第56章 SQL UCASE() 函数教程
- 蓝牙通话耳机质量哪个好?通话质量好的蓝牙耳机
- 页面5秒钟刷新一次(html,php)均可用
- ax200 兼容性问题 老路由器_我的华硕AX89X 160频宽和MU-MIMO问题,小米10测速-路由器交流...
- unity 2D动画控制一些小技巧
- 笔记:AVS2背景建模