Git复习(十一)之常见命令用法
创建版本库
git init
进入一个文件,执行该命令此时目录下多了一个.git
的目录,这个目录是Git来跟踪管理版本库的,没事千万不要手动修改这个目录里面的文件,不然改乱了,就把Git仓库给破坏了。如果你没有看到.git
目录,那是因为这个目录默认是
隐藏的,用ls -ah
命令就可以看见。
添加文件到Git仓库
第一步:添加到暂存区
git add xxx
xxx可以是“.”表示所有文件,也可以是指定的文件名,该命令可反复多次使用,添加多个文件
⚠️如果此时添加失败,可能是这个文件被.gitignore忽略了,如果我们确实想添加该文件可以使用参数 -f
强制添加文件
git add -f xxx
第二步:提交到仓库
git commit -m "xxx"
xxx是本次提交的说明,可以输入任意内容,当然最好是有意义的,这样你就能从历史记录里方便地找到改动记录。
执行完该命令可能会提示:
1 file changed
:1个文件被改动2 insertions
:插入了两行内容
⚠️如果不用git add
到暂存区,那就不会加入到commit
中
查看当前工作区的状态
git status
执行完该命令可能会提示:
Changes not staged for commit(还没有准备提交的修改)
查看修改内容
情况一:查看当前文件的修改
git diff xxx
xxx想要查看修改的文件名
情况二:查看当前版本和版本库最新版本的区别
git reset HEAD -- xxx
xxx想要查看修改的文件名
查看提交历史
git log
命令显示从最近到最远的提交日志,可以通过git log来确定要回退到哪个版本
git log --pretty=oneline
嫌输出信息太多,看得眼花缭乱的,可以试试加上--pretty=oneline
参数
⚠️你看到的一大串类似1094adb...
的是commit id
(版本号)
版本回退(已经commit,回到某一个commit)
git reset --hard xxx
xxx表示版本号或者HEAD
情况一:回退到上一个版本
git reset --hard HEAD^
情况二:回退到上上一个版本
git reset --hard HEAD^^
情况三:回退到上100个版本
git reset --hard HEAD~100
首先,Git必须知道当前版本是哪个版本,在Git中,用HEAD
表示当前版本,也就是最新的提交1094adb...
(注意我的提交ID和你的肯定不一样),上一个版本就是HEAD^
,上上一个版本就是HEAD^^
,当然往上100个版本写100个^
比较
容易数不过来,所以写成HEAD~100
。
情况四:回退到回退之前的版本
git reset --hard xxx
xxx是想要回退的那个版本的commit id(版本号),其余三个情况也可以不使用HEAD,使commit id
两种方法取到该版本号:
只要上面的命令行窗口还没有被关掉,你就可以顺着往上找啊找啊
使用git reflog查看命令历史找到该版本号
撤销修改
情况一:已修改,未暂存,回退到最近一次commit(修改看不见了)
git checkout -- xxx
xxx可以是“.”也可以是指定文件名,此操作其实就是丢弃对工作区的修改
情况二:已修改,已暂存,回退到最近一次add
git checkout -- xxx
xxx可以是“.”也可以是指定文件名,这种情况是git add后又做了修改,想要回退到add
情况三:已修改,已暂存,未提交,回退到工作区(修改保留在工作区)
git reset HEAD xxx
xxx可以是“.”也可以是指定文件名,此时可以使用git checkout丢弃对工作区的修改
情况四:已修改,已暂存,已提交,回退到上一个commit
git reset --hard HEAD^
从版本库删除文件
git rm xxx
xxx是文件名,命令git rm
用于删除一个文件。如果一个文件已经被提交到版本库,那么你永远不用担心误删,但是要小心,你只能恢复文件到最新版本,你会丢失最近一次提交后你修改的内容。
删除文件
rm xxx
xxx是文件名,只是删除本地
接下来有两个选择:
确实要从版本库中删除该文件:git rm xxx -> git commit
删错了恢复到最新版本:git checkout -- xxx
查看命令历史
git reflog
关联本地仓库和远程仓库
情况一:先在本地创建了一个仓库,然后在远程也创建了一个仓库,现在想要将他们关联,也就是先有本地库,然后有远程库
git remote add origin xxx
xxx是远程仓库地址,origin是远程仓库名字(默认)
情况二:先在远程创建一个仓库,然后从远程库克隆
从远程库克隆
git clone xxx
xxx是远程仓库地址
创建分支
情况一:从本地已存在的分支创建一个新的分支(相当于克隆当前本地分支)
方法一:
git branch xxx
xxx是分支名,这种方法创建的分支并不会切换分支,还是在当前分支
方法二:
git checkout -b xxx
xxx是分支名,这种方法创建的分支会切换分支,在新创建的分支
情况二:从远程已存在的分支创建一个新的分支(相当于克隆远程分支到本地)
git checkout xxx1 -b xxx2
xxx1是远程分支名,xxx2是本地分支名
假设一:该分支是我们自己在远程库创建的
xxx1和xxx2不同名:那么相当于我们在本地基于该远程分支新创建了一个分支,之后提交操作都会提交到我们新创建的这个分支的远程分支上
xxx1和xxx2同名:相当于我们在本地创建了该远程分支的本地分支,并与之关联,之后提交操作都会提交到该远程分支上
假设二:该分支是其他人在远程库创建的(多人合作开发)
xxx1和xxx2不同名:那么相当于我们在本地基于该远程分支新创建了一个“自己”的分支,只有我们自己用,提交不会有冲突
xxx1和xxx2同名:相当于我们在本地创建了该远程分支的本地分支,并与之关联,之后提交操作都会提交到该远程分支上,因为大家都是从该分支创建的本地分支,然后提交,所以可能会出现冲突
切换分支
git checkout xxx
xxx是分支名
查看分支
情况一:查看本地分支
git branch
该命令会列出本地所有分支,当前分支前面会标一个*
号
情况二:查看远程分支
git branch -r
该命令会列出远程所有分支
合并分支
情况一:快速合并(不会创建新的提交,分支合并图中看不出来曾经做过合并)
git merge xxx
xxx是分支名,该命令会将xxx合并到当前分支
如果没有冲突,执行该命令会提示 Fast-forward,Git告诉我们,这次合并是"快进模式",也就是直接把
master
指向dev
的当前提交,所以合并速度非常快。当然,也不是每次合并都能Fast-forward
,
情况二:非快速合并(创建新的提交,分支合并图中可以看出来曾经做过合并)
git merge --no-ff -m "merge with no-ff"
xxx
xxx是分支名,该命令会将xxx合并到当前分支
--no-ff表示强制禁用Fast forward
模式,因为本次合并要创建一个新的commit,所以加上-m
参数,把commit描述写进去。
删除分支
情况一:分支已经被合并
git branch -d xxx
xxx是分支名
情况一:分支没有被合并
git branch -D xxx
xxx是分支名,强制删除分支
注意;删除分支前要先切换到其他分支,在删除想要删除的分支
查看分支合并图
git log --graph
可以添加参数 --pertty=oneline和 --abbrev-commit
推送分支
git push origin xxx
xxx是分支名,推送分支,就是把该分支上的所有本地提交推送到远程库。推送时,要指定本地分支,这样,Git就会把该分支推送到远程库对应的远程分支上,并不是一定要把本地分支往远程推送
抓取分支(就是创建分支的情况二)
git checkout -b branch-name origin/branch-name
暂存工作现场
git stash
⚠️我们知道分支的更改不提交是没办法切换分支的,但是现在我就是不想提交当前分支的修改切换分支,如何实现呢?就是使用该命令!!!,可以多次stash,恢复的时候,先用git stash list
查看,然后恢复指定的stash
查看暂存内容
git stash list
执行该命令可以查看暂存内容列表
恢复工作现场
情况一:恢复工作现场并删除stash内容
git stash pop
情况一:恢复工作现场不删除stash内容
git stash apply stash@{0}
stash@{0}是指定的stash,可选的
删除暂存内容
git stash drop
清除暂存列表
git stash clear
复制特定提交到当前分支
git cherry-pick xxx
xxx是commit id,执行该命令Git自动给当前分支做一次提交,假如我们在a分支上做了修改并提交,我希望b分支上也有这次修改:
获取a分支此次修改提交的commit id
切到b分支
执行git cherry-pick commit id
案例:
$ git branch
* dev
master
$ git cherry-pick 4c805e2
[master 1d4b803] fix bug 101
1 file changed, 1 insertion(+), 1 deletion(-)
Git自动给dev分支做了一次提交,注意这次提交的commit是1d4b803
,它并不同于master的4c805e2
,因为这两个commit只是改动相同,但确实是两个不同的commit。用git cherry-pick
,我们就不需要在dev分支上手动再把修
bug的过程重复一遍。
查看远程库信息
git remote
执行该命令输出 origin ,远程仓库的默认名称是origin
。可以添加参数 -v 查看更加详细的信息
git remote -v
执行该命令显示可以抓取和推送的origin
的地址。如果没有推送权限,就看不到push的地址:
origin git@github.com:michaelliao/learngit.git (fetch)
origin git@github.com:michaelliao/learngit.git (push)
建立本地分支和远程分支的关联
git branch --set-upstream branch-name origin/branch-name
拉取服务器最新代码
情况一:当前本地分支和远程分支已经关联
git pull
情况二:当前本地分支和远程分支没有关联
方法一:直接拉取指定的远程分支
git pull origin xxx
方法二:先建立当前本地分支和远程分支的关联在拉取
git branch --set-upstream-to=branchname origin/branchname
再执行
git pull
创建标签
情况一:给当前的版本创建标签
git tag xxx
xxx是标签的名字,eg:v1.0
情况二:给指定的版本创建标签
git tag xxx1 xxx2
xxx1是标签的名字,eg:v1.0,xxx2是commit id
情况三:创建带有说明的标签
git tag -a xxx1 -m "xxx2" xxx3
xxx1是标签名,xxx2是说明,xxx3是commit id可选
查看标签列表
git tag
显示标签列表,标签不是按时间顺序列出,而是按字母排序的
查看标签信息
git show xxx
xxx是标签名
删除标签
情况一:删除本地标签
git tag -d xxx
xxx是标签名
情况一:删除远程标签
1、先删除本地标签
git tag -d xxx
2、再删除远程标签
git push origin :refs/tags/xxx
xxx是标签名
推送标签
情况一:推送指定标签到远程
git push origin xxx
xxx是标签名
情况一:推送所有未推送的标签到远程
git push origin --tags
Git复习(十一)之常见命令用法的更多相关文章
- GIT权威手册及常用命令用法
http://git-scm.com/book/zh Git Stash用法 http://www.cppblog.com/deercoder/archive/2011/11/13/160007.ht ...
- Git 分布式版本控制的常见命令
Git 的作用: (1)方便多人协同开发; (2)方便版本控制 Git 分布式版本控制的主要区域及命令图,下面会详细讲解: 创建项目并将切换至项目目录下 1. 创建本地仓库: git init ...
- git 命令用法 流程操作
Git 是一款免费的.开源的.分布式的版本控制系统.旨在快速高效地处理无论规模大小的任何软件工程. 每一个 Git克隆 都是一个完整的文件库,含有全部历史记录和修订追踪能力,不依赖于网络连接或中心服务 ...
- Git常见命令整理
Git常见命令整理 + 注释 git init # 初始化本地git仓库(创建新仓库) git config --global user.name "xxx" # 配置用户名 gi ...
- git常见命令
总结自己的Git常用命令 使用git也有一段时间了,把自己常用的命令用自己的描述记录起来,方便自己备忘也方便其他人参考. 目录: 最基本的命令: git clone 拷贝并跟踪远程的master分支. ...
- git 常见命令,规范 整理
move commit to stage area(把本地的1个commit还原到 暂存区) git reset --soft HEAD~1 把其他的commit的合并到现在到分支:git cherr ...
- pm2常用的命令用法介绍
pm2 是一个带有负载均衡功能的Node应用的进程管理器.当你要把你的独立代码利用全部的服务器上的所有CPU,并保证进程永远都活着,0秒的重载, PM2是完美的,下面我们来看pm2常用的命令用法介绍吧 ...
- 后端程序员必备的 Linux 基础知识+常见命令(近万字总结)
大家好!我是 Guide 哥,Java 后端开发.一个会一点前端,喜欢烹饪的自由少年. 今天这篇文章中简单介绍一下一个 Java 程序员必知的 Linux 的一些概念以及常见命令. 如果文章有任何需要 ...
- Git的使用以及常用命令(详解)
一. 版本控制工具 什么是版本控制系统? 版本控制系统(Version Control System):是一种记录一个或若干文件内容变化,以便将来查阅特定版 本修订情况的系统.版本控制系统不仅可以应用 ...
随机推荐
- leetcode-hard-array-11 Container With Most Water -NO
mycode time limited class Solution(object): def maxArea(self, height): """ :type hei ...
- js如何获取鼠标位置
获取鼠标位置,首先需要加载js文件: 然后设置一个div,给定大小: 最后进行具体操作: //首先要先设置一个div,给定大小 <div id="m"></div ...
- vsftpd 配置上传失败553
1查看ftp服务 ftp://ftpuser:123456@10.11.102.58:8023 2 getsebool -a | grep ftp 临时关闭 [root@xuegod63~]# get ...
- linux 文件锁flock,lockf,fcntl
1.flock,lockf,fcntl之间区别 先上结论:flock是文件锁,锁的粒度是整个文件,就是说如果一个进程对一个文件加了LOCK_EX类型的锁,别的进程是不能对这个文件加锁的. lockf是 ...
- pandas之数据处理操作
1.pandas对缺失数据的处理 我们的数据缺失通常有两种情况: 1.一种就是空,None等,在pandas是NaN(和np.nan一样) 解决方法: 判断数据是否为NaN:pd.isnull(df) ...
- 七十九:flask.Restful之flask-Restful标准化返回参数示例
接上一篇的代码和数据 对于复杂结构的数据如果只是定义单一结构的话返回的数据就没意义了,此时定义的数据结构需精确到所有数据的每一个字段有时候要返回的数据结构中,会有比较复杂的数据结构,证实后可以使用一些 ...
- 麦香牛肉(dp 、数论)
麦香牛肉 时间限制: 1 Sec 内存限制: 128 MB 题目描述 农夫约翰的奶牛几乎要武装暴动,因为他们听说麦当劳要推出新产品麦香牛肉.奶牛们要尽力阻止这种产品的上市.他们研究了一种“劣等包装” ...
- linux下抓取tomcat相关内存、线程、文件句柄等快照,用于故障排除。
以下脚本推荐放在定时任务里,写好cron表达式,在不影响业务系统的情况下dump一些信息分析系统性能瓶颈以及故障排除. 因为每次dump的时候jvm会暂停(几秒到几十秒不等).所以在生产系统使用时慎用 ...
- Python3 Selenium自动化web测试 ==> 第三节 常用WebDriver API使用示例上(24个API)
前置步骤: 安装selenium,chrome驱动,Python3.6 学习目的: 常见API的使用 涉及的API: step1: 访问一个网址 step2: 网页的前进和后退 step3: 刷新当前 ...
- matlab多图排列
代码如下: clear; img = imread('C:\\Users\\admin\\Desktop\\original_img3\\testimg\\messi.jpg'); subplot(2 ...