3小时学会使用Git

GIT不仅仅是个版本控制系统,她还是个内容管理系统(CMS),工作管理系统等
git与svn的区别点:
 1)GIT是分布式的,SVN不是,这也是最核心的区别;
 2)GIT把内容按元数据方式存储,而SVN是按文件:所有的资源控制系统都是把文件的元信息隐藏在一个类似.svn,.cvs等的文件夹里;
 3)GIT分支和SVN的分支不同:分支在svn中一点不特别,就是版本库中的另外的一个目录;
 4)GIT没有一个全局的版本号,而SVN有:目前为止这是跟SVN相比GIT缺少的最大的一个特征;
 5)GIT的内容完整性要优于SVN:git的内容存储使用的是SHA-1哈希算法,保证代码内容的完整性。
GIT配置
 git提供了一个叫做git config的工具,专门用来配置或者读取相应的都工作环境变量。
 这些环境变量,决定了git在各个环节的具体工作方式和行为。这些变量存放在三个不同的地方:
 /etc/gitconfig文件:系统中对所有用户都普遍适用的配置。若使用git config时用 --system选项,读写的就是这个文件
 ~/.gitconfig文件:用户目录下的配置文件只适用于该用户。若使用git config时用 --global选项,读写的就是这个文件
 当前项目的Git目录中的配置文件(也就是工作目录中的./git/config文件):这里的配置仅仅针对当前项目有效。每个级别的配置都会覆盖上层的相同配置。
 用户信息
 配置个人的用户名称和电子邮件地址:
 git config --global user.name "runoob"
 git config --global user.email test@runoob.com
 文本编辑器
 git config --global core.editor emacs
 差异分析工具
 git config --global merge.tool vimdiff
 查看配置信息
 git config --list 对于出现重复的变量名,那就说明他们来自不同的配置文件,不过最终Git实际采用的是最后一个。
 也可以直接查看某一个环境变量的设定:git config user.name
GIT工作流程 
 一般的工资流程如下:
 克隆Git资源作为工作目录。
 在克隆的资源上添加或者修改文件
 如果其他人修改了,你可以更新资源
 在提交之前查看修改
 提交修改
 在修改完成后,如果发现错误,可以撤回提交并再次修改并提交
GIT工作区,暂存区和版本库
 工作区:就是你在电脑里能够看那到的目录
 暂存区:英文名stage,或者index.一般存放在.git目录下的index文件中,所以我们把暂存区有时也叫作索引。
 版本库: 工作区中有一个隐藏的目录.git,这个不算工作区,而是Git的版本库。
 当对工作区修改或者是新增的文件执行git add命令时,暂存区目录树被更新,同时工作区修改的文件内容被写入到对象库中的一个新对象中,而该对象的ID被记录在暂存区的文件索引中。
 当执行提交操作git commit时,暂存区的目录树写到版本库中,master分支会做出相应的更新。即master指向的目录树就是提交时暂存区的目录树
 当执行git reset HEAD命令时,暂存区的目录树会被重写,被master分支指向的目录树所替换,但是工作区不受影响。
 当执行git rm -cached <file> 命令时,会直接从暂存区删除文件,工作区则不做出改变
 当执行git checkout . 或者git checkout --<file>命令时,会用暂存区全部或指定的文件替换工作区的文件,会覆盖掉工作区中未保存的内容
 当执行git checkout HEAD . 或者git checkout HEAD <file>命令时,会用HEAD指向的master分支中的全部或者部分文件替换暂存区和工作区中的文件
Git创建仓库
 git init :用来初始化一个Git仓库,使用当前目录作为仓库,则直接执行git init,如果想指定某一目录为仓库则git init newrepo
 如果当前目录下有几个文件想要纳入版本控制,需要先用git add命令告述Git开始对这些文件进行跟踪,然后提交:
 git add *.c //批量添加
 git add readme //单独添加
 git commit -m '初始化项目版本'
 
 git clone: 用来从现有Git仓库中拷贝项目
 克隆仓库的命令格式为:git clone <repo>
 如果需要克隆到指定目录:git clone <repo> <directory> 比如,$ git clone git://github.com/schacon/grit.git mygrit
GIT基本操作
获取与创建项目命令
git init 本地化一个仓库
git clone拷贝一个Git仓库到本地,让自己能够查看该项目,或者进行修改。
git add 添加文件到缓存 git add 文件名 /git add . 
git status -s 查看项目的当前状态 'AM'状态的意思是,这个文件在我们将它添加到缓存之后又有改动,改动后又执行了add操作;-s表示获取简短的结果输出。
git diff :来查看执行git status的结果的详细信息
git diff 命令显示已写入缓存与已修改但尚未写入缓存的改动的区别
git diff 尚未缓存的改动
git diff --cached 查看已缓存的改动
git diff HEAD 查看已缓存的与未缓存的所有改动
git diff --stat 显示摘要而非整个diff 
对比:git status 显示你上次提交后的更改或者写入缓存的改动,而git diff 一行一行地显示这些改动具体是啥
git commit  使用add命令将想要快照的内容写入缓存区,而执行commit将缓存区内容添加到仓库中。
如果你觉得git add提交缓存的流程太过繁琐,可以通过git commit -a 来完成
git reset HEAD 命令用于取消已缓存的内容
git rm 会将条目从缓存区中移除。默认情况下git rm file会将文件从缓存区和你的硬盘中(工作目录)删除
如果你要在工作目录中留着该文件,可以使用git rm --cached:
git mv命令用于移动或者重命名一个文件,目录,软连接。git mv read readme 修改文件read 为readme


Git分支管理
几乎每一种版本控制系统都以某种形式支持分支,使用分支意味着你可以从开发主线上分离开来,然后在不影响主线的同时继续工作。
创建分支命令:git branch (branchname)
切换分支命令:git checkout (branchname)
合并分支命令:git merge 
列出分支基本命令: git branch 没有参数时,git branch会列出你在本地的分支
git branch testing
git branch 会显示出testing分支
git checkout master 切换到master分支,我们也可以使用git checkout -b (branchname)命令来创建新分支并立即切换到该分支,从而在该分支中操作。
git branch -d (branchname) 删除分支命令 如git branch -d testing
分支合并
git merge 
$ git branch
* master
  newtest
$ ls
README test.txt test2.txt
$ git merge newtest
Updating 2e082b7..556f0a0
Fast-forward
 test2.txt | 1 -
 1 file changed, 1 deletion(-)
 delete mode 100644 test2.txt
$ ls
README test.txt
以上实例中我们将 newtest 分支合并到主分支去
git diff 查看冲突文件的不同之处
解决冲突后,通过git add 告述Git文件冲突已经解决
Git 查看提交历史
git log命令查看提交历史
git log --oneline 查看历史纪录的简洁的版本 --graph选项,查看历史中什么时候出现了分支,合并,--reverse 来逆向显示所有日志
如果只想查看指定用户的提交日志可以使用命令git log --author=Linux --online -5
如果你要指定日期,可以执行几个选项:--since 和 --before ,但是你也可以用--until和--after
$ git log --oneline --before={3.weeks.ago} --after={2010-04-18} --no-merges
Git标签
如果你达到一个重要的阶段,并希望永远记住那个特别的提交快照,你可以使用git tag 给它打上标签
如:git tag -a v1.0 给最新一次提交打上(HEAD) "v1.0" 的标签
-a选项意为"创建一个带注解的标签".不用-a选项也可以执行的,但它不会记录这标签是啥时候打的,谁打的,也不会让你添加标签的注解
git tag -a v2.0 已提交的版本号
git tag 查看所有标签
Git远程仓库(Github)
添加远程库
要添加一个新的远程仓库,可以指定一个简单的名字,以便将来引用,命令格式如下:
git remote add [shortname] [url]
由于你的本地Git仓库和GitHub仓库之间的传输是通过SSH加密的,所以我们需要配置验证信息:
使用以下命令生成SSH Key:
ssh-keygen -t rsa -C "youremail@example.com"
后面的 your_email@youremail.com 改为你在 github 上注册的邮箱,之后会要求确认路径和输入密码,我们这使用默认的一路回车就行。成功的话会在~/下生成.ssh文件夹,进去,打开 id_rsa.pub,复制里面的 key。
回到 github 上,进入 Account => Settings(账户配置)。
为了验证是否成功,输入以下命令:
$ ssh -T git@github.com
Hi tianqixin! You've successfully authenticated, but GitHub does not provide shell access.
现在我们根据GitHub的提示在本地的仓库下运行命令:
$ mkdir runoob-git-test                     # 创建测试目录
$ cd runoob-git-test/                       # 进入测试目录
$ echo "# 菜鸟教程 Git 测试" >> README.md     # 创建 README.md 文件并写入内容
$ ls                                        # 查看目录下的文件
README
$ git init                                  # 初始化
$ git add README.md                         # 添加文件
$ git commit -m "添加 README.md 文件"        # 提交并备注信息
[master (root-commit) 0205aab] 添加 README.md 文件
 1 file changed, 1 insertion(+)
 create mode 100644 README.md


# 提交到 Github
$ git remote add origin git@github.com:tianqixin/runoob-git-test.git
$ git push -u origin maste
接下来我们返回 Github 创建的仓库,就可以看到文件已上传到 Github上
查看当前的远程库
git remote -v
提取远程仓库
Git有两个命令用来提取远程仓库的更新
1,从远程仓库下载新分支与数据:
git fetch 该命令执行完成后需要执行git merge远程分支到你所在的分支
2,从远端仓库提取数据并尝试合并到当前分支:
git pull 该命令就是在执行git fetch 之后紧接着执行git merge远程分支到你所在的任意分支
假设你配置好了一个远程仓库,并且你想要提取更新的数据,你可以首先执行 git fetch [alias] 告诉 Git 去获取它有你没有的数据,然后你可以执行 git merge [alias]/[branch] 以将服务器上的任何更新(假设有人这时候推送到服务器了)合并到你的当前分支。
如:git fetch origin 查看分支是否被更新,如果已经更新,我们尅有使用以下命令将同步更新到本地
git merge origin/master
推送到远程仓库
推送你的新分支与数据到某个远端仓库命令:
git pull [alias] [branch] 将你的[branch]分支推送成为[alias]远程仓库上的[branch]分支。
 touch runoob-test.txt      # 添加文件
$ git add runoob-test.txt 
$ git commit -m "添加到远程"
master 69e702d] 添加到远程
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 runoob-test.txt


$ git push origin master    # 推送到 Github
删除远程仓库
git remote rm [别名]

Git服务器搭建

远端master回滚的流程:

首先备份当前的master分支,防止回滚失败。

其次,备份完成后,将master回滚到指定的版本

注意这个地方,是将本地的master分支回滚到指定的版本。

方法:Git reset –hard commit-id

回滚本地master并push到远端master,用于覆盖远端master分支。

方法为:通过git命令,必须通过命令来,sourcetree的方式不可行。

命令为:git push -f origin master。必须有-f,表示强制的意思。

此时,会要求用户输入远端仓库的用户名和密码,用于确认当前用户具有-f的权限。

最后成功后删除备份的master了。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值