Git学习笔记 - 钢钢更新
参考资料
本文内容参考了廖雪峰老师的博文,并做了适当整理,方便大家查阅。
常用命令
仓库初始化 - git init
git init
我们新建一个文本文件readme.txt
Git is a distributed version control system.
Git is free software.
将文件添加到仓库中 - git add
git add .
将文件提交到仓库 - git commit
git commit -m "wrote a readme file"
查看仓库状态 - git status
git status
对比文件区别 - git diff
对文件内容进行简单修改并保存,这时还未提交(commit
)到仓库,如果这时我们希望对比一下自从上次提交后,该文件发生了哪些变化,可以用git diff
命令实现。
git diff readme.txt
注:
diff
比较的是当前未提交(commit
)的版本跟上一个版本之间的差别。一旦commit
到仓库,就无法比较了。
查看日志 - git log
git log
我们通过git log
命令可以清楚地看到之前提交的版本。这里的一大串数字叫commit id
。我们可以清楚地看到当前HEAD
即是当前位置(append GPL
)
回退版本 - git reset
当前所处的位置为HEAD
,如果我们希望回退到上一步(即add distribute
),可以用HEAD^
来表示。上两步是HEAD^^
,以此类推。
git reset --hard HEAD^
查看文件,内容已经更改回版本2了。
此时我们再用git log
查看历史记录:
发现版本3
已经不见了,这时如果想再回复回去还有办法么?答案当然是肯定的,只要你记得commit id
,随时可以用以下命令穿梭回去。
git reset --hard acc1d
注:这里的
acc1d
是commit id
的前几位,不需要写全,git会自动匹配。
再次git log
查看一下:
查看所有历史记录 - git reflog
如果你忘记了之前的commit id
也不要紧,可以用过git reflog
来查找。
git reflog
撤销工作区修改 - git checkout -- filename
假设现在我们又修改了文件内容。
readme.txt
Git is a distributed version control system.
Git is free software distributed under the GPL.
Git has a mutable index called stage.
Git tracks changes of files.
My stupid boss still prefers SVN.
这时我们保存了,但还没有提交到缓冲区。用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 rm test.txt
再用git commit
把正式提交删除即可。
git commit -m "delete test.txt"
如果是第二种情况,可以简单地用git checkout
命令回退。
git checkout -- test.txt
远端仓库
将本地仓库关联到远程仓库 - git remote add origin [your repo url]
在Github上新建一个仓库,例如:learngit
Github会提示你可以将本地的仓库(目录)跟新建的仓库关联起来。
这里的https://github.com/wfg2513148/learngit.git
是刚刚创建的仓库,origin
是远程仓库默认的名字,一般看到origin
字样就知道是远程库。
git remote add origin https://github.com/wfg2513148/learngit.git
git push -u origin master
~/Desktop/learngit(master) » git push -u origin master
Counting objects: 9, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (6/6), done.
Writing objects: 100% (9/9), 820 bytes | 820.00 KiB/s, done.
Total 9 (delta 1), reused 0 (delta 0)
remote: Resolving deltas: 100% (1/1), done.
To github.com:wfg2513148/learngit.git* [new branch] master -> master
Branch 'master' set up to track remote branch 'master' from 'origin'.
注:当时在推送到远端仓库时遇到了以下异常:
~/Desktop/learngit(master) » git push -u origin master
ERROR: Repository not found.
fatal: Could not read from remote repository.Please make sure you have the correct access rights
and the repository exists.
可以尝试以下方法解决:
重新生成ssh-key并绑定到Github上
运行ssh-keygen -t rsa -C "wfgdlut@gmail.com"
需要替换成你自己的Github账号邮箱。
~/Desktop/learngit(master) » ssh-keygen -t rsa -C "wfgdlut@gmail.com"
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/kwang/.ssh/id_rsa):
/Users/kwang/.ssh/id_rsa already exists.
Overwrite (y/n)? y
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /Users/kwang/.ssh/id_rsa.
Your public key has been saved in /Users/kwang/.ssh/id_rsa.pub.
查看生成好的公钥文件内容,本例中的为/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 remote set-url origin git@github.com:wfg2513148/learngit.git
克隆远端仓库 - git clone [your repo url]
git clone git@github.com:wfg2513148/gitskills.git
分支
创建新分支 - git checkout -b [new branch name]
git checkout -b dev
-b
参数表示创建完立刻切换,相当于执行了以下两条命令:
git branch dev
git checkout dev
查看分支 - git branch
切换分支 - git branch [branch name]
git branch master
合并分支
Fast-forward模式 - git merge [branch name merged]
当前我们处在master分支,现在想把dev分支合并到master分支上
git merge dev
可以看到,当前合并模式是Fast-forward
,即快进模式,合并速度非常快。Git分支合并还有其他的模式。
留痕模式 - git merge --no-ff -m "no-ff merge" [branch name merged]
我们可以使用--no-ff
参数来合并,这样会保留合并历史分支的痕迹。
可以看到,dev
分支的信息被保留下来了。
删除分支
正常删除分支 - git branch -d [branch name]
git branch -d feture1
强行删除分支 - `
git branch -D [branch name]`
git branch -D feture1
临时分支
创建临时分支 - git stash
有时候我们手头的工作还没做完,代码还没有提交(add & commit
),但临时有其他事情要做,需要切换分支。这时候可以使用临时分支把当前工作进展储存起来,以便有空的时候“恢复”回来。
git stash
可以看到当前工作情况已经被储存起来了,这时候可以放心地切换分支了。
查看所有临时分支 - git stash list
git stash list
恢复临时分支内容 - git stash apply
当紧急工作做完后,重新切换回dev
分支,取回临时分支中的工作。
git stash apply
注:
git stash apply
仅仅恢复临时分支的内容,并不会主动删除stash。需要用git stash drop
来删除。
删除临时分支 - git stash drop
git stash drop
恢复同时删除临时分支 - git stash pop
git stash pop
多人协作
查看远端分支 - git remote
git remote
远端仓库默认名称是origin
查看远端分支详情 - git remote -v
git remote -v
根据当前访问权限,可以看到fetch
抓取地址以及push
推送地址。
推送分支 - git push origin master
注: 这里的
origin master
代表要将本地内容推送到远端仓库(origin
)的master
分支上。并不是所有的本地分支都要推送到远端的,推送原则:
master
主干分支,应该时刻与远端保持同步;dev
开发分支,也要保持与远端同步;bug
分支,可以保持在本地即可;feature
特性分支,是否要推送取决于你是否要跟他人协作;
拉取分支
远端仓库
git clone git@github.com:wfg2513148/gitskills.git
这时当我们查看分支时,只能看到本地的master
分支
git branch
在本地创建远端分支
git checkout -b dev origin/dev
如果在提交的时候报冲突(其他人已经提交了),可以先用git pull
抓取最新的代码,在本地合并后再推送。
如果git pull
提示no tracking information
,说明本地分支和远端分支没有链接起来,这时候可以用以下语句完成链接:
git branch --set-upstream branch-name origin/branch-name
标签管理
创建标签
标签的作用就是方便快速切换分支,创建标签也很简单,直接git tag v1.0
就可以生成一个标签。
git tag v1.0
查看所有标签
git tag
补打标签
先查出要打标签的commit id
,再运行命令补打标签。
git log --pretty=oneline --abbrev-commit
比如我们希望对conflict fiexed
补打标签,找到对应的commit id是20adf59
补打标签:
git tag v0.9 20adf59
再次查看标签:
git tag
可以看到标签并不是按照时间顺序显示的。
通过git show <tagname>
进一步查看标签内容
git show v0.9
可以用-a
指定标签名,-m
指定说明文字。
git tag -a v0.1 -m "version 0.1 released" 53fe235
再次查看标签详情git tag v0.1
:
删除标签
git tag -d v0.1
推送标签到远端分支
git push origin v1.0
一次性推送全部尚未推送的标签
git push origin --tags
删除远端标签
如果标签已经推送到远端,需要先删除本地标签:
git tag -d v0.9
然后再删除远端标签,格式如下:
git push origin :refs/tags/v0.9
结语
本文作为个人学习Git的参考资料,会不断丰富内容,也希望能够对大家有帮助。
Git学习笔记 - 钢钢更新相关推荐
- Git学习笔记:分支管理3
前言 在补习python的时候主要参考的是廖雪峰的教程Python教程,在学习完后准备完成期末作业时,遇到了一个技术难题,需要初步掌握git,因此开始了git的学习. 本教程参考廖雪峰的Git教程 G ...
- Git 的安装与初次使用 —— Git 学习笔记 03
Git 的安装与初次使用 -- Git 学习笔记 03 Git 的安装与初次使用 -- Git 学习笔记 03 安装 Git 在 Linux 上安装 在 Windows 上安装 初次运行 Git 前的 ...
- Git学习笔记使用记录
文章目录 Git学习笔记 基本 配置环境 Install 初始化workspace Git 全局设置Global Configuration: 配置账户 创建项目仓库Create project re ...
- git学习笔记(全,附命令大全)
git学习笔记(全) 注:本文参考自廖雪峰官网 下图来自Git Cheat Sheet侵删 git优点 Git是分布式版本控制系统,同一个Git仓库,可以分布到不同的机器上. Git跟踪并管理的是修改 ...
- Git 学习笔记:6 GitHub
Git 学习笔记:6 GitHub 账户的 创建和配置 SSH访问 头像 邮件地址 两步验证 对项目做贡献 派生(fork)项目 GitHub 流程 创建合并请求 利用合并请求 合并请求的进阶用法 将 ...
- git学习笔记——Linux和Windows下git的基本操作
git学习笔记--Linux和Windows下git的基本操作 github主页:https://github.com/Taot-chen 一.Linux环境 1.安装git sudo apt-get ...
- Git 学习笔记:5 分布式工作流程
Git 学习笔记:5 分布式工作流程 分布式工作流程 集中式工作流 集成管理员工作流 司令官与副官工作流 工作流程总结 向一个项目贡献 提交准则 私有小型团队 John's Machine 私有管理团 ...
- GIT学习笔记(5):变基
GIT学习笔记(5):变基rebase 变基 引入变基 在Git中整合来自不同分支的修改主要有两种方法:merge以及rebase. 整合分支最容易的方法是merge,他会把两个分支的最新快照以及两者 ...
- Git学习笔记与IntelliJ IDEA整合
2019独角兽企业重金招聘Python工程师标准>>> Git学习笔记与IntelliJ IDEA整合 一.Git学习笔记(基于Github) 1.安装和配置Git 下载地址:htt ...
- Git 学习笔记:自定义Git(完)
前言 在补习python的时候主要参考的是廖雪峰的教程Python教程,在学习完后准备完成期末作业时,遇到了一个技术难题,需要初步掌握git,因此开始了git的学习. 本教程参考廖雪峰的Git教程 G ...
最新文章
- 谷歌量子霸权论文;13项NLP任务夺冠的小模型ALBERT
- 少儿编程100讲轻松学python(三)-python如何重命名文件
- 【数据结构与算法】二叉树基本算法锦集
- Golang的调度模型
- SQLmap学习使用
- webservice接口和restful接口哪个更好?
- 不属于计算机网络的资源词,计算机网络应用试题
- 安卓rom制作教程_OPPO Reno安卓9系统如何升级ColorOS6.7最新版本-安卓10系统
- 教你如何在微信浏览器下载APP
- ios 录音后播放声音变小的解决方法
- 阿里云服务器DDoS基础防护设置及常见问题
- 这六大要素教会你挑选合适的酒店管理系统
- workitems in the coming 5 monthes.
- 2021-05-14 linux下用root 登录ftp连接
- Gitlab Runner 部署
- 国内CMS内容管理系统
- 树与二叉树——有关n叉树的若干问题
- linux心跳出血漏洞,heartbleeder 自动检测 OpenSSL 心脏出血漏洞 (附修复指南)
- 上海交通大学计算机学院导师介绍,上海交通大学计算机科学与工程系导师教师师资介绍简介-张同珍副教授...
- Cision推出全新媒体关系管理工具:更精准锁定记者与意见领袖
热门文章
- 视频码率,帧率和分辨率的联系与差别
- 载入Haskell的函数
- Opencv之获取边缘和画轮廓
- 【Prison Break】第五天(4.1)
- 实习踩坑之路:Git无法拉取最新分支代码?怎么解决?
- Linux虚拟机扩容
- JavaScript上传文件,不打断点就上传失败
- ubuntu 18.04安装php 7,如何在Ubuntu 18.04和16.04上安装PHP(7.3,7.2和7.0)?
- C++总结学习(一)
- php 单位食堂订餐,单位饭堂订餐系统(手机订餐)