关键词:
一、Git介绍
Git 是一个开源的分布式版本控制软件,用以有效、高速的处理从很小到非常大的项目版本管理。 Git 最初是由Linus Torvalds设计开发的,用于管理Linux内核开发。Git 是根据GNU通用公共许可证版本2的条款分发的自由/免费软件,下载安装参见:http://git-scm.com/
GitHub是一个基于Git的远程文件托管平台
Git本身完全可以做到版本控制,但其所有内容以及版本记录只能保存在本机,如果想要将文件内容以及版本记录同时保存在远程,则需要结合GitHub来使用。使用场景:
- 无GitHub:在本地 .git 文件夹内维护历时文件
- 有GitHub:在本地 .git 文件夹内维护历时文件,同时也将历时文件托管在远程仓库
二、单机模式
Git把管理的文件分为了两个区域四个状态
工作区:当前开发程序所在目录称为工作区,即:工作开发都是在该目录,该区域的文件会有状态的变化且状态由git自动检测,如果程序中文件做任何操作(增、删、改),文件状态均会被检测到,可以使用 (git status)命令查看
版本库:工作区检测到有文件发生变化,那么意味着较上一个版本之后对程序进行了修改,修改完成之后,可以当做下一版本进行提交,那么就是执行 【git add .】 将所有文件提交到暂存区,然后再执行(git commit -m ‘描述信息‘)提交到版本库的分支即可,之后可以使用(git log)命令查看版本记录
$ mkdir crazyjump #创建工作区目录 $ cd crazyjump git init #初始化,表示即将对当前文件夹进行版本控制。 git status #查看Git当前状态,如:那些文件被修改过、那些文件还未提交到版本库等。 git add 文件名 #将指定文件添加到版本库的暂存状态。 git commit -m ‘提交描述信息‘ #将暂存区的文件提交到版本库的分支。 git log #查看提交记录,即:历史版本记录
代码回滚:
$git log commit 14b216f0ce9701f405853058727c8ec164a6563d (HEAD -> master) Author: Your Name <[email protected]> Date: Mon Jan 7 19:07:11 2019 +0800 ftp第二次 commit 4c4bed87c264cc864c8fb9f9a4c44dd4d3ad0f97 Author: Your Name <[email protected]> Date: Mon Jan 7 19:04:43 2019 +0800 ftp第一次 [email protected] MINGW64 /e/FTP (master) $ git reset --hard 4c4bed87c264cc864c8fb9f9a4c44dd4d3ad0f97 #(回滚版本命令) HEAD is now at 4c4bed8 ftp第一次 [email protected] MINGW64 /e/FTP (master) $ git log commit 4c4bed87c264cc864c8fb9f9a4c44dd4d3ad0f97 (HEAD -> master) Author: Your Name <[email protected]> Date: Mon Jan 7 19:04:43 2019 +0800 ftp第一次 [email protected] MINGW64 /e/FTP (master)
这个时候如果需要再次回到ftp第二次的版本则:
$ git reflog 4c4bed8 (HEAD -> master) [email protected]0: reset: moving to 4c4bed87c264cc864c8fb9f9a4c44dd4d3ad0f97 14b216f [email protected]1: commit: ftp第二次 4c4bed8 (HEAD -> master) [email protected]2: commit (initial): ftp第一次 [email protected] MINGW64 /e/FTP (master) $ git reset --hard 14b216f #回滚命令 HEAD is now at 14b216f ftp第二次 [email protected] MINGW64 /e/FTP (master)
三、保存多份代码方式
3.1、stash
stash用于将工作区发生变化的所有文件获取临时存储在“某个地方”,将工作区还原当前版本未操作前的状态;stash还可以将临时存储在“某个地方”的文件再次拿回到工作区
$ git stash #线上出现bug将开发到一半的工作区保存 Saved working directory and index state WIP on master: d75bd2b 更改 [email protected] MINGW64 /e/FTP (master) $ git stash pop #修改bug后再将之前开发一半的代码拿回工作区 On branch master Changes not staged for commit: (use "git add <file>..." to update what will be committed) (use "git checkout -- <file>..." to discard changes in working directory) modified: sina.txt modified: wx.py no changes added to commit (use "git add" and/or "git commit -a") Dropped refs/[email protected]0 (a9b99f0bb5a4101721e8dbcc005aef4df312ec04) [email protected] MINGW64 /e/FTP (master)
ps:执行 git stash pop 命令时可能会遇到冲突,因为在紧急修复bug的代码和通过stash存储在“某个地方”的代码会有重合部分,所以执行 git stash pop 时候就会出现冲突,有冲突解决冲突即可。
stash相关常用命令:
- git stash 将当前工作区所有修改过的内容存储到“某个地方”,将工作区还原到当前版本未修改过的状态
- git stash list 查看“某个地方”存储的所有记录
- git stash clear 清空“某个地方”
- git stash pop 将第一个记录从“某个地方”重新拿到工作区(可能有冲突)
- git stash apply 编号, 将指定编号记录从“某个地方”重新拿到工作区(可能有冲突)
- git stash drop 编号,删除指定编号的记录
3.2、branch
branch称为分支,默认仅有一个名为master的分支。一般开发新功能流程为:开发新功能时会在分支dev上进行,开发完毕后再合并到master分支
branch相关常用命令:
- git branch 分支名称 创建分支
- git checkout 分支名称 切换分支
- git branch -m 分支名称 创建并切换到指定分支
- git branch 查看所有分支
- git branch -d 分支名称 删除分支
- git merge 分支名称 将指定分支合并到当前分支
$ git branch #查看分支(目前在master分支) * master [email protected] MINGW64 /e/FTP (master) $ git branch dev #创建dev分支,即:拷贝一份当前所在分支代码到新分支 [email protected] MINGW64 /e/FTP (master) $ git branch dev * master [email protected] MINGW64 /e/FTP (master) $ git checkout dev #切换到dev分支 Switched to branch ‘dev‘ M sina.txt M wx.py [email protected] MINGW64 /e/FTP (dev) $ git status On branch dev Changes not staged for commit: (use "git add <file>..." to update what will be committed) (use "git checkout -- <file>..." to discard changes in working directory) modified: sina.txt modified: wx.py no changes added to commit (use "git add" and/or "git commit -a") [email protected] MINGW64 /e/FTP (dev) $ git add . # 将修改文件添加到版本库的暂存区 [email protected] MINGW64 /e/FTP (dev) $ git commit -m "提交" # 将暂存区的内容提交到当前所在分支,即:dev分支 [dev aa1d2bf] 提交 2 files changed, 4 insertions(+), 2 deletions(-) [email protected] MINGW64 /e/FTP (dev) $ git status On branch dev nothing to commit, working tree clean [email protected] MINGW64 /e/FTP (dev) $ git checkout master #切换到master分支 Switched to branch ‘master‘ [email protected] MINGW64 /e/FTP (master) $ git merge dev #将dev分支合并到master(可能会有冲突) Updating d75bd2b..aa1d2bf Fast-forward sina.txt | 3 ++- wx.py | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-)
四、远程托管到GitHub
基于GitHub实现代码托管,需要一下步骤:
- 注册GitHub
- 创建仓库,创建完仓库后会有一个URL代指该仓库,如:
将master和dev推送到github
$ git remote add ftp https://github.com/Crazyjump/Ftp.git #新建别名ftp,连接地址为github上所建仓库地址 [email protected] MINGW64 /e/FTP (master) $ git push ftp master #将master推送到github,注意这时候需要输入账号密码 Enumerating objects: 51, done. Counting objects: 100% (51/51), done. Delta compression using up to 4 threads Compressing objects: 100% (40/40), done. Writing objects: 100% (51/51), 9.19 KiB | 671.00 KiB/s, done. Total 51 (delta 10), reused 0 (delta 0) remote: Resolving deltas: 100% (10/10), done. To https://github.com/Crazyjump/Ftp.git * [new branch] master -> master [email protected] MINGW64 /e/FTP (master) $ git push ftp dev #再将dev推送到github Total 0 (delta 0), reused 0 (delta 0) remote: remote: Create a pull request for ‘dev‘ on GitHub by visiting: remote: https://github.com/Crazyjump/Ftp/pull/new/dev remote: To https://github.com/Crazyjump/Ftp.git * [new branch] dev -> dev [email protected] MINGW64 /e/FTP (master)
结果:
将github上的代码拉到本地:
$ git clone https://github.com/Crazyjump/Ftp.git #将github上的代码第一次拉取到本地 Cloning into ‘Ftp‘... remote: Enumerating objects: 51, done. remote: Counting objects: 100% (51/51), done. remote: Compressing objects: 100% (30/30), done. remote: Total 51 (delta 10), reused 51 (delta 10), pack-reused 0 Unpacking objects: 100% (51/51), done. [email protected] MINGW64 /i/ftphome $ git remote add ftp https://github.com/Crazyjump/Ftp.git fatal: not a git repository (or any of the parent directories): .git $ ls Ftp/ [email protected] MINGW64 /i/ftphome $ cd Ftp/ [email protected] MINGW64 /i/ftphome/Ftp (master) $ ls 11.txt ddd.txt ftpclient/ ftpserver/ sina.txt wx.py [email protected] MINGW64 /i/ftphome/Ftp (master) $ git branch dev #创建dev [email protected] MINGW64 /i/ftphome/Ftp (master) [email protected] MINGW64 /i/ftphome/Ftp (master) $ git checkout dev #切换到dev Switched to branch ‘dev‘ [email protected] MINGW64 /i/ftphome/Ftp (dev) $ git pull ftp dev From https://github.com/Crazyjump/Ftp * branch dev -> FETCH_HEAD * [new branch] dev -> ftp/dev Already up to date. [email protected] MINGW64 /i/ftphome/Ftp (dev) $ git pull ftp dev
#拉取远程github上的dev到本地并合并
remote: Enumerating objects: 5, done. remote: Counting objects: 100% (5/5), done. remote: Compressing objects: 100% (1/1), done. remote: Total 3 (delta 1), reused 3 (delta 1), pack-reused 0 Unpacking objects: 100% (3/3), done. From https://github.com/Crazyjump/Ftp * branch dev -> FETCH_HEAD aa1d2bf..91ca816 dev -> ftp/dev Updating aa1d2bf..91ca816 Fast-forward 11.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
相关命令:
git clone https://github.com/Crazyjump/Ftp.git # 第一次将项目从GitHub中获取,默认获取到得只有master分支 git checkout dev # 切换到dev分支 git pull ftp dev # 从远程GitHub仓库获取dev分支最新内容,并合并到本地 git push ftp master # 将本地master分支内容以及版本信息推送到GitHub git fetch ftp dev # 从GitHub仓库获取dev分支最新内容到版本库的分支 git merge ftp/dev # 将版本库的分支内容合并到工作区 #上文执行过程中执行 【git pull ftp 分支名称】命令等同于【git fetch origin 分支】+ 【git merge origin/分支】 #(git rebase ftp/分支) 不产生提交分叉,保持提交记录整洁
五、其他补充:
5.1、.gitignore 文件定义不需要管理文件
以斜杠“/”开头表示目录; 以星号“*”通配多个字符; 以问号“?”通配单个字符 以方括号“[]”包含单个字符的匹配列表; 以叹号“!”表示不忽略(跟踪)匹配到的文件或目录;
5.2、版本命令相关
git tag -a v1.0 -m ‘版本介绍‘ #本地创建版本v1.0 git show v1.0 #查看 git tags -n #查看本地Tag git tag -l ‘v1.4.2.*‘ #查看本地Tag,模糊匹配 git tag -d v1.0 #删除Tag git push ftp :refs/tags/v0.2 #更新远程tag git checkout v.10 #切换tag git push ftp --tags # git pull ftp --tags git clone -b v0.1 #拉1.0版本的代码
为ftp创建一个版本:
$ git tag -a v1.0 -m ‘ftp1.0‘ [email protected] MINGW64 /i/ftphome/Ftp (master) $ git push ftp --tags Enumerating objects: 1, done. Counting objects: 100% (1/1), done. Writing objects: 100% (1/1), 158 bytes | 158.00 KiB/s, done. Total 1 (delta 0), reused 0 (delta 0) To https://github.com/Crazyjump/Ftp.git * [new tag] v1.0 -> v1.0
结果:
5.3、github中可以通过要去协助或者创建组来协同开发,另外分支代码推送到远程仓库时候如果出现推送失败一般就是:最新提交和你试图推送的提交有冲突,解决办法也很简单,Git已经提示我们,先用git pull
把最新的提交从远程仓库上抓下来,然后,在本地合并,解决冲突,再推
常用git命令清单(代码片段)
转自: http://www.ruanyifeng.com/blog/2015/12/git-cheat-sheet.html常用Git命令清单 常用Git命令清单。几个专用名词的译名如下。Workspace:工作区Index/Stage:暂存区Repository:仓库区(或本地仓库)Remote:远程仓库一、新建代码... 查看详情
git操作常用命令(代码片段)
git仓库配置常用命令####首先下载代码+git下载代码命令:gitclone[git地址][下载位置]####分支命令1.查看分支gitbranch2.查看远程分支gitbranch-r3.查看所有分支(本地和远程)gitbranch-a4.创建分支gitbranch[分支名称]5.切换分支gitcheckout[分支名称... 查看详情
git常用基本命令(代码片段)
...关操作tag相关操作撤销相关操作参考资料本文主要介绍Git常用的基本命令。基本命令仓库相关命令创建新仓库gitinit克隆项目gitclonehttps://github.com/Erik-ly/git-test.git查看当前配置gitconfig--li 查看详情
常用git命令清单(代码片段)
常用Git命令清单本篇博客是转发的别人的,原文地址:http://www.ruanyifeng.com/blog/2015/12/git-cheat-sheet.html我每天使用Git,但是很多命令记不住。一般来说,日常使用只要记住下图6个命令,就可以了。但是熟练使用,恐怕要记住60~100... 查看详情
git常用命令(代码片段)
Gitglobalsetupgitconfig--globaluser.name"myName"gitconfig--globaluser.email"myEmail"Createanewrepositorygitclonegit@git.*.com:*/test.gitcdtesttouchREADME.mdgitaddREADME.mdgitcommit-m"addREADME"gitpush 查看详情
git使用常用命令(代码片段)
...doriginhttp://git.itwecard.com/dingziting/test.git#关联远程仓库地址常用gitpull#从线上获取代码gitadd.#添加到待提交缓存gitcommit-m"Initialcommit"#提交至本地仓库gitpush[-u 查看详情
git常用命令(代码片段)
基础命令1234567891011121314151617181920212223242526#用户设置gitconfig--globaluser.name"YourName"gitconfig--globaluser.email"[email protected]" #初始化仓库gitinit#InitializedemptyGitrepositoryin/Users/lea 查看详情
git常用命令(代码片段)
...是熟练使用,恐怕要记住60~100个命令。下面是我整理的常用Git命令清单。几个专用名词的译名如下。Workspace:工作区Index/Stage:暂存区Repository:仓库区(或本地仓库)Remote:远程仓库一、新建代码库#在当前目录新建一个G 查看详情
git之常用命令(代码片段)
git之常用命令1.下载远程仓库最新代码$gitpull--rebaseoriginmaster2.上传代码$gitpushoriginmaster 3.退出编辑ESC+Z+Z//z必须是大写,连按两次 报错:refusingtomergeunrelatedhistories解决:gitpulloriginmaster--allow-unrelated-histories 查看详情
常用git命令清单(代码片段)
...是熟练使用,恐怕要记住60~100个命令。下面是我整理的常用Git命令清单。几个专用名词的译名如下。Workspace:工作区Index/Stage:暂存区Repository:仓库区(或本地仓库)Remote:远程仓库一、新建代码库#在当前目录新建一个Git代码... 查看详情
git常用命令(代码片段)
常用命令:1:[email protected]MINGW64~/redition/rendition(feature/June_09_2017/floatLeftMenu)$gitaddWebApps/rendition/eppublic/akpublic/documents/views/shareTabPane.html2:[email protected]MINGW64~ 查看详情
git常用命令(代码片段)
...2.git工作机制3.git安装官网地址:https://git-scm.com/4.git常用命令git--version查看git版本gitconfig--globaluser.name用户名设置用户签名gitconfig--globaluser.email邮 查看详情
git常用命令(代码片段)
...2.git工作机制3.git安装官网地址:https://git-scm.com/4.git常用命令git--version查看git版本gitconfig--globaluser.name用户名设置用户签名gitconfig--globaluser.email邮 查看详情
git常用命令(代码片段)
一、新建代码库# 在当前目录新建一个Git代码库 $ git init # 新建一个目录,将其初始化为Git代码库 $ git init \\[project-name\\] # 下载 查看详情
git常用命令(代码片段)
仓库#在当前目录新建一个Git代码库$gitin#新建一个目录,将其初始化为Git代码库$gitinit[project-name]#下载一个项目和它的整个代码历史$gitclone[url]配置#显示当前的Git配置$gitconfig--list#编辑Git配置文件$gitconfig-e[--global]#设置提交代码时... 查看详情
git常用命令(代码片段)
一.初始在当前目录新建一个Git代码库$gitinit#新建一个目录,将其初始化为Git代码库$gitinit[project-name]#下载一个项目和它的整个代码历史$gitclone[url]二.配置#显示当前的Git配置$gitconfig--list#编辑Git配置文件$gitconfig-e[--global]#设置提交... 查看详情
git常用命令(代码片段)
[来源]https://gitee.com/all-about-git仓库#在当前目录新建一个Git代码库$gitinit#新建一个目录,将其初始化为Git代码库$gitinit[project-name]#下载一个项目和它的整个代码历史$gitclone[url]配置#显示当前的Git配置$gitconfig--list#编辑Git配置文件$git... 查看详情