Git命令相关
特别说明
关于命令行中参数前面的-和--的区别
- 通常后面接参数的缩写
-- 通常后面接参数的全拼
eg: git status --short 等价于 git status -s
常用命令
创建版本库:
git init
# 本地初始化 git 仓库git clone <url>
# 克隆远程版本库
git config --list
# 查看本地所有配置项git config core.autocrlf
# 查看某个配置的详细配置值git config --global core.autocrlf false
# 配置参数的值,--global
是对本地所有 git 项目生效,如果只想对本项目生效,则不需要该参数
提交&更新:
git add .
# 将所有的变更添加到索引,等同于 git add -A
或者 git add --all
,如果只想添加某个指定的文件可以使用 git add -- filename
git rm --cached -- filename
# 从索引中删除某个文件,但不会从工作目录删除(删除暂存区的文件,撤销git add操作)
git commit -m "message"
# 将索引中的变更提交到本地仓库git commit -a -m "message"
# 将 git add .
与 git commit -m "message"
这两个命令合成一个命令提交git commit --amend
# 修改最后一次提交的 message(只能修改最后一次的提交)git rebase -i
# 与交互的方式合并提交/更改提交的顺序等git merge test
# 将 test 分支合并到当前分支
git merge --no-ff -m "merge with no-ff" <分支名>
一般的分支合并默认是Fast-Forward模式,就是直接改变head指针指向,比如在master分支上创建了一个dev分支,在dev分支上修改某个文件内容并提交到本地库,再次切换回master分支,并执行git merge操作,此时就是直接修改的head指针, 并直接指向了dev分支的最新提交。对于禁用Fast Forward模式之后,就不在是简单的改变head指向,而是在master分支上,新建了一次提交A,head正常指向master最新提交实体A
git status
# 查看当前工作目录下的变更内容git status -s
# 查看变更文件和变更状态,那些标识为UU
的文件就是需要解决的冲突文件git status -vv
# 查看变更的详细内容git ls-files -u
# 查看那些合并产生冲突的文件
git pull
# 拉取远程分支的更新,并且将远程分支的更新合并(merge)到本地分支git pull --rebase
# 拉取远程分支的更新,并使用 rebase 的方式将远程分支的更新应用到本地分支,相对于 git pull
操作,这种方式不会产生一个远程分支合并点,该操作等下于下面两个命令的合并(推荐采用这种方式来拉取远程分支的更新,这样整个分支的提交历史记录会赶紧很多)git fetch
# 拉取远程仓库的更新,但不进行合并git rebase origin/master master
# 将远程 master 分支上的更新 rebase 到本地 master 分支上git push origin master
# 将本地提交记录推送到远程仓库git push origin :test
# 删除远程仓库的 test 分支,冒号前面的是本地分支名,冒号后面的是远程分支名,这里冒号前面的为空,表示将本地的一个空分支推送到远程的 test 分支,意思就是删掉远程的 test 分支
git cherry-pick SHA1
# 将某个提交应用到其他分支,会产生一个新的提交
git apply test.patch
# 应用补丁 git apply --check test.patch
# 检查补丁文件git apply test.path -3
# 冲突时,强行合并,会产生冲突
git rebase --onto HEAD~5 HEAD~3 master
# 特殊的方式删除提交点(不常用)
重置
git reset
# 重置更改,将 HEAD 指向新的提交,对应的有三个选项 --soft:工作目录和索引都不会更好,只是将 HEAD 指向新的提交,之前的所有提交都还会在索引中, --mixed:只重置索引,不重置工作目录,你所有的更改还会在工作目录中(默认的选项), --hard:重置工作目录和索引,之前所有的变更都会被丢弃掉git checkout -- filename
# 将某个指定的文件还原到 HEAD 中的内容, reset 是用来还原整个工作目录的,如果需要还原某个文件可以使用 git checkoutgit revert SHA1
# 用来还原某个提交的更改,与 reset 不同的是 revert 会创建一个新的提交,只不过这个新的提交是之前指定提交(SHA1)的反提交git clean -df
# 清除所有的更改,并将工作目录,索引,包括删除 git 未追踪的文件(慎用!慎用!)
暂存
(例如在master分支上正常开发,在还没有来得及提交的时候,BUG出现了,假如此时我们新建并切换至分支bug101,问题就出现了, master并没有提交,如果到时候bug101完成了bug修复工作并在在master上合并,就会丢弃在master分支上完成的部分工作,git提供了一种机制,能够将master工作现场(未提交的部分)'保护'起来,这就是git stash )
git stash
# 将工作目录和索引中的更改暂存起来,并且将工作目录和索引恢复到当前分支的 HEAD,效果类似于 git reset --hard
,但是并不会像 reset 那样丢弃当前的更改(在开发一半的过程中需求切换到其他分支修改问题时,该命令非常有用)git stash list
# 查看当前所有的 stash 暂存点git stash save <desc>
# 创建一个 stash 暂存点,并且指定名称,还原时可以根据该名称来还原git stash pop [<stash>]
# 弹出指定暂存点,并且该暂存点的更改应用在当前分支上,如果不指定 默认是弹出最近的一个暂存点,完成之后会自动删除该暂存点git stash apply <stash>
# 应用某个暂存点,与 pop 效果类似,但是 apply 并不会删除该暂存点git stash show stash{0}
# 显示修改的统计git stash show –p stash{0}
# 显示暂存点更改的内容git stash drop <stash>
# 删除一个 stashgit stash clear
# 清除所有的 stash 暂存点
日志&搜索
git log -5
# 显示最近5次提交历史,-n 表示最近的n次提交历史git log --graph
# 以图形结构展示提交历史点git log --oneline -5
# 显示最近5次提交,每个提交显示在一行git log -p -1
# -p 查看提交的详细内容,-p 会列出每个文件改动的地方git log --oneline --name-status -1
# --name-status 显示提交文件名以及文件的修改状态,如果只关注提交涉及的文件名也可以使用 --name-onlygit log --oneline --no-merges -5
# --no-merges 忽略掉那些 merge 的提交点git log --oneline --author=walle -5
# --author=walle 只关注作者是 walle 的提交记录git log --oneline --after='2017-09-05'
# --after='2017-09-05'显示从2017-09-05号之后的所有提交,类似的查看某个日期之前的提交可以使用 --before=''git log --oneline --grep='oracle'
# --grep='oracle' 查看 commit message 中包含 oracle 字符串的所有提交(更加提交 message 快速找到某个历史的提交点)git log -S "readme"
# -S 基于提交内容的搜索,搜索哪次提交内容中包含了 readme 字符(可以用来快速查找文件中的某一行或者某段内容是在哪个提交中添加进来的)git log --format="%h %an %s %ad" --date=short -5 --no-merges
# --format参数 %h:显示 SHA 值,%an:显示提交作者,%s:显示提交的 message,%ad:显示提交的日期;--date=shore 用来格式化日期的显示形式(2017-12-09)这种格式
git rev-list --oneline master -- README.md
# 查看 README.md 文件在 master 分支上所有的提交历史git blame -- README.md
# 查看指定文件每行的作者,可以指定需要查看哪些行的作者(相当于 idea 中的注释查看功能)git bisect
# 一个基于二分查找的方式来定位修改提交点(自行研究使用方法...)
git ls-files *Tests.java
# 搜索某个文件在当前工作目录下的完整路径名(在某些情况下需要对某个文件做指定操作时,需要先获取这个文件的完整路径)git ls-files *.java | wc -l
# 统计某种类型文件数量
git grep "message" [<branchname>]
# 基于内容搜索,查看指定的内容在哪个文件中存在,后面参数还可以指定分组名
git show SHA1
# git show 命令几乎可以用来查看 git 中所有的对象git show master:README.md > README.md.master
# 快速获取 master 分支上 README.md 文件的内容(这个命令非常有用,当你需要查看不同分支/不同提交点/不同tag之间某个文件的内容时,使用该命令可以避免不停的切换分支/tag来获取文件的内容)
git config --global alias.lg "log --color --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen%ad (%cr) %C(bold blue)<%an>%Creset' --abbrev-commit --no-merges --date=short"
# git log 自定义别名,让你的命令瞬间高大尚
差异
git diff
# 比较工作目录和索引之间的差异git diff --cached
# 比较索引和HEAD之间的差异git diff --cached SHA1
# 比较索引和某个提交点之间的差异git diff SHA1
# 比较工作目录和给定 commit 直接的差异,e.g. git diff HEAD
比较工作目录和最后一次 commit 之间的差异git diff --name-only SHA1..SHA2
# 列出两个提交点之间的所有差异文件名git diff SHA1..SHA2 > test.patch
# 将两个提交点之间的所有差异打成补丁文件 test.patch(这样可以很方便地将一个分支上面的所有修改内容应用到另外一个分支,应用补丁的命令为 git apply test.patch
)git diff --name-only branch1 branch2
# 查看两个分支之间的差异文件
分支&标签
git branch -avv
# 显示所有的本地分支和远程分支git checkout test
# 切换到 test 分支,test 分支必须是本地存在的分支,否则会报错git checkout -b test
# 基于当前所在的分支,检出一个新的命名为 test 的分支, 创建+切换git checkout -m dev
# -m 参数允许在当前分支有变更的情况下检出另外的分支,并将当前分支的变更应用到新检出的分支git branch -D test
# 删除本地的 test 分支,-D 为强制删除,如果当前分支的变更没有完全合并到 master 分支时使用 -d 无法删除,必须使用 -D 来强制删除git branch -r -d origin/test
# 删除本地远程追踪分支,并不会删除远程仓库里面的分支,推荐使用下面的命令删除本地远程追踪分支git fetch -p
# 拉取远程更新,并且将本地无用的远程追踪分支删除,例如,远程仓库中的某个分支被其他人员删除,而你使用 git fetch
时你本地对应的远程追踪分支(origin/test)并不会删除git push origin :test
# 删除远程仓库 test 分支,并且删除本地的 origin/test 分支,但是不会删除本地的 test 分支
git branch -m dev develop
# 重命名本地分支 dev 为 developgit checkout --track origin/test
# 基于远程的 test 分支,检出为本地的 test 分支,--track 参数表示将本地新检出的 test 分支关联到远程的 origin/test 分支上,一般在第一次拉取远程新的分支是使用git branch --set-upstream-to=origin/test
# 将当前分支关联到远程的 origin/test 分支,这样之后对当前分支的 pull/push 操作都不需要指定远程分支名git show-branch
# 查看本地所有分支之间的差异点git show-branch test origin/test
# 查看本地 test 分支与远程追踪分支 origin/test 分支之间的提交差异
git tag
# 查看本地所有的标签git tag <tagname>
# 基于当前分支 HEAD 创建标签git tag -d <tagname>
# 删除标签
其他
git reflog
# 让你永远有后悔药吃 列出所有 HEAD 变更还原点,当前分支 HEAD 发生变化时(新的提交/撤销提交/切换分支等),git 都会自动记录一个还原点,你可以使用这个还原点来恢复你的错误操作,例如:当你使用 git reset HADE^
还原了某个提交点后,你又发现那个被重置的提交点是有用的,你又想恢复回来,这时你就可以使用 reflog 还原点来还原
git filter-branch --tree-filter "find * -type f -name '*.log' -delete" master test test2
# 核弹级命令,在 master&test&test2 分支上删除所有 log 文件,通常情况下如果我们修改了大量文件提交时会使用 git add .
命令提交所有的更改,如果不小心包含了一些不必要的 log 文件,这些文件将会提交到版本库中,时间长了之后这些文件可能会散落到不同的分支上,如果你想全局地删掉这些文件 git filter-branch
命令就非常有用了,它可以帮你在指定的所有分支上所有的提交中删除指定的文件,而且这些删掉的文件你也无法使用 git reset
命令来恢复,并且查看提交历史中也看不到这些文件的记录(慎用!慎用!)
Git命令相关的更多相关文章
- git 命令之暂存相关指令。
git 命令之暂存相关指令. 1.git 代码暂存指令:git stash 2.git 代码暂存列表信息:git stash list 3.git 代码应用暂存代码:git stash apply s ...
- 常用 Git 命令清单
我每天使用 Git ,但是很多命令记不住. 一般来说,日常使用只要记住下图6个命令,就可以了.但是熟练使用,恐怕要记住60-100个命令. 下面是我整理的常用 Git 命令清单.几个专用名词的译名如下 ...
- 常look的Git命令
常用的Git命令 命令 简要说明 git add 添加至暂存区 git add–interactive 交互式添加 git apply 应用补丁 git am 应用邮件格式补丁 git a ...
- 常用 Git 命令清单 转
我每天使用 Git ,但是很多命令记不住. 一般来说,日常使用只要记住下图6个命令,就可以了.但是熟练使用,恐怕要记住60-100个命令. 下面是我整理的常用 Git 命令清单.几个专用名词的译名如下 ...
- Git命令行(转用于学习和记录)
Git命令行介绍和使用说明(持续更新) 参见:<Git 中文简体教程> 一. 命令“git”或者“git help”查询常用命令 [add]: “git add”——不但是用来添加不在版本 ...
- 2015继续任性——不会Git命令,照样玩转Git
最近事情比较多,一眨眼,已经半个月没有写博客了~不得不感慨光阴似箭啊!当然,2015年有很多让我们期待的事情,比如win10正式版..NET开源.VS2015等等.想想都让人兴奋啊~~ 为了迎接VS2 ...
- Git使用相关
Git使用相关 使用git这么久还是时不时碰到小问题,根本原因在于没有仔细研究和做笔记 Git修改remote地址 之前一直使用的ssh的地址,估计是没配置好,每次都需要输密码烦死了,今天看到个用ht ...
- 你不一定知道的几个很有用的 Git 命令
这里给大家分享一些很有用的 Git 命令,其中很多用法你可能都不知道,无论你是工作在团队环境中或在您的个人项目中,这些命令将对你帮助很大,让你可以更加高效的进行项目开发,更轻松愉快的工作和生活. 您可 ...
- 常用 Git 命令清单(摘录)
来源:阮一峰的网络日志 网址:http://www.ruanyifeng.com/blog/2015/12/git-cheat-sheet.html 我每天使用 Git ,但是很多命令记不住. 一般来 ...
随机推荐
- AWS成本估算的相关小工具
1.AWS-partner :云势数据做的在线小工具,有微信版本可以使用,但是涉及的服务很少,更新慢,型号缺,界面不友好.不是很理想,连接如下: https://www.goclouds.cn ...
- 类中__iter__与__next__的说明
class Fab(object): def __init__(self ,max ): self.max =max self.n =0 self.a=0 self.b =1 def __iter__ ...
- CSS揭秘(引言)
1.标准的制定过程 a 人员结构:W3C会员公司的成员.特邀专家.W3C工作人员 b 尽管“CSS3”非常流行,但它实际上并没有在任何规范中定义过.它实际上是指一个非正式的集合,包括CSS规范第三版再 ...
- 图解HTTP(三)
第七章 确保Web安全的HTTPS 1.HTTP的不足 通信使用明文(不加密),内容可能被监听 不验证通信方的身份,因此可能遭遇伪装 无法验证报文的完整性,所以有可能已遭篡改 2.通信加密 通信的加密 ...
- linux技能点 六 软件管理和其他命令
软件管理:rpm ,yum apt -get (ubuntu) rpm -q:查询 rpm -i:安装 rpm -e:卸载 rpm -U:更新 yum install:安装 y ...
- day 04 作业 预科
目录 作业 1.分别列出 数字类型.字符串类型.列表.字典 的 作用.定义方式和使用方法. 数字类型 字符串类型 列表 字典 词云图 作业 1.分别列出 数字类型.字符串类型.列表.字典 的 作用.定 ...
- oracle instantclient_12_2安装
下载地址 http://www.oracle.com/technetwork/database/database-technologies/instant-client/downloads/index ...
- supervisor安装部署文档和管理实例
Supervisord是用Python实现的一款非常实用的进程管理工具,类似于monit(关于monit见我的博客:用monit监控系统关键进程),monit和supervisord的一个比较大的差异 ...
- 关闭firefox火狐浏览器下载完成时自动扫描(49.0.2以后版本)
本人自己找到的方法,亲测有效,如下:1.在火狐浏览器地址里输入about:config回车,可能会提示“这可能使质量保证失效”,点击[我了解此风险!]2.在搜索框里输入browser.safebrow ...
- [AI] 论文笔记 - U-Net 简单而又接近本质的分割网络
越简单越接近本质. 参考资料 U-Net: Convolutional Networks for Biomedical Image Segmentation Abstract & Introd ...