git入门---30分钟学会使用git
来源:互联网 发布:淘宝金牌卖家入口 编辑:程序博客网 时间:2024/05/10 03:52
在开始学习git之前,让我们看一下这个故事。
小张是一个未毕业程序员,最近在做一个小项目练习,在日常开发中为了能使每天编写/修改的代码能够保存。小张每天睡觉之前会把今天的代码备份起名 xxxx.xx.xx(年月日)。这样就能记录每天的工作,防止那天出现错误,能够回退到前一天的代码。小张知道这有一个问题如果上午写的代码正常,下午出现了大片的错误,只能回到昨天的版本,等于一个早上的代码白写了,小张觉得只要自己备份的频率频繁些就好了。刚开始这种方法还挺不错的,除了太占内存。还解决了一些问题,十天前小张的有个模块写的不错,后来修改修改
导致代码面目全非,还好备份直接恢复,照常运行,小张心里可高兴了。
之后,小张参加了学校的比赛,需要和队友配合一起完成,刚开始每人各自负责自己的模块,最后相互引用增加的文件就可以了,不过随着比赛的进行(小张这次参加了一个时间周期比较长的比赛)和队友之间工作交叉很多(两人修改了同一个文件里的方法,变量)。这下可苦恼了小张和他的队友。只能每次修改之前相互询问,我要修改x.c这个文件了,修改完了给你说,然后另一个人想修改,只能等到另一个人完成了再修改。 这样持续了一段时间,效率很差。
一个周末,小张和已经工作了的学长聊你了这件苦恼的事。学长说,哈,我们公司的项目比你们大多了,你们那种方式太原始了,一个人开发还好,要是很多人一起开发,基本就没法工作了。学长说,我们现在使用git来管理代码,之前是用的是SVN。 小张,一脸期待的看着学长。学长说那就给你普及普及知识。
你可以把你们的代码放到实验室的局域网内的服务器(SVN/GIT服务器),每次开始之前从服务器上获取最新的代码,修改完发送发服务器,服务器会处理你的修改,如果你和你的队友同时修改了一个文件,都发送服务器,服务器会把你们修改的标记,你们再从服务器获取,确定冲突的保存那些,修改之后,发送到服务器,之后就可以一直开发了,并且每次提交都有记录,可以看到修改了那些。 小张一脸兴奋的看着学长。学长顿了顿,这种方式叫做SVN。 有一个中央仓库。不过这种方式有个问题,那就是如果你回到了宿舍,实验室的服务器是局域网的,就没法玩了。所以的趋势是使用 git。 git会在你本地有一个和 中央仓库一样的数据。每次你完成一小步提交的本地仓库或者在宿舍写了一些代码,确定之后提交到本地仓库,等你完成了一个模块或者到了实验室连上了局域网,在提交到中央仓库。 这时你的队友也提价到了中央仓库,解决你们的冲突,从服务器获取最新的版本,这就是git。
小张听完如获至宝,回去后立马学习使用git,使用了一段时间,效率提升了很多,学习使用了一段时间,有些一些总结,好东西要和大家分享,软件的开源精神。
git 是分布式版本控制系统。
在开始之前,要了解一下git的工作流程:
工作区(workspace)—>暂存区(staging area)—–>git本地仓库(loca respository)——–>git远程仓库(remote respository)
初始化本地仓库
首先安装git(搜个教程就行),安装完成之后,我们可以使用git的命令行进行操作。
安装完成,在任何区域右键可以看到 GIT GUI Here GIT Base Here
本博客主要使用 Git base Here作为介绍GIT 。
进入任意盘,新建 learnGit 文件夹,我们在此文件下进行操作。
新建之后,进入文件夹,我们新建一个 a.txt 文件。
创建本地仓库
在指定目录下 右键点击 Git Base Here (如果你已经安装了git)
输入 git init 会把此目录使用git管理起来
这个时候我们的目的是要管理 learnGit这个文件夹下的所有文件。
右键点击 Git Bash Here ,会打开一个终端命令输入的小黑框。
我们要把这个文件夹管理起来,要初始化这个文件夹作为一个git仓库。 输入 git init
我们会发现会生成一个.git 的文件夹(没有,看看你是不是设置隐藏一些文件/文件夹)。 .git 保存着我们每次的修改记录。
添加到暂存区/本地仓库
现在我们 在 a.txt添加修改。
我们把修改的信息,保存在本地仓库。
使用命令 添加到暂存区 git add a.txt 正常不会有什么信息, 再把修改提交到本地仓库使用命令:
git commit -m ‘增加了11111’
查看状态/提交记录
如果想查看状态,可以使用git status
由于我们已经把修改的提交到了本地仓库,所有工作区和暂存区是很干净的。 现在我们修改a.txt,再查看状态。
可以看到提示 a.txt被修改了,提示使用git add / git checkout(后面再来了解这个命令)。
提交到暂存区,再查看状态。(git add filename/* 可以提交单个文件也可以使用通配符提交所有修改)
现在我们已经把a.txt提交到了暂存区, modified a.txt 颜色和之前有区别。提交到本地仓库,再查看状态。
如果想查看提交的记录,可以使用 git log ,该命令会从近到远显示提交记录。
如果提交的记录很多,想把每次提交的记录显示为一行可以使用 git log –pretty=oneline
如果想查看历史提交版本号可以使用 git reflog .
版本回退
如果想回退到之前 11111的版本,可以使用 git reset –hard HEAD^ 代表回退到上一个版本,要是想回退到前两个版本 增加^ (git reset –hard HEAD^^),如果想回退到 前50个版本 ,你可以使用^ 这种方式,不过有一种更加便捷的方式 git reset –hard HEAD~count (git reset –HEAD ~50 count代表回退的版本数) 。
如果你不记得想回退到第几个版本,那么可以查看记录,使用 版本号回退。 git reset –hard versionNumber
在查看a.txt 可以看到 文本回到了 11111的状态。
分支管理
git 里有个分支的概念,你的代码就像一颗树,会随着你的需要变成很多树枝(分支),可以并行开发。例如我们 初始化 一个文件夹使用git管理起来,可以看到 master 代表着主分支,我们也可以新建分支,在其他分支上进行开发。 看看示例,你就更加明白了。
首先我们先新建一个分支 dev。 使用命令 git branch branchname 。
并且查看现在有多少个分支,切换到新建的dev分支。
可以看到我们现在有两个分支 master dev 并且现在在dev 分支下工作。
也可以使用命令 git checkout -b branchname 创建并且切换分支。
我们现在做下面的事情,来理解分支。 在dev分支下 a.txt 增加 333333 提交到本地仓库,切换到master 查看 a.txt的内容。
神奇吧,这就是git的分支管理。
如果想合并 master和Dev分支 使用命令 git merge branchname 。现在我们想把 dev 分支合并到master分支,那么首先切换 master 分支,然后使用上述命令。
现在我们的 master 和dev 的内容是一样的,如果你想删除 dev分支,可以使用命令 git branch -d branchname
远程仓库
现在我们一直在本地开发, 如果想和其他人一起开发,那么我们需要一个远端的仓库,大家共同使用来开发。 相比在本地,多了一个步骤。
修改—> 暂存区—->本地仓库—–>远端仓库
首先你需要有 github或者 开源中国码云平台的账号,才能创建和加入远端仓库。
当你申请账号,新建一个项目 拿到项目的 ssh/https 链接。
在本地使用命令 git remote add origin url ,url 就是你的到的ssh/https 。
和远程仓库链接起来之后,你就可以把本地的仓库推送到远程,也可以拉取远程仓库最新代码。
推送本地代码到远端: git push origin branchname /如果远程是新建的项目本地第一推送要是用 git push -u origin branchname 拉取远端代码到本地: git pull origin branchname
命令总结
添加到工作区/本地仓库
git add filename/* ———添加工作区的修改到暂存区 可以是具体的一个文件也可以是 所有的修改的文件
git commit -m ‘your commit message’ —–提交到本地仓库 -m 后面跟的是 这次提交的总结信息
查看状态/记录
git status —-查看状态
git log —-查看提交记录
git log –pretty=oneline —-查看提交记录,每次提交显示为一行
git reflog —— 查看历史提交记录版本号
版本回退:如果想回退到之前某次状态
git reset –hard HEAD^ —–回退到上个版本 ^ 代表回退一个版本
git reset –hard HEAD^^ ——回退到上上个版本 ^的个数代表回退到前几个版本
git reset –hard HEAD~count —–回退到前count个版本
git reset –hard version —–回退到version这个版本
远程库操作
git remote add origin url —-本地仓库关联远程 url 为远程仓库的地址
git push -u origin branchName —– 提交本地仓库到远程仓库,第一提交需要加 -u
git push origin branchName —–提交本地仓库到远程仓库
git clone url ——-克隆远程仓库到本地 url : 远程仓库的地址
git push < origin > < branchName > —–推送到远程分支
git pull < origin > < branchName > —–拉取远程分支
创建与合并分支
git branch ——查看分支列表(本地)
git branch -r ——— 查看分支列表(远程)
git branch -a ——查看分支列表(本地和远程)
git branch branchName ——–新建branchName 分支
git checkout branchName ——选择分支
git checkout -b branchName —–创建并选择分支
git merge branchName ——-合并分支到当前分支,如果有冲突解决冲突,再提交
git branch -d branchName ——-删除分支
隐藏/恢复工作现场
当我们正在分支dev 分支进行开发,这时一个紧急bug需要解决,分支为bug,但是手上dev分支还没有提交并且Dev还发还没有完成,此时需要切换到bug分支,但是dev正在开发还未提交暂存区/本地仓库,怎么解决?
1.添加到暂存区并且提交到本地仓库
2 . 放弃dev还没有提交的(开个玩笑 ^^)由于dev还没有还发完,提交的半成品,可能代码都运行不起来,那么没有其他的方式了?
当然是有的啊。
3.我们需要隐藏工作现场(已修改未暂存/未提交) ,之后等到把bug分支解决了,再恢复工作现场
git stash -----把当前工作区(已修改未暂存/未提交)隐藏起来 git stash list ------查看当前被隐藏列表 git stash pop -------------恢复之前隐藏的工作现场并且把stash删除 git stash apply ------恢复隐藏的工作现场,不删除stash git stash drop -----删除一条stash
其他的一些问题
一: 如果文件被修改,还没有提交到暂存区, 想回到之前的状态有三种方式:
1.手动在文件里修改 2.退回版本 3.checkout 撤销 ---丢弃工作区的修改 git checkout --filename
二: 同步本地和远程仓库
1. 同步分支代码 : git pull < origin> < branchName> 2. 远端仓库有新的分支 : git fetch ----同步远程所有的分支 git fetch < origin> < branchName> ---同步具体的分支
三: 修改commit 信息
3.1: 未提交到远程仓库
3.2: 已提交到远程仓库
3.1 :未提交到远程仓库
git commit –amend -m ‘message’ —–修改了最近一次的commit信息
3.2:已提交到远程仓库
第一步:
git commit –amend -m ‘message’
第二步:
git push < origin > < branchName > -force 或者
git push < origin > < branchName > -f
注意:使用第二步的时候,请确保当前本地仓库和远程的代码是一致的,因为此命令会使用本地仓库的代码强制覆盖远程仓库。
- git入门---30分钟学会使用git
- 30分钟学会使用Git
- 15分钟学会使用Git
- Git:一分钟学会简单使用
- 5分钟 学会Git
- 15分钟学会git
- 5分钟学会git
- 【git】15分钟学会使用Git和远程代码库
- 30 分钟 git 命令入门
- 30分钟git命令入门
- 10分钟学会Git教程
- Git使用详解(30分钟理解Git)
- 15分钟学会使用Git和远程代码库
- 15分钟学会使用Git和远程代码库
- 15分钟学会使用Git和远程代码库
- 15分钟学会使用Git和远程代码库
- 15分钟学会使用Git和远程代码库
- 15分钟学会使用Git和远程代码库
- 算法题
- 日记day1
- leetcode-8-字符串转数字atoi
- poj3450 Corporate Identity(后缀数组+二分答案)
- 华科14_1
- git入门---30分钟学会使用git
- 蓝牙BLE LINK LAYER剖析(一) -- status and channel
- Fzu 2261 浪里个浪【思维+最短路】
- 封装
- iOS QQ中未读气泡拖拽消失的实现分析(KittenYang)
- 正向代理和反向代理
- 黑莓9930/9900开启电信4g网络,电信卡+3g上网
- 【时间管理】如何记高质量的笔记
- MySQL之——The slave I/O thread stops because master and slave have equal MySQL server UUIDs