Git的一些基本操作和命令
1、创建版本库
在D盘中打开Git Bash Here
1.1、创建一个空目录
Mkdir gitDemo –创建一个目录
Cd gitDemo --进入gitDemo目录
Pwd –查看当前目录的路径
1.2、通过git init命令把目录变成git可以管理的仓库
Git init
你会发现,多出一个.git文件,也可以理解成存放代码的仓库(暂存区)
1.3、把文件添加到仓库中(暂存区)
创建一个文件readme.txt,内容随便写
Git add readme.txt –将文件放入暂存区
没有提示代表成功
1.4、把文件提交到仓库中
Git commit –m ‘提交readme.txt文件’
可以通过git status 查看状态
如果有文件未提交,比如在readme.txt 中新增内容
可以通过git diff 命令查看修改的内容
如果要提交到git仓库中,你需要先add 然后再 commit
小结:
初始化一个Git仓库,使用git init命令。
添加文件到Git仓库,分两步:
使用命令git add <file>,注意,可反复多次使用,添加多个文件;
使用命令git commit -m <message>,完成。
2、理解工作区和暂存区
工作区:就是你在电脑上看到的目录,比如目录下testgit里的文件(.git隐藏目录版本库除外)。或者以后需要再新建的目录文件等等都属于工作区范畴。
版本库(Repository):工作区有一个隐藏目录.git,这个不属于工作区,这是版本库。其中版本库里面存了很多东西,其中最重要的就是stage(暂存区),还有Git为我们自动创建了第一个分支master,以及指向master的一个指针HEAD。
我们前面说过使用Git提交文件到版本库有两步:
第一步:是使用 git add 把文件添加进去,实际上就是把文件添加到暂存区。
第二步:使用git commit提交更改,实际上就是把暂存区的所有内容提交到当前分支上。
3、版本回退
3.1、查看历史记录
Git log
如果要简化上面的信息
Git log --pretty=oneline
也可以更简单
注意,上面三个图黄色部分为commitId(也就是下面所说的版本号),它是全球唯一的,reflog中的commitid是简写。
3.2、还原到指定的版本号
Git reset --hard 版本号
注意事项:还原到指定版本后,在通过git log查看,就找不到指定版本之后的信息了,如上图所示,如果想还原到指定版本之后的信息,只能通过git reflog查找,如下图所示:
4、git撤销和删除文件
4.1、撤销操作
如果我发现readme.txt新增的内容有误,但是我已经add了,还没有提交,那么我可以通过以下方法进行修改:
(1):手动改写readme.txt错误的信息,然后add—》commit。
(2):通过git reset --hard 版本号命令恢复到上一个版本。
现在有一个新方法,使用git checkout -- file 方法丢弃工作区的修改
命令 git checkout -- readme.txt 意思就是,把readme.txt文件在工作区做的修改全部撤销,将工作区的内容改为暂存区的内容。
4.2、删除文件
比如我新增了一个文件a.txt
然后我在目录里面删除a.txt(rm a.txt),我现在有三种选择:
(1):直接addàcommit提交
(2):恢复到以前版本(git reset –hard 韩本号)。
(3):撤销修改内容 git checkout – a.txt(前提是没有add)
5、创建与合并分支
在版本回填退里,你已经知道,每次提交,Git都把它们串成一条时间线,这条时间线就是一个分支。截止到目前,只有一条时间线,在Git里,这个分支叫主分支,即master分支。HEAD严格来说不是指向提交,而是指向master,master才是指向提交的,所以,HEAD指向的就是当前分支。
5.1、创建一个分支并切换到该分支(git checkout –b dev)
Git branch 查看当前分支
git checkout 命令加上 –b参数表示创建并切换,相当于如下2条命令
git branch dev :创建分支
git checkout dev:切换分支
5.2、
在文件a.txt中添加内容1111111并提交
查看master(主分支a.txt内容)
我们可以看到主分支的a.txt文件没有内容,这时候我们需要将dev分支合并到master分支上。
git merge命令用于合并指定分支到当前分支上,合并后,再查看readme.txt内容,可以看到,和dev分支最新提交的是完全一样的。
注意到上面的Fast-forward信息,Git告诉我们,这次合并是“快进模式”,也就是直接把master指向dev的当前提交,所以合并速度非常快。
合并完成后,我们可以接着删除dev分支了,操作如下:
总结创建与合并分支命令如下:
查看分支:git branch
创建分支:git branch name
切换分支:git checkout name
创建+切换分支:git checkout –b name
合并某分支到当前分支:git merge name
删除分支:git branch –d name
6、分支管理策略
通常合并分支时,git一般使用”Fast forward”模式,在这种模式下,删除分支后,会丢掉分支信息(通过日志找不到了)现在我们来使用带参数 –no-ff来禁用”Fast forward”模式。首先我们来做demo演示下:
创建一个dev分支。
修改readme.txt内容。
添加到暂存区。
切换回主分支(master)。
合并dev分支,使用命令 git merge –no-ff -m “注释” dev
查看历史记录
分支策略:首先master主分支应该是非常稳定的,也就是用来发布新版本,一般情况下不允许在上面干活,干活一般情况下在新建的dev分支上干活,干完后,比如上要发布,或者说dev分支代码稳定后可以合并到主分支master上来。
7、多人协同开发
多人协作时,大家都会往master分支上推送各自的修改。现在我们可以模拟另外一个同事,可以在另一台电脑上(注意要把SSH key添加到github上)或者同一台电脑上另外一个目录克隆,新建一个目录名字叫gitDemo1
7.1、先将分支新增一个新内容(可増可不增,方便了解分支)推送到远程库中
7.2、进入gitDemo1目录中,克隆远程库到本地
7.3、创建分支并与远程库关联:git checkout –b dev origin/dev
注意:clone过来的readme.txt文件没有dev内容的
虽然你cat readme.txt可以看到,因为clone过来的是master主线,你可以使用git pull将远程库内容拉过来
7.4、在gitDemo1/gitDemo/readme.txt文件底下新增内容aaaaaaa
7.5、将新增的内容推送到远程库dev分支上
刷新远程库地址
7.6、在d:\gitDemo目录底下拉取刚才d:\gitDemo1\gitDemo提交的修改
Git pull失败,原因是没有指定本地dev分支与远程origin/dev分支的链接(虽然前面我们使用git push origin dev推送了分支,但也需要建立连接),根据提示,设置dev和origin/dev的链接
7.7、当dev代码没有错误的时候,将dev代码合并到master中
因此:多人协作工作模式一般是这样的:
首先,可以试图用git push origin branch-name推送自己的修改.
如果推送失败,则因为远程分支比你的本地更新早,需要先用git pull试图合并。
如果合并有冲突,则需要解决冲突,并在本地提交。再用git push origin branch-name推送。
最后发布程序的时候,负责人在服务器上将远程库中的dev拉过来(git pull),然后合并到master主线上(git merge dev)。
Git基本常用命令如下:
mkdir: XX (创建一个空目录 XX指目录名)
pwd: 显示当前目录的路径。
git init 把当前的目录变成可以管理的git仓库,生成隐藏.git文件。
git add XX 把xx文件添加到暂存区去。
git commit –m “XX” 提交文件 –m 后面的是注释。
git status 查看仓库状态
git diff XX 查看XX文件修改了那些内容
git log 查看历史记录
git reset --hard HEAD^ 或者 git reset --hard HEAD~ 回退到上一个版本
(如果想回退到100个版本,使用git reset –hard HEAD~100 ,也可以不写HEAD~,直接写版本号,版本号通过日志查找)
cat XX 查看XX文件内容
git reflog 查看历史记录的版本号id
git checkout -- XX 把XX文件在工作区的修改全部撤销。
git rm XX 删除XX文件
git remote add origin https://github.com/tugenhua0707/testgit 关联一个远程库
git push –u(第一次要用-u 以后不需要) origin master 把当前master分支推送到远程库(如何推送分支,将master改成分支名字,比如:dev)
git clone https://github.com/tugenhua0707/testgit 从远程库中克隆
git checkout –b dev 创建dev分支 并切换到dev分支上
git branch 查看当前所有的分支
git checkout master 切换回master分支
git merge dev 在当前的分支上合并dev分支
git branch –d dev 删除dev分支
git branch name 创建分支
git stash 把当前的工作隐藏起来 等以后恢复现场后继续工作
git stash list 查看所有被隐藏的文件列表
git stash apply 恢复被隐藏的文件,但是内容不删除
git stash drop 删除文件
git stash pop 恢复文件的同时 也删除文件
git remote 查看远程库的信息
git remote –v 查看远程库的详细信息
git push origin master Git会把master分支推送到远程库对应的远程分支上
git pull 将远程库内容拉过来
Git的一些基本操作和命令的更多相关文章
- Git与TortoiseGit基本操作
Git与TortoiseGit基本操作 1. GitHub操作 本节先简单介绍 git 的使用与操作, 然后再介绍 TortoiseGit 的使用与操作. 先看看SVN的操作吧, 最常见的是 检出(C ...
- Git 基本概念及常用命令
一.基本概念 文件的三种状态:(任何一个文件在git中都有以下三种状态) 1) 已提交(committed):表示该文件已经被安全地保存在本地数据库中了. 2) 已修改(modified):表示修改了 ...
- 【android Studio】零git知识、零脚本命令,即刻体验git版本管理魅力!
git的优点就不去多说了.阻碍咱新手体验它的唯一问题就是门槛太高,脚本看着像天书, 本文主要阐述的,就是如何在android studio上,也能像tfs那样,非常简单的操作,就能使用git进行版本管 ...
- git 分支的基本操作
git分支的基本操作. 创建私有分支: $git branch branchName commitID $git checkout -b branchName commitID 注意: ...
- Git 基本原理与经常使用命令
平时使用过两种版本号控制软件 SVN 和 Git,平心而论,假设纯粹自己使用,那么绝对 Git 更加适合,本地库.远程库.离线工作.强大而灵活的分支.大名鼎鼎的Github, 这些都是选择 Git 的 ...
- git 安装 和 基本操作
林纳斯的小故事 感兴趣的同学可以自己百度一下 版本控制常用svn git @@@svn 1 搭建环境 server:visualSVN Serverserver port: https 默认443ht ...
- Git 配置环境及常用命令整理
一.Git教程网站 廖雪峰网站 易百GitHub命令:https://www.yiibai.com/git/git_clone.html 完成Windows环境命令下Git config配置 设置好之 ...
- Git 学习笔记–基本操作
Git 与 SVN 不同,是分布式的版本控制系统,不需要主服务器即可工作,实际中为了方便各个工作者间同步工作,通常还是会设置主服务器. Git的设置及初始化: 设置全局用户信息: luojiahu@u ...
- Git学习笔记(一)Git初识及基本操作
详细完整教程:官方文档,廖神Git教程,武sir 一.什么是Git? 定义:Git是分布式版本控制系统. 1.1什么是版本控制 我们可以回想以下,在我们上学毕业要写论文或是准备一份演讲稿的时候,都会用 ...
随机推荐
- [HEOI2012]采花
第一眼以为是树套树qwq 然而n,m<=1e6 记上一个与i颜色相同的位置为nxt[i] 考虑i和nxt[i]会对那些询问产生贡献. 发现当右端点R>=i时, 左端点只要满足nxt[nxt ...
- thinkphp3.2导出
public function test() { set_time_limit(0); ini_set('memory_limit', '500M'); //导入PHPExcel类库,因为PHPExc ...
- dp练习(2)——老鼠的旅行
1267 老鼠的旅行(来源:codevs) #include "bits/stdc++.h" using namespace std; ][]; ][]; int main() { ...
- Oracle外部表的管理和应用
外部表作为oracle的一种表类型,虽然不能像普通库表那么应用方便,但有时在数据迁移或数据加载时,也会带来极大的方便,有时比用sql*loader加载数据来的更为方便,下面就将建立和应用外部表的命令和 ...
- curl常用功能
<?php //创建一个新cURL资源 $ch = curl_init(); //******************************************************** ...
- 文件属性,获取,设置文件属性chown stat函数
转载:http://c.biancheng.net/cpp/html/326.html man 2 stat查看手册 int stat(const char *path, struct stat *b ...
- 014PHP文件处理——文件指针控制fseek rewind ftell feof fpassthru
<?php /** * 文件指针控制fseek rewind ftell feof fpassthru */ //feof()判断文件读取是否超出文件长度 /*$file = fopen('a. ...
- [转]VirtualBox中的网络连接方式详解
如果出现主机无法ping通虚拟机的情况,请首先确认虚拟机防火墙已关闭. 一.NAT模式 特点: 1.如果主机可以上网,虚拟机可以上网 2.虚拟机之间不能ping通 3.虚拟机可以ping通主机(此时p ...
- delphi中使用MSWINSCK.OCX控件
1.首先是把winsck控件导入到delphi中,就是导入一个ActiveX控件,步骤略过. 2.将导入的winsck控件拖入你的Form中. 3.对winsck进行基本设置(IP,Port). 4. ...
- XML——Schema
body, table{font-family: 微软雅黑; font-size: 10pt} table{border-collapse: collapse; border: solid gray; ...