【转帖】Git学习笔记 记录一下
本文内容参考了廖雪峰老师的博文,并做了适当整理,方便大家查阅。
原帖地址
https://wangfanggang.com/Git/git/
常用命令
仓库初始化 - git init
|
|
我们新建一个文本文件readme.txt
|
|
将文件添加到仓库中 - git add
|
|
将文件提交到仓库 - git commit
|
|
查看仓库状态 - git status
|
|
对比文件区别 - git diff
对文件内容进行简单修改并保存,这时还未提交(commit
)到仓库,如果这时我们希望对比一下自从上次提交后,该文件发生了哪些变化,可以用git diff
命令实现。
|
|
注:
diff
比较的是当前未提交(commit
)的版本跟上一个版本之间的差别。一旦commit
到仓库,就无法比较了。
查看日志 - git log
|
|
我们通过git log
命令可以清楚地看到之前提交的版本。这里的一大串数字叫commit id
。我们可以清楚地看到当前HEAD
即是当前位置(append GPL
)
回退版本 - git reset
当前所处的位置为HEAD
,如果我们希望回退到上一步(即add distribute
),可以用HEAD^
来表示。上两步是HEAD^^
,以此类推。
|
|
查看文件,内容已经更改回版本2了。
此时我们再用git log
查看历史记录:
发现版本3
已经不见了,这时如果想再回复回去还有办法么?答案当然是肯定的,只要你记得commit id
,随时可以用以下命令穿梭回去。
|
|
注:这里的
acc1d
是commit id
的前几位,不需要写全,git会自动匹配。
再次git log
查看一下:
查看所有历史记录 - git reflog
如果你忘记了之前的commit id
也不要紧,可以用过git reflog
来查找。
|
|
撤销工作区修改 - git checkout -- filename
假设现在我们又修改了文件内容。
readme.txt
|
|
这时我们保存了,但还没有提交到缓冲区。用git status
查看,git提示文件已修改。
这时,我们可以用git checkout -- filename
撤销修改就回到和版本库一模一样的状态。
结论:
- 如果文件还没被提交到缓冲区,
git checkout -- filename
撤销修改就回到和版本库一模一样的状态;- 如果文件已经被提交到缓冲区,
git checkout -- filename
撤销修改就回到添加到暂存区后的状态;
注:
git checkout -- filename
命令中的--
很重要,没有--
,就变成了“切换到另一个分支”的命令。
撤销缓冲区修改 - git reset
git reset HEAD filename
命令既可以回退版本,也可以把暂存区的修改回退到工作区。当我们用HEAD
时,表示最新的版本。
这时如果还想撤销缓存区的修改,同样运行git checkout -- filename
即可。
删除文件 - git rm filename
当你删除了本地文件后,可能有两种情况:
- 你确认要删除该文件,无论本地还是代码库;
- 本地误操作,想要从代码库回复;
如果是第一种情况,可以用如下命令:
|
|
再用git commit
把正式提交删除即可。
|
|
如果是第二种情况,可以简单地用git checkout
命令回退。
|
|
远端仓库
将本地仓库关联到远程仓库 - git remote add origin [your repo url]
在Github上新建一个仓库,例如:learngit
Github会提示你可以将本地的仓库(目录)跟新建的仓库关联起来。
这里的https://github.com/wfg2513148/learngit.git
是刚刚创建的仓库,origin
是远程仓库默认的名字,一般看到origin
字样就知道是远程库。
|
|
|
|
注:当时在推送到远端仓库时遇到了以下异常:
|
|
可以尝试以下方法解决:
重新生成ssh-key并绑定到Github上
运行ssh-keygen -t rsa -C "wfgdlut@gmail.com"
需要替换成你自己的Github账号邮箱。
|
|
查看生成好的公钥文件内容,本例中的为/Users/kwang/.ssh/id_rsa.pub
。
将公钥内容原封不动的添加到Github上(Settings -> SSH and GPG keys -> New SSH key
)
如果还是报错,继续以下步骤。
显式指定远端仓库路径 - git remote set-url origin [your repo url]
用git remote set-url origin [YOUR REPO]
明确指定远端仓库,再次推送,应该就可以了。
|
|
克隆远端仓库 - git clone [your repo url]
|
|
分支
创建新分支 - git checkout -b [new branch name]
|
|
-b
参数表示创建完立刻切换,相当于执行了以下两条命令:
|
|
查看分支 - git branch
切换分支 - git branch [branch name]
|
|
合并分支
Fast-forward模式 - git merge [branch name merged]
当前我们处在master分支,现在想把dev分支合并到master分支上
|
|
可以看到,当前合并模式是Fast-forward
,即快进模式,合并速度非常快。Git分支合并还有其他的模式。
留痕模式 - git merge --no-ff -m "no-ff merge" [branch name merged]
我们可以使用--no-ff
参数来合并,这样会保留合并历史分支的痕迹。
可以看到,dev
分支的信息被保留下来了。
删除分支
正常删除分支 - git branch -d [branch name]
|
|
强行删除分支 -branch -D [branch name]`
|
|
临时分支
创建临时分支 - git stash
有时候我们手头的工作还没做完,代码还没有提交(add & commit
),但临时有其他事情要做,需要切换分支。这时候可以使用临时分支把当前工作进展储存起来,以便有空的时候“恢复”回来。
|
|
可以看到当前工作情况已经被储存起来了,这时候可以放心地切换分支了。
查看所有临时分支 - git stash list
|
|
恢复临时分支内容 - git stash apply
当紧急工作做完后,重新切换回dev
分支,取回临时分支中的工作。
|
|
注:
git stash apply
仅仅恢复临时分支的内容,并不会主动删除stash。需要用git stash drop
来删除。
删除临时分支 - git stash drop
|
|
恢复同时删除临时分支 - git stash pop
|
|
多人协作
查看远端分支 - git remote
|
|
远端仓库默认名称是origin
查看远端分支详情 - git remote -v
|
|
根据当前访问权限,可以看到fetch
抓取地址以及push
推送地址。
推送分支 - git push origin master
注: 这里的
origin master
代表要将本地内容推送到远端仓库(origin
)的master
分支上。
并不是所有的本地分支都要推送到远端的,推送原则:
master
主干分支,应该时刻与远端保持同步;dev
开发分支,也要保持与远端同步;bug
分支,可以保持在本地即可;feature
特性分支,是否要推送取决于你是否要跟他人协作;
拉取分支
远端仓库
|
|
这时当我们查看分支时,只能看到本地的master
分支
|
|
在本地创建远端分支
|
|
如果在提交的时候报冲突(其他人已经提交了),可以先用git pull
抓取最新的代码,在本地合并后再推送。
如果git pull
提示no tracking information
,说明本地分支和远端分支没有链接起来,这时候可以用以下语句完成链接:
|
|
标签管理
创建标签
标签的作用就是方便快速切换分支,创建标签也很简单,直接git tag v1.0
就可以生成一个标签。
|
|
查看所有标签
|
|
补打标签
先查出要打标签的commit id
,再运行命令补打标签。
|
|
比如我们希望对conflict fiexed
补打标签,找到对应的commit id是20adf59
补打标签:
|
|
再次查看标签:
|
|
可以看到标签并不是按照时间顺序显示的。
通过git show <tagname>
进一步查看标签内容
|
|
可以用-a
指定标签名,-m
指定说明文字。
|
|
再次查看标签详情git tag v0.1
:
删除标签
|
|
推送标签到远端分支
|
|
一次性推送全部尚未推送的标签
|
|
删除远端标签
如果标签已经推送到远端,需要先删除本地标签:
|
|
然后再删除远端标签,格式如下:
|
|
结语
本文作为个人学习Git的参考资料,会不断丰富内容,也希望能够对大家有帮助。
本文标题:Git学习笔记 - 钢钢更新
文章作者:王方钢 / Kenny Wang
发布时间:2018年04月19日 - 14:04
最后更新:2018年05月03日 - 23:05
原始链接:https://wangfanggang.com/Git/git/
许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。
【转帖】Git学习笔记 记录一下的更多相关文章
- Git学习笔记(10)——搭建Git服务器
本文主要记录了Git服务器的搭建,以及一些其他的配置,和最后的小总结. Git远程仓库服务器 其实远程仓库和本地仓库没啥不同,远程仓库只是每天24小时开机为大家服务,所以叫做服务器.我们完全可以把自己 ...
- GIT学习笔记(1):创建版本库
GIT学习笔记(1):创建版本库 创建版本库 1.创建合适目录并初始化为仓库 版本库即需要交由Git进行版本控制的目录,其下所有文件的修改.删除,Git都能跟踪还原. 说明:初始化后,当前目录下会多出 ...
- GIT学习笔记(3):分支管理
GIT学习笔记(3):分支管理 何谓分支 GIT是如何存储数据的 GIT不是存储文件差异或者变化量,而是一系列文件的快照.在Git提交时,会保存一个提交(commit)对象,该对象包含一个指向暂存内容 ...
- Git学习笔记与IntelliJ IDEA整合
Git学习笔记与IntelliJ IDEA整合 一.Git学习笔记(基于Github) 1.安装和配置Git 下载地址:http://git-scm.com/downloads Git简要使用说明:h ...
- Git学习笔记(四)
一.忽略特殊文件 在Git工作区的根目录下创建一个特殊的.gitignore文件,然后把要忽略的文件名填进去,Git就会自动忽略这些文件. 不需要从头写.gitignore文件,GitHub已经为我们 ...
- Activiti 学习笔记记录(2016-8-31)
上一篇:Activiti 学习笔记记录(二) 导读:上一篇学习了bpmn 画图的常用图形标记.那如何用它们组成一个可用文件呢? 我们知道 bpmn 其实是一个xml 文件
- Activiti 学习笔记记录(二)
上一篇:Activiti 学习笔记记录 导读:对于工作流引擎的使用,我们都知道,需要一个业务事件,比如请假,它会去走一个流程(提交申请->领导审批---(批,不批)---->结束),Act ...
- git 学习笔记6--remote & log
git 学习笔记6--remote & log 创建SSH Keys ssh-keygen -t rsa -C "1050244110@qq.com" 本地关联远程 git ...
- Git学习笔记---协作的一般流程
一般的操作流程 1.pull 王小坤与另一个同事张大炮一起开发一个项目,张大炮昨天修改了数据库读写的api,优化了执行速度,并把read()函数改名成了Read(),下午下班之前把这些代码push到服 ...
随机推荐
- linux网络工具iproute2的使用简介
一.写本文的目的 本文完全是自己在学习iproute2的过程中搜集的大杂烩,记录在这里,方便以后自己查询学习,图片都是来自网络,在此表示感谢! 二.简单了解iproute2工具套装 iproute2是 ...
- Mac下FTP的使用
高版本的mac os默认关掉了FTP服务,打开“终端”之后,可用如下命令打开: sudo -s launchctl load -w /System/Library/LaunchDaemons/ftp. ...
- 树莓派学习笔记(2):常用linux命令
转载请注明:@小五义http://www.cnblogs.com/xiaowuyi 1.ls命令:列出文件目录的常用命令,主要参数见下表. -a 列出目录下的所有文件,包括以.开头的隐含文件. -b ...
- 复习zabbix配置agent过程
1. 创建主机configuration(配置)-->Hosts(主机)-->Create host(创建主机) 不使用proxy --- enabled 2.链接监控模板Templa ...
- Linux内核RPC请求过程
这篇文章讲讲server端RPC报文的处理流程.server端RPC报文的处理函数是svc_process,这个函数位于net/sunrpc/svc.c中.这个函数须要一个svc_rqst结构的指针作 ...
- Hadoop、Yarn和vcpu资源的配置
转载自:https://www.cnblogs.com/S-tec-songjian/p/5740691.html Hadoop YARN同时支持内存和CPU两种资源的调度(默认只支持内存,如果想进 ...
- mysql事务,select for update,及数据的一致性处理
在MySQL的InnoDB中,预设的Tansaction isolation level 为REPEATABLE READ(可重读) 在SELECT 的读取锁定主要分为两种方式: SELECT ... ...
- excel实用技巧——vlookup函数
1.VLOOKUP函数的套路 VLOOKUP(要找谁,在哪儿找,返回第几列的内容,精确找还是近似找) 最后一个参数: 如果为0或FASLE,用精确匹配方式,而且支持无序查找: 如果为TRUE或被省略, ...
- VS编程,WPF中,获取鼠标相对于当前屏幕坐标的一种方法
原文:VS编程,WPF中,获取鼠标相对于当前屏幕坐标的一种方法 版权声明:我不生产代码,我只是代码的搬运工. https://blog.csdn.net/qq_43307934/article/det ...
- 【python笔记】使用matplotlib,pylab进行python绘图
一提到python绘图,matplotlib是不得不提的python最著名的绘图库,它里面包含了类似matlab的一整套绘图的API.因此,作为想要学习python绘图的童鞋们就得在自己的python ...