赞
踩
最近有人问我git操作相关的知识,我直接拿出积累许久的git秘籍送给了这位骚年,骚年直称妙哉,最后戏虐的说道:写得真好,看完还不如自己学。想必是我写的太好,心生嫉妒,罢了罢了,在这里也分享给大家,同时git所有操作一篇文章肯定说不完,欢迎大伙提问补充。
主流的版本控制器有如下这些:
版本控制产品非常的多(Perforce、Rational ClearCase、RCS(GNU Revision Control System)、Serena Dimention、SVK、BitKeeper、Monotone、Bazaar、Mercurial、SourceGear Vault),现在影响力最大且使用最广泛的是Git与SVN
1、本地版本控制 RCS
记录文件每次的更新,可以对每个版本做一个快照,或是记录补丁文件,适合个人用,如RCS。
2、集中版本控制 SVN
所有的版本数据都保存在服务器上,协同开发者从服务器上同步更新或上传自己的修改。所有的版本数据都存在服务器上,用户的本地只有自己以前所同步的版本,如果不连网的话,用户就看不到历史版本,也无法切换版本验证问题,或在不同分支工作。而且,所有数据都保存在单一的服务器上,有很大的风险这个服务器会损坏,这样就会丢失所有的数据,当然可以定期备份。代表产品:SVN、CVS、VSS
3、分布式版本控制 Git
每个人都拥有全部的代码!安全隐患!
所有版本信息仓库全部同步到本地的每个用户,这样就可以在本地查看所有版本历史,可以离线在本地提交,只需在连网时push到相应的服务器或其他用户那里。由于每个用户那里保存的都是所有的版本数据,只要有一个用户的设备没有问题就可以恢复所有的数据,但这增加了本地存储空间的占用。
不会因为服务器损坏或者网络问题,造成不能工作的情况!
SVN是集中式版本控制系统,版本库是集中放在中央服务器的,而工作的时候,用的都是自己的电脑,所以首先要从中央服务器得到最新的版本,然后工作,完成工作后,需要把自己做完的活推送到中央服务器。集中式版本控制系统是必须联网才能工作,对网络带宽要求较高。
Git是分布式版本控制系统,没有中央服务器,每个人的电脑就是一个完整的版本库,工作的时候不需要联网了,因为版本都在自己电脑上。协同的方法是这样的:比如说自己在电脑上改了文件A,其他人也在电脑上改了文件A,这时,你们两之间只需把各自的修改推送给对方,就可以互相看到对方的修改了。Git可以直接看到更新了哪些代码和文件!
Git地址:https://git-scm.com/book/zh/v2/%E8%B5%B7%E6%AD%A5-%E5%AE%89%E8%A3%85-Git
1)、cd : 改变目录。
2)、cd . . 回退到上一个目录,直接cd进入默认目录
3)、pwd : 显示当前所在的目录路径。
4)、ls(ll): 都是列出当前目录中的所有文件,只不过ll(两个ll)列出的内容更为详细。
5)、touch : 新建一个文件 如 touch index.js 就会在当前目录下新建一个index.js文件。
6)、rm: 删除一个文件, rm index.js 就会把index.js文件删除。
7)、mkdir: 新建一个目录,就是新建一个文件夹。
8)、rm -r : 删除一个文件夹, rm -r src 删除src目录
rm -rf / 切勿在Linux中尝试!删除电脑中全部文件!
9)、mv 移动文件, mv index.html src index.html 是我们要移动的文件, src 是目标文件夹,当然, 这样写,必须保证文件和目标文件夹在同一目录下。
10)、reset 重新初始化终端/清屏。
11)、clear 清屏。
12)、history 查看命令历史。
13)、help 帮助。
14)、exit 退出。
15)、#表示注释
Git本地有三个工作区域:工作目录(Working Directory)、暂存区(Stage/Index)、资源库(Repository或Git Directory)。如果在加上远程的git仓库(Remote Directory)就可以分为四个工作区域。文件在这四个区域之间的转换关系如下:
git的工作流程一般是这样的:
1、在工作目录中添加、修改文件;
2、将需要进行版本管理的文件放入暂存区域;
3、将暂存区域的文件提交到git仓库。
因此,git管理的文件有三种状态:已修改(modified),已暂存(staged),已提交(committed)
版本控制
git config --global user.email "you@example.com"
git config --global user.name "Your Name"
进入要管理的文件夹
初始化,创建本地仓库
管理指定文件
管理目录下的文件状态
提交到本地仓库,生成版本
提交远程仓库
查看版本
git init
git add .
git commit -m '描述信息'
git remote add origin git@github.com:VaeEmilia/file.git
git push -u origin master
git log 查看历史版本
git reset --hard 版本号
git reflog
git reset --hard 版本号
分支可以给使用者提供多个环境,意味着你可以把你的工作从开发主线上分离开来,以免影响开发主线。
紧急修复线上bug的思路
基于分支修复线上bug
git branch 列出所有本地分支
git branch -r 列出所有远程分支
git branch 分支名字
git checkout -b 分支名字 新建一个分支并切换到该分支
git checkout 分支名称
git merge 要合并的分支 合并指定分支到当前分支
git branch -d 分支名称
# 删除远程分支
git push origin --delete [branch-name]
git branch -dr [remote/branch]
当我们为项目开发到一定程度,假如想为它创建版本时,我们可以为它打上标签作为项目的一个版本编号,如git tag v1.0.0
查看所有版本:$ git tag
创建版本:$ git tag [name]
创建带注释的tag:$ git tag -a [name] -m 'yourMessage'
删除版本:$ git tag -d [name]
查看远程版本:$ git tag -r
创建远程版本(本地版本push到远程):$ git push origin [name]
删除远程版本:$ git push origin :refs/tags/[name]
合并远程仓库的tag到本地:$ git pull origin --tags
上传本地tag到远程仓库:$ git push origin --tags
当我们想要克隆的时候可以指定标签 git clone -b [tags标签] [git地址]
为了更好的理解远程仓库的概念和使用,我们来看一个例子
首先,需要注册github账号,并创建远程仓库,然后再执行如下命令,将代码上传到github。
给远程仓库起别名
git remote add origin 远程仓库地址
向远程推送代码
git push -u origin 分支
克隆远程仓库代码
git clone 远程仓库地址
创建并切换分支
git branch 分支
git checkout 分支
切换到dev分支进行开发
git checkout dev
把master分支合并到dev
git merge master
提交代码
git add .
git commit -m "xxx"
git push origin dev
将dev分支合并到master,进行上线
git checkout master
git merge dev
git push origin master
把dev分支也推送到远程
git checkout dev
git merge master
git push origin dev
拉代码
git pull origin dev
提交代码
git add .
git commit -m "xxx"
没有提交到Github托管
拉代码,发现并没有公司的代码
git pull origin dev
无奈,继续开发其他功能
把dev分支也推送到远程
git add .
git commit -m "xxx"
git push origin dev
拉代码,把昨天的代码拉到本地(可能存在冲突)
git pull origin dev
解决冲突,继续开发
把dev分支也推送到远程
git add .
git commit -m "xxx"
git push origin dev
实际的工作中,我们肯定不止一个人开发一个项目,那么我们需要继续了解多人协作的开发方式
协同开发时,需要所有成员都可以对同一个项目进行操作,需要邀请成员并赋予权限,否则无法开发。 github支持两种创建项目的方式(供多人协同开发)。
注册Github或Gitlab账号
配置,代码review之后才能合并到dev分支
成员提交code review申请
组长做 code review
由专门团队或团队leader执行以下步骤
1.基于dev分值创建release分值
git checkout dev
git checkout -b release
2.测试等
3.合并到master
使用 pull request
本地将release合并到master分支
4.在master分支打tag
git tag -a v2 -m '第二版 斗地主功能'
git push origin --tags
5.运维人员就可以去下载代码做上线了
git clone -b v2 地址
1.fork源代码将别人源代码拷贝到我自己的远程仓库。
2.在自己仓库进行修改代码
3.给源代码的作者提交修复bug的申请(pull request)
git config --local user.name 'juran'
git config --local user.email 'juran@xx.com
全局配置文件:~/.gitconfig
git config --global user.name 'juran'
git config --global user.email 'juran@xx.com'
git config --system user.name 'juran'
git config --system user.email 'juran@xx.com'
注意:需要有root权限
git config --list
git config <key>
: 来检查 Git 的某一项配置
原来的地址:https://github.com/juran/dbhot.git
修改的地址:https://用户名:密码@github.com/juran/dbhot.git
git remote add origin https://用户名:密码@github.com/juran/dbhot.git
git push origin master
1.查找公钥和私钥(默认放在~/.ssh目录下,id_rsa.pub公钥、id_rsa私钥; C:\Users\l\.ssh) Git Bash: cat ~/.ssh/id_rsa.pub 没有的话输入ssh-keygen创建公钥和私钥 2.拷贝公钥的内容,并设置到github中。 3.验证是否成功,在git bash里输入下面的命令 ssh -T git@github.com ssh -T git@gitee.com 如果初次设置的话,会出现如下界面,输入yes同意即可 3.创建本地仓库git init,在本地中配置ssh地址 git remote add origin git@github.com:<github用户名>/<仓库名>.git //关联一个远程库 github - git remote add origin git@gitee.com:<github用户名>/<仓库名>.git //gitee > git remote add origin git@github.com:VaeEmilia/file.git git push -u origin "master" //关联后,第一次推送master分支的所有内容命令,此后,每次本地提交后,就可以使用命令git push origin master推送最新修改 4.以后使用 git push origin master
git stash
将工作去恢复到上次提交的内容,同时,将当前的工作区内容保存到Git栈中git pull origin master
拉取仓库代码git stash pop
从Git栈中读取最近一次保存的内容,恢复工作区的相关内容。通过上面三步操作,就可以将服务器上的代码拉取下来了,同时本地修改的代码还存在,可以对他们进行修改操作,保留最终的代码即可。
还有两个相关操作,在这里也介绍一下:
git stash list
:显示Git栈内的所有备份,可以利用这个列表来决定从那个地方恢复。git stash clear
:清空Git栈。此时使用gitg等图形化工具会发现,原来stash的哪些节点都消失了。git reset --hard 将本地的状态回复到上一个commit id
git pull origin master 拉取远程仓库代码
$ git clone https://github.com/chizhu/KGQA_HLM.git
Cloning into ‘KGQA_HLM’…
fatal: unable to access ‘https://github.com/chizhu/KGQA_HLM.git/’: OpenSSL SSL_read: Connection was reset, errno 10054
将网址中的https改成git
$ git clone git://github.com/chizhu/KGQA_HLM.git
Cloning into ‘KGQA_HLM’…
remote: Enumerating objects: 372, done.
remote: Total 372 (delta 0), reused 0 (delta 0), pack-reused 372
Receiving objects: 100% (372/372), 5.13 MiB | 834.00 KiB/s, done.
Resolving deltas: 100% (89/89), done.
https://github.com/github/gitignore
让Git不再管理当前目录下的某些文件。
*.h
!a.h
files/
*.py[c|a|d]
shell 所使用的简化了的正则表达式
星号(*)匹配零个或多个任意字符
[abc] 匹配任何一个列在方括号中的字符
(?)只匹配一个任意字符
[?-?] 表示匹配两个字符范围内的字符,如[1-8]表示数字1-8都可以
使用两个星号(*) 表示匹配任意中间目录,a/**/b
可以匹配 a/b
, a/c/b
或 a/c/d/b
等
**注意:**如果你创建.gitignore文件之前就push了某一文件,那么即使你在.gitignore文件中写入过滤该文件的规则,该规则也不会起作用,git仍然会对该文件进行版本管理。可以使用git rm -r --cached .
清除本地git所有缓存,重新git add xxx
添加需要管理的文件
git status 查看文件状态 未提交前可以知道哪些文件添加到了版本控制
git remote show origin 显示远程库origin里的资源
git remote rm origin 移除远程仓库
git checkout <file> 丢弃工作区的修改
git checkout -f 强制丢弃工作区和暂存区的修改
git checkout <HEAD> 切换本地仓库版本
git diff [HEAD] 显示差异,对比做了哪些修改 HEAD^ 每个^代表上一个版本
git diff HEAD~4 查看上四个版本的修改
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。