Git命令详解及工作实用流程
Git基本使用
- 1.什么是Git
- 1.1 Git简介
- 1.2Git的优点
- 2.Git和SVN的区别
- 3.Git常用命令
- 3.1 设置用户签名
- 3.2 初始化本地库
- 3.3 查看本地库状态
- 3.3.1首次查看(工作区没有任何文件)
- 3.3.2 新增文件(hello.txt)
- 3.4 添加暂存区
- 3.5 提交本地库
- 3.6 修改文件
- 3.7 历史版本
- 3.7.1 版本穿梭
- 4.Git分支操作
- 4.1 git查看、创建和切换分支
- 4.2 git合并分支(正常合并)
- 4.3 git合并分支(合并冲突)
- 4.4 删除分支
- 4.4.1 删除本地分支
- 4.4.2 删除远程分支
- 5.GitHub远程仓库
- 5.1 GitHub的使用
- 5.2 推送文件到远程仓库
- 5.3 从远程仓库上拉取文件
- 5.3.1. git clone
- 5.3.2 git fetch
- 5.3.3 git pull
- 6. 一般开发流程操作
- 6.1文件操作和状态
- 6.2 一般开发流程
- 参考资料
1.什么是Git
1.1 Git简介
- Git是一个开源分布式版本控制系统,用于敏捷高效地处理任何或大或小的项目。
- Git是李纳斯·托沃兹( Linus Torvalds )为了帮助管理Linux内核开发而开发的一个开放源码的版本控制软件。
- Git和常用的版本控制工具CVS,Subversion等不同,它采用了分布式版本库的方式,不必服务器端软件支持。
1.2Git的优点
- 大部分操作在本地完成,不需要联网
- 速度快、灵活
- 尽可能添加数据而不是删除或者修改数据
- 分支操作非常快捷流畅
- 与Linux命令全面兼容
2.Git和SVN的区别
- SVN是集中式版本控制系统,版本库是集中放在中央服务器的,而工作的时候,用的都是自己的电脑,所以首先要从中央服务器得到最新的版本,然后工作,完成工作后,需要把自己完成的版本提交到中央服务器。集中式版本控制系统是必须联网才能工作,对网络带宽要求较高。
- Git是分布式版本控制系统,没有中央服务器,每个人的电脑就是一个完整的版本库,工作的时候不需要联网,因为版本都在自己的电脑上。协同的方法是这样的:比如说自己在电脑上修改了文件A,其他人也在电脑上修改了文件A,这时,你们之间只需把各自的修改推送给对方,就可以互相看到对方的修改了。
- Git工作机制
3.Git常用命令
命令名称 | 作用 |
---|---|
git config --global user.name 用户名 | 设置用户签名 |
git config --global user.email 邮箱 | 设置用户签名 |
git init | 初始化本地库 |
git status | 查看本地库状态 |
git add 文件名 | 添加到暂存区 |
git commit -m “日志信息” 文件名 | 提交到本地库 |
git tag | 查看本地所有tag |
git reflog | 查看历史命令 |
git log | 查看历史提交 |
3.1 设置用户签名
签名的作用是区分不同操作者的身份。用户的签名信息在每个版本的提交信息中能够看到,以此确认本次是谁提交的。Git首次安装必须设置用户签名,否则无法提交代码。
3.2 初始化本地库
3.3 查看本地库状态
3.3.1首次查看(工作区没有任何文件)
3.3.2 新增文件(hello.txt)
文件红色说明还没提交到暂存区,如果提交到暂存区会变成绿色。
3.4 添加暂存区
添加到暂存区后,文件会变成绿色。如要删除暂存区的文件,使用 git rm --cached file ,只是在暂存区删除,不会删除本地工作区上的文件。
3.5 提交本地库
3.6 修改文件
修改文件后,再次查看状态,检测到文件已经被修改。
重新提交
3.7 历史版本
git reflog 查看版本信息
git log 查询版本详情信息
3.7.1 版本穿梭
git reset --hard 版本号 版本穿梭
reset是重置代码仓库版本
有三种模式
– soft、–mixed和–hard是三个恢复级别
Git切换版本,底层其实是移动head指针。
4.Git分支操作
命令名称 | 作用 |
---|---|
git branch 分支名 | 创建分支 |
git branch -v | 查看分支 |
git checkout 分支名 | 切换分支 |
git checkout -b 分支名 | 创建并切换到分支 |
git merge 分支名 | 把指定分支合并到当前分支上 |
4.1 git查看、创建和切换分支
4.2 git合并分支(正常合并)
在ypj分支修改了hello.txt,然后再master分支合并
4.3 git合并分支(合并冲突)
产生冲突的表现:后面的状态为 (MERGING)
pj@DESKTOP-R08NI28 MINGW64 /e/workspace/git (ypj|MERGING)
冲突产生的原因:合并分支时,两个分支在同一个文件的同一个位置有两套完全不同的修改,Git无法替我们决定使用哪个,必须人为决定新代码内容。
4.4 删除分支
4.4.1 删除本地分支
本地分支是本地机器的分支,不会影响任何远程分支
git branch -d 分支名 删除本地分支
无法删除当前所在和查看的分支,如果要这样做,会提示有如下所示错误:
$ git branch -d ypj
error: Cannot delete branch 'ypj' checked out at 'E:/workspace/git'
因此,在删除本地分支之前,需要使用git checkout命名切换到你不想删除的另一个分支:
如果分支包含未合并的更改和未推送的的提交,则该-d标志将不允许删除本地分支。
这是因为任何其他分支都看不到提交,并且Git正在保护以免意外丢失任何提交数据。
如果执行这个操作,Git会显示一个错误:
如错误所提示,需要改用该-D标志
git branch -D 分支名
-D是 --delete --force 的意思,表示会强行删除本地分支,无论其合并状态如何。
但请注意,应该谨慎使用此命令,因为没有提示要求确定你的操作,仅当你绝对确定要删除本地分支时才使用它。
使用–merged与–no-merged可以查看列表合并或未合并到当前分支的分支。
git branch --merged 查看已经合并到当前分支
git branch --no-merged 查看未合并工作的分支
4.4.2 删除远程分支
远程分支与本地分支是分开的。它们是托管在远程服务器的存储库,与本地分支相比,本地分支是本地系统上的存储库。
git push origin -d 远程分支名
5.GitHub远程仓库
命令名称 | 作用 |
---|---|
git remote -v | 查看当前所有远程地址别名 |
git branch -r | 查看远程所有分支 |
git branch -a | 查看本地和远程的所有分支,远程分支会用红色表示 |
git remote add 别名 远程地址 | 起别名 |
git push 别名 分支 | 推送本地分支上的内容到远程仓库 |
git clone 远程地址 | 将远程仓库的内容克隆到本地 |
git pull 远程仓库地址别名 远程分支名 | 将远程仓库对于分支最新内容拉下来后与当前分支直接合并 |
5.1 GitHub的使用
首先注册GitHub账号
在本地创建一个ssh的key,因为GitHub是使用ssh服务进行通讯的
ssh -keygen -t rsa -C "your_email@example.com"
-t 指定密钥类型,默认是rsa,可以省略
-C 设置注释文字,比如邮箱
-f 指定密钥文件存储文件名,一般我们默认,让存储到默认路径以及默认文件名它会要求输入Enter file in which to save the key (/home/stephenzhou/.ssh/id_rsa)
这里是生成的sshkey文件名,我们可以回车使用默认文件名
除此之外还会让你输入Created directory ‘/home/stephenzhou/.ssh’.
Enter passphrase (empty for no passphrase):这个密码会在让你push提交时候要输入的,除了git登录密码,还要输入这个密码,直接回车则空密码,这里我们直接回车
接着会让你在此输入密码,验证这里依旧回车Enter same passphrase again:
生成之后你就会看到这样的界面:
使用以下命令查看生成的sshcd ~/.ssh ls
id_rsa是私钥,id_rsa.pub是公钥,ssh采用的是非对称加密。接着在GitHub添加你的公钥
这样ssh就添加成功了!
5.2 推送文件到远程仓库
git remote add origin https://github.com/Pj-ship-it/git-demo.git
error: remote origin already exists.出现这个报错说明已经存在origin远程库
git remote -v 查看远程库信息 git remote rm origin 删除关联的origin远程库
删除后,重新关联远程仓库。
然后使用git push推送到远程库
git push -u origin master
参数解析:
push:将本地仓库与远程仓库合并。
-u:将本地仓库分支与远程仓库分支一起合并,就是说将master的分支也提交上去,这样你就可以在远程仓库上看到你在本地仓库的master中创建了多少分支,不加这个参数只将当前的master与远程的合并,没有分支的历史记录,也不能切换分支。
origin:远程仓库的意思,如果这个仓库是远程的那么必须使用这个选项。
master:提交本地matser分支仓库。
当出现以上情况可以用git config --global http.proxy 设置http代理 git config --global --unset http.proxy 取消设置http代理
5.3 从远程仓库上拉取文件
命令名称 | 作用 |
---|---|
git clone 远程地址 | 将远程仓库的内容克隆到本地 |
git clone -b 分支名 | 克隆指定分支的内容到本地 |
git fetch 远程主机名 | 将远程主机的更新全部取回本地 |
git fetch 远程主机名 分支名 | 取回特定分支的更新 |
git pull 远程主机名 远程分支名:本地分支名 | 将远程主机的某个分支的更新取回,并与本地指定的分支合并 |
5.3.1. git clone
当我们远程有仓库时,想要关联到本地只需要使用git clone就可以,新建一个空目录,不要git init,使用git clone会自动帮我们初始化。还可以使用git clone -b 远程分支名
拉取指定分支,例如最常用的git clone -b master
.
5.3.2 git fetch
git fetch
和git pull
这两条指令都是我们更新代码的时候所使用的,所以和很多人搞不清楚这两者间的区别,先用一张图来理解一下这两条指令的概念:
git fetch 远程主机名
是将远程主机的最新内容拉到本地,用户在检查了以及决定是否合并到工作本机分支中。通常是用来查看其他人的进程,因为它取回的代码对你本地的开发代码没有影响。
默认情况下,git fetch
取回所有分支(branch)的更新。如果只想取回特定分支的更新,可以指定分支名。
git fetch 远程主机名 分支名
比如,取origin主机的master分支
git fetch origin master
取回的更新,在本地主机要用“远程主机名/分支名”的形式读取。比如origin
主机的master
,就要用origin/master
读取。取回远程主机的更新以后,可以在它的基础上,使用git checkout -b
命令创建一个新的分支。
git checkout -b 新的分支 origin/master
上面命令表示,在origin/master
的基础上,创建一个新分支。
此外,也可以使用git merge
或者git rebase
,在本地分支合并远程分支。
git merge origin/master
git rebase origin/master
5.3.3 git pull
git pull
是将远程主机的最新内容拉下来后直接合并,即:git pull = git fetch + git merge
,这个可以会产生冲突,需要手动解决。
git pull 远程主机名 远程分支名:本地分支名
比如,取回origin
主机的dev
分支,与本地的maste
r分支合并
git pull origin dev:master
如果远程分支是与当前分支合并,则冒号后面的部分可以省略。
git pull origin dev
上面命令表示,取回origin/dev
分支,再与当前分支合并。实质上,等同于先做git fetch
,在做git merge
。
git fetch origin
git merge origin
在某些场合,Git会自动在本地分支与远程分支之间,建立一种追踪关系(tracking)。比如,在git clone
的时候,所有本地分支默认与远程主机的同名分支,建立追踪,也就是说,本地的master
分支自动“追踪”origin/master
分支。
Git也允许手动建立追踪关系。
git branch --set-upstream master origin/dev
上面命令指定master
分支追踪origin/dev
分支。
如果当前分支与远程分支存在追踪关系,git pull
就可以省略远程分支名。
如果合并需要采用rebase模式,可以使用--rebase
选项。
git pull --rebase 远程主机名 远程分支名:本地分支名
如果远程主机删除了某个分支,默认情况下,git pull
不会在拉取远程分支的时候,删除对应的本地分支。这是为了防止,由于其他人操作了远程主机,导致git pull
不知不觉删除了本地分支。
但是,你可以改变这个行为,加上参数-p
就会在本地删除远程已经删除的分支。
git pull -p
等同于下面的命名
git fetch --prune origin
git fetch -p
6. 一般开发流程操作
6.1文件操作和状态
现在执行git add . 或 git add 文件名,文件将提交到暂存区,从这里开始追踪状态,以下操作均以此为基础。
此时如果想把文件从暂存区移除,但是文件保存在工作区,也就是从追踪单中删除,要执行:git rm --cached 文件名。
如果想把文件从暂存区和工作区都删除,要执行:git rm -f 文件名。
此时修改了文件,在未git add/rm前撤销修改,要执行:git checkout –* 或git checkout --文件名(其实是用版本库覆盖工作区的修改)。
如果已经做了git add,但为commit前想撤销,要执行git reset HEAD . 或git reset HEAD 文件名。
如果已经做了git rm,但还没commit前想撤销,要执行:git checkout – 文件名。现在已经执行了commit,假设执行git log,找到这次提交的commit_id。
此时想取消这次commit,但是所做的修改不取消,要执行:git reset <commit_id>
此时想取消这次commit,且不保留commit之前修改的代码,直接恢复commit前对应的这个commit_id版本,要执行git reset --hard <commit_id>。现在已经执行了push
此时想让远程库回退到指定的版本,要执行:git reset --hard <commit_id>,然后执行git push -f origin 分支名。
6.2 一般开发流程
远程分支拉取到本地
- 新建文件夹myProject (假设远程分支叫dev)
- 进入myProject,执行git init (初始化git信息)
- 执行git remote add origin https://xxx.git (建立关联)
- 执行git fetch origin dev (拉取代码)
- 执行git checkout -b dev origin/dev (新建本地分支对应远程分支,并切换到这个分支)
- 执行git pull origin dev
开始开发后:
- 提交到暂存区 git add 文件名 或 git add .
- 提交到版本库 git commit -m “注释信息”
- 拉取远程库代码,解决冲突 git pull origin 远程分支名
- 更新后推送到远程库 git push origin 远程分支名 或 git push
参考资料
关于Git这一篇就够了
git-程序员常用命令
Git远程操作详解
Git官方文档
尚硅谷Git入门到精通全套教程
Git命令详解及工作实用流程相关推荐
- git命令详解( 四 )
此篇为git命令详解的第四篇,话不多说,我们直接上知识点好吧 git Push 偏离的工作 gitPush: 此命令负责将你的变更上传到指定的远程仓库,并在远程仓库上合并你的新提交记录.一旦 git ...
- java开发中常用的Git命令详解
java开发中常用的Git命令详解(IDEA内如何操作) 一:写这篇文章的目的是什么? 二:使用场景在哪里? 1:当我们要使用idea去git仓库拉代码时,首先我们的idea得配置git工具 2:项目 ...
- GitHub使用教程详解(下)——Git的安装以及Git命令详解
上一篇GitHub使用教程详解(上)--官网操作指南[翻译],是针对官网的guide进行了翻译,其实个人来说,我是很不喜欢那么操作的,又要等待页面加载,操作又慢!程序员嘛,还是直接敲入命令代码更迅速高 ...
- git 命令详解_再次学习Git版本控制工具
微信公众号:PHP在线 Git 究竟是怎样的一个系统呢?为什么在SVN作为版本控制工具已经非常流行的时候,还有Git这样一个版本控制工具呢?Git和SVN的区别在哪儿呢?Git优势又在哪呢?下面PHP ...
- awk命令详解【非常实用】
shell三剑客:grep.sed.awk cut -c:字符数来截取 character -f:字段来截取 field -d:指定分隔符 默认是tab awk命令详解 awk其实可以看做一种编程语言 ...
- linux less命令详解(9个实用案例演示)
1. 前言 本文主要讲解linux less命令,详细解释该命令的作用与演示相关用法. Do more with less. 学习在Linux中使用less的命令来查看大文件和跟踪日志文件.在本教程中 ...
- linux less 快捷键,Linux less命令详解(9个实用案例演示)
1. 前言 本文主要讲解linux less命令,详细解释该命令的作用与演示相关用法. Do more with less. 学习在Linux中使用less的命令来查看大文件和跟踪日志文件.在本教程中 ...
- 【Git版本控制】Git命令详解
文章目录 前言 1.展示帮助信息 2.回到远程仓库的状态 3.重设第一个 commit 4.查看冲突文件列表 5.展示工作区和暂存区的不同 6.展示暂存区和最近版本的不同 7.展示暂存区.工作区和最近 ...
- git命令详解( 三 )
此篇为git命令的第三篇 目录 git Pull 模拟团队合作 Git Pull 在上一篇的结尾我们已经知道了如何用 git fetch 获取远程的数据, 现在我们学习如何将这些变化更新到我们的工作当 ...
最新文章
- Nature:肠道菌群代谢物调节肠道与免疫
- ajax返回304,jquery $ajax GET请求在IE浏览器兼容中遇到的304 cache请求的经验分享
- MySQL row_format引发的案例一则
- 本地连接出来的很慢解决方法
- 爬虫工具——Selenium和PhantomJS
- Dev-C++ 5.11安装教程
- ubuntu系统和ROS系统的版本对应关系
- PHP svn开发环境搭建,手把手搭建WAMP+PHP+SVN开发环境,wampsvn_PHP教程
- 线程池的 RejectedExecutionHandler(拒绝策略)
- nonzero的用法一则例子
- ai创造了哪些职业_关于创造职业的思考
- instanceof的用法①
- C++中10的N次方如何表示
- GIS应用技巧之景观格局分析(四)
- Mac运行Win 10画面出问题?教你如何修复这个问题
- windows版微信多开
- 拼多多数据分析面试题大合集(20个)
- 接口练习:猫狗案例扩展跳高功能
- Javad 方法,方法的重载,递归,类,类的构造方法
- yum安装报错:“Could not resolve host: mirrors.aliyun.com; Unknown error“--:-- ETA Trying