linux下设置Git
Git介绍
1.工作原理
Git是目前世界上最先进的分布式版本控制系统。
Workspace: 工作区
Index / Stage: 暂存区
Repository: 本地仓库
Remote: 远程仓库
2.SVN与Git的最主要的区别?
SVN是集中式版本控制系统,版本库是集中放在中央服务器的,而干活的时候,用的都是自己的电脑,所以首先要从中央服务器哪里得到最新的版本,然后干活,干完后,需要把自己做完的活推送到中央服务器。集中式版本控制系统是必须联网才能工作,如果在局域网还可以,带宽够大,速度够快,如果在互联网下,如果网速慢的话,就纳闷了。
Git是分布式版本控制系统,那么它就没有中央服务器的,每个人的电脑就是一个完整的版本库,这样,工作的时候就不需要联网了,因为版本都是在自己的电脑上。既然每个人的电脑都有一个完整的版本库,那多个人如何协作呢?比如说自己在电脑上改了文件A,其他人也在电脑上改了文件A,这时,你们两之间只需把各自的修改推送给对方,就可以互相看到对方的修改了。
3.操作
$ git config --global user.name "ccpang"
$ git config --global user.email "ccpang96@163.com"
git config --list //查看自己的配置
git config --global credential.helper store //配置客户端长期存储密码
git config --global 参数,有了这个参数,表示你这台机器上所有的Git仓库都会使用这个配置,当然你也可以对某个仓库指定的不同的用户名和邮箱。
4.创建本地仓库
什么是本地仓库?
英文名repository,你可以简单的理解一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改,删除,Git都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻还可以将文件”还原”
git init 把目录变成git可以管理的仓库。
5.把文件添加到本地仓库
git add readme.txt 将readme.txt文件添加到暂存区
git add -A 保存所有的修改
git add 保存新的添加和修改,但是不包括删除
git add -U 保存修改和删除,但是不包括新建文件
git add . 提交所有的文件夹
(index)
git commit -m "提交readme.txt" 把文件提交到本地仓库(repository)
git status 查看文件的状态
Untracked files 这种情况出现在新建几个文件(版本中不存在的),但是没有提交到暂存区的的时候
Changes not staged for commit 这种情况出现在版本已有文件遭到修改但是还没提交到暂存区的时候
Changes to be committed 这种情况出现在提交到暂存区之后的时候
//当文件被修改时,再次使用git status出现以下代码
$ git status
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: readme.txt
no changes added to commit (use "git add" and/or "git commit -a")
git diff readme.txt 查看文件修改了哪些内容
当使用上面这个命令或者其他命令以后,再输入命令,命令无法显示。
使用Backspace后退键删除光标前的所有内容,然后输入reset,然后回车
使用git log或者git diff后,如果命令很长,则使用q退出
6.版本回退
git log 从近到远的显示日志
git log --pretty=oneline 从近到远显示日志 每个一行
git reset --hard HEAD~1 往上回退1个版本
git reset --hard HEAD~100 往上回退100个版本
cat readme.txt 查看readme.txt文件的内容
git reflog 查看提交的版本号
git reset --hard xxxxxxx 恢复到某个版本
7.理解工作区(workspace)与暂存区(index)的区别
工作区:就是你在电脑上看到的目录,比如目录下Git里的文件(.git隐藏目录版本库除外)。或者以后需要再新建的目录文件等等都属于工作区范畴。
本地仓库(Repository):工作区有一个隐藏目录.git,这个不属于工作区,这是版本库。其中版本库里面存了很多东西,其中最重要的就是stage(暂存区),还有Git为我们自动创建了第一个分支master,以及指向master的一个指针HEAD。
我们前面说过使用Git提交文件到版本库有两步:
第一步:是使用 git add 把文件添加进去,实际上就是把文件添加到暂存区。
第二步:使用git commit提交更改,实际上就是把暂存区的所有内容提交到当前分支上。
8.Git撤销文件操作
git checkout -- readme.txt //丢弃未提交到暂存区的修改 即把在工作区做的修改全部撤销
9.删除文件操作
rm b.txt 删除b.txt
git check -- b.txt 没有commit之前,恢复b.txt文件
远程仓库
1.创建ssh密钥
本地Git仓库和github仓库之间的传输是通过SSH加密的,所以需要一点设置:
第一步:创建SSH Key。在用户主目录下,看看有没有.ssh目录,如果有,再看看这个目录下有没有id_rsa和id_rsa.pub这两个文件,如果有的话,直接跳过此如下命令,如果没有的话,打开命令行,输入如下命令:
ssh-keygen -t rsa -C "ccpang96@163.com"
id_rsa是私钥,不能泄露出去,id_rsa.pub是公钥,可以放心地告诉任何人。
存放路径:C:\Users\Administrator\.ssh
密码:*******
2.将本地Git仓库与远程仓库关联
git remote -v //查看git对应的远程仓库地址
git remote rm origin //删除关联对应的远程仓库地址
git remote -v //查看是否删除成功,如果没有任何返回结果,表示OK
git remote add origin https://github.com/ccpang96/LinuxGit.git //重新关联git远程仓库地址
git删除远程仓库文件
git rm –r –n --cached b.txt //加上-n并不会删除文件而是展示要删除的文件列表
git rm -r -- cached .history //删除文件history
git rm –r -- cached b.txt //实际删除 暂存区文件
git commit –m “删除b.txt”
git push origin master
当push的是空文件夹时,这是因为文件夹是从github上clone下来的,所以得先删除文件夹内的.git文件,
git remote add origin https://github.com/ccpang96/testgit.git
git push -u origin master
git查看本地仓库中的文件
git ls-files
查看文件状态
git status //查看文件状态 红色表示工作区中的文件需要提交 绿色表示暂存区的文件需要提交
git status –s //简化日志输出格式
git对比
git diff //查看工作区与暂存区的不同
git diff - -cached //查看暂存区与本地仓库的不同
git diff HEAD //查看工作区与仓库区的不同
git日志观察
git log //查看提交日志
git log - -oneline //简洁的日志
git push -f github master //强制push
从工作区提交文件到暂存区
git add 文件夹/ //添加整个文件夹及内容
git add –A //将工作区当前目录下的所有文件提交到暂存区
git add - -all //将工作区当前目录下的所有文件提交到暂存区
将文件从暂存区提交到本地仓库
git commit –m “提交说明” //将文件从暂存区添加到仓库区,生成版本号
git commit - - amend –m “提交说明” //修改提交说明
分支管理
git branch //查看分支
git branch –d 分支名称 //删除分支
git branch 分支名称 // 创建一个分支
git checkout 分支名称 //切换分支 在当前分支的任何操作都不会影响到其他分支,除非进行了分支合并
git checkout –b 分支名称 //创建并切换分支
git merge 分支名称//将其他分支的名称合并到当前分支
从远程仓库pull代码到本地
git pull --rebase origin master
git fetch origin master //获取远端的origin/master分支
git log –p master..origin/master //查看本地master与远端origin/master的版本差异
git merge origin/master --allow-unrelated-histories //合并远端分支origin/master到当前分支
使用 git push命令,实际上是把当前分支master推送到远程
由于远程库是空的,我们第一次推送master分支时,加上了 –u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。推送成功后,可以立刻在github页面中看到远程库的内容已经和本地一模一样了,上面的要输入github的用户名和密码如下所示:
从现在起,只要本地作了提交,就可以通过如下命令:
git push origin master
把本地master分支的最新修改推送到github上了,现在你就拥有了真正的分布式版本库了。
3.从远程库克隆
git clone https://github.com/ccpang96/testgit2 从远程库中将testgit2克隆到本地库
创建与合并分支
1.创建新的分支并合并
在 版本回填退里,你已经知道,每次提交,Git都把它们串成一条时间线,这条时间线就是一个分支。截止到目前,只有一条时间线,在Git里,这个分支叫主分支,即master分支。HEAD严格来说不是指向提交,而是指向master,master才是指向提交的,所以,HEAD指向的就是当前分支。
git checkout -b dev :表示创建并切换到dev分支上
相当于以下两条命令
git branch dev 查看分支,会列出所有分支,当前分支前会添加一个星号
git checkout dev 切换到dev分支上
git merge dev 将dev分支上的内容合并到master上
git branch -d dev 删除dev分支
在分支上对文件进行修改后,一定要add /commit,不然还只是一个本地文件。
当合并分支出现矛盾时(同时修改了文件):
Auto-merging readme.txt
CONFLICT (content): Merge conflict in readme.txt
Automatic merge failed; fix conflicts and then commit the result.
Git用<<<<<<<,=======,>>>>>>>标记出不同分支的内容,其中<<<HEAD是指主分支修改的内容,
fenzhi1 是指fenzhi1上修改的内容,我们可以修改下如下后保存:
git log 查看分支合并情况
2.分支管理策略
通常合并分支时,git一般使用”Fast forward”模式,在这种模式下,删除分支后,会丢掉分支信息,现在我们来使用带参数 –no-ff来禁用”Fast forward”模式。
首先我们来做demo演示下:
git checkout -b dev 创建一个dev分支
然后修改readme.txt内容,添加到暂存区。
切换回主分支(master)。 合并dev分支,使用命令
git merge -no-ff-m "注释(merge with no-ff)" dev -no-ff表示禁用fast forward
分支策略:首先master主分支应该是非常稳定的,也就是用来发布新版本,一般情况下不允许在上面干活,干活一般情况下在新建的dev分支上干活,干完后,比如上要发布,或者说dev分支代码稳定后可以合并到主分支master上来。
这样在dev上修改的东西,就可以合并到master上来了,可以用来push到仓库里。
3.bug分支
在开发中,会经常碰到bug问题,那么有了bug就需要修复,在Git中,分支是很强大的,每个bug都可以通过一个临时分支来修复,修复完成后,合并分支,然后将临时的分支删除掉。比如我在开发中接到一个404 bug时候,我们可以创建一个404分支来修复它,但是,当前的dev分支上的工作还没有提交。比如如下:
git stash 把当前的工作现场隐藏起来,等以后恢复现场后继续工作
参考链接
1.https://www.zhihu.com/search?type=content&q=Git%E6%95%99%E7%A8%8B
2.https://juejin.im/post/5c2ecd3e6fb9a049ef26b6c4#heading-3
linux下设置Git的更多相关文章
- linux下设置git代理访问.
有时候克隆仓库巨慢无比,需要设置代理. 一般情况下 proxychains 可以搞定的. 但是某些情况,如go 安装模块的时候是调用git的.这个时候proxchains就不行了. go 也可以通过设 ...
- linux下设置 git ssh 代理
/root/.ssh (以下为 root权限的操作) 1. 生成key. $ ssh-keygen 一路回车,直到生成 id_rsa, id_rsa.pub 1.1 chmod 400 id_rsa. ...
- Linux下Jenkins+git+gradle持续集成环境搭建
Linux下Jenkins+git+gradle持续集成环境搭建 来源:IT165收集 发布日期:2014-08-22 21:45:50 我来说两句(0)收藏本文 一.项目介绍 和 linux ...
- 【转】在Linux下搭建Git服务器
在 Linux 下搭建 Git 服务器 环境: 服务器 CentOS6.6 + git(version 1.7.1)客户端 Windows10 + git(version 2.8.4.windows. ...
- linux下解决git clone太慢
此教程同样也适用与vscode下载太慢的问题 git和vscode会自动使用http_proxy,https_proxy环境变量的代理,所以我们只需要设置这个环境变量即可 前提 需要一个可用的代理,这 ...
- ***Linux下使用git命令及github项目
在linux下搭建git环境1.创建Github账号,https://github.com2.Linux创建SSH密钥: ssh-keygen ##一直默认就可以了 3.将公钥加入到Github账户 ...
- Linux下设置网卡静态ip
Linux下设置网卡静态ip 如果是服务器版,没有图形界面只用用命令行修改配置文件 如果是客户端版本,可以用图形界面 配置的前提是要在root用户下才能重启网卡服务 图形界面: system-conf ...
- Ubuntu Linux下设置IP的配置命令
Ubuntu Linux下设置IP的配置命令 今天装了Ubuntu,但是发现不能上网,开始排查问题: 1.首先确定网络连接是否正确,所用的网线是否可以正常工作 2.查看网卡是否能正常工作,检测的方法如 ...
- 环境部署(三):Linux下安装Git
Git是一个开源的分布式版本控制系统,可以有效.高速的处理从很小到非常大的项目版本管理,是目前使用范围最广的版本管理工具. 这篇博客,介绍下Linux下安装Git的步骤,仅供参考,当然,还是yum安装 ...
随机推荐
- 《构建之法》需求分析 读书笔记 Week6
本周选读<构建之法>第8章——需求分析.由于有团队项目初期调研阶段做调查问卷的经历,这一章节中很多知识点我都比较有体会.对我而言,这一章节最有价值的内容就是厘清了关于需求分析的两个误解和近 ...
- adb.exe端口被占用,起不来报错
一.准备部署android功能调试时:报错 Please ensure that adb is correctly located at 'D:\ProgramFiles\eclipse_jee_ox ...
- Office VBA 参考
Office VBA 参考:https://docs.microsoft.com/zh-CN/office/vba/api/overview/
- python自动化测试-使用第三方python库技术实现
转载自https://www.cnblogs.com/beer/p/5418471.html
- 【SQL】Mysql常用sql语句记录
1.创建用户.赋予权限 CREATE DATABASE scadm DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci; CREATE USER 's ...
- 【NOI2011】兔农(循环节)
我居然没看题解瞎搞出来了? 题解: 不难想到找到每次减1的位置,然后减去它对最终答案的贡献. 假设有一个地方是\(x,1(mod~k)\) 那么减了1后就变成了\(x,0\). 然后可以推到\(x,0 ...
- 线段树双tag+差分数组——cf1208E
写了一上午 /* 对于每个数组a[],先排序然后从大到小把a[i]放进线段树更新 设a[i]的位置是pos,那么其可更新的区间是[pos,w-(li-pos)] 线段树结点保存 tag=now表示当前 ...
- CF232E Quick Tortoise , Fzoj 3118
这一题由于数据较多,我们考虑离线处理. 分治.对于两个点s,t,如果起点在mid这条横线上方,终点在下方,那么它必定会穿过mid这条线.所以只要s可以到mid上一点x,x可以到t,st就是安全的. 用 ...
- (转)JMS简明学习教程
转:http://www.cnblogs.com/jjj250/archive/2012/08/08/2628552.html 基础篇 JMS是应用系统或组件之间相互通信的应用程序接口,利用它,我们可 ...
- selenium工作的大概原理
selenium的原理是什么? selenium的原理涉及到3个部分,分别是 浏览器 driver: 一般我们都会下载driver client: 也就是我们写的代码 client其实并不知道浏览器是 ...