zoukankan      html  css  js  c++  java
  • git 操作详情

    Git 教程

    1.Git 是一个开源的分布式版本控制系统

    2.Git 是 Linux Torvalds 为了帮助管理 Linux 内核开发而开发的一个开源版本控制软件

    3.Git 与常用的版本控制工具 CVS,Subversion 而不同,采用了分布式版本库的方式,不需要服务端软件的支持

    Git 与 SVN 的区别

    1. Git 是分布式的,SVN 不是

    2.Git 把内容按元数据方式存储,而 SVN 是按文件,即把所有资源控制系统都是把文件的原信息隐藏在  .svn , .cvs 的文件中

    3.git 分支与 svn 的分支不同,在svn 中分支是版本库的另一个目录

    4.git 内容完整性要优胜 svn , git 的内容存储使用的是 SHA-1 哈希算法,这确保代码内容的完整性

     

     配置用户信息

    $ git config --global user.name "runoob"
    $ git config --global user.email test@runoob.com

    如果用了 --global 选项,那么更改的配置文件就是位于你用户主目录下的那个,以后你所有的项目都会默认使用这里配置的用户信息。

    如果要在某个特定的项目中使用其他名字或者电邮,只要去掉 --global 选项重新配置即可,新的设定保存在当前项目的 .git/config 文件里。

    查看配置信息

    git  config --list

    查看 git 版本信息

    git --version

    Git 工作流程

    一般工作流程如下:

    • 克隆 Git 资源作为工作目录。
    • 在克隆的资源上添加或修改文件。
    • 如果其他人修改了,你可以更新资源。
    • 在提交前查看修改。
    • 提交修改。
    • 在修改完成后,如果发现错误,可以撤回提交并再次修改并提交。

     Git 工作区、缓存区、版本库

    工作区: 就是电脑里能看到的目录

    暂存区:英文名 stage,或者 index. 一般存在 .git 目录下 index 文件中,暂存区有时也称为 索引(index)

    版本库: 工作区有一个隐藏的 .git ,是 git 的版本库

    图中左侧为工作区,右侧为版本库。在版本库中标记为 "index" 的区域是暂存区(stage, index),标记为 "master" 的是 master 分支所代表的目录树。

    图中我们可以看出此时 "HEAD" 实际是指向 master 分支的一个"游标"。所以图示的命令中出现 HEAD 的地方可以用 master 来替换。

    图中的 objects 标识的区域为 Git 的对象库,实际位于 ".git/objects" 目录下,里面包含了创建的各种对象及内容。

    当对工作区修改(或新增)的文件执行 "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 使用 git init 命令初始化一个仓库,执行该命令后 git 仓库会形成一个 .git 目录,该目录包含了资源的所有元数据,其他的项目目录保持不变。

    git init

    如果该目录下有几个文件想纳入版本控制,需要先使用 git add 命令告诉 Git 开始对文件进行跟踪 ,然后提交

    $ git add *.c
    $ git add README
    $ git commit -m '初始化项目版本'

    Git 从远程仓库拷贝代码到本地

    $ git clone git://github.com/schacon/grit.git

    执行该命令后,会在当前目录下创建一个名为grit的目录,其中包含一个 .git 的目录,用于保存下载下来的所有版本记录。

    如果要自己定义要新建的项目目录名称,可以在上面的命令末尾指定新的名字:

    $ git clone git://github.com/schacon/grit.git mygrit

    Git 分支管理

     Git 创建分支命令

    git  branch  分支名称

    切换分支

    git checkout 分支名称

    合并分支

    git merge

    Git 查看提交历史

    查看提交历史

    git  log

    查看历史的简洁版本

    git log --oneline

    查看历史中出现的分支、合并

    git log --graph

    逆向显示所有的

    $ git log --reverse --oneline

    只查看指定用户的提交日志

    $ git log --author=Linus --oneline -5

    Git  Github

    查看当前远程库

    git remote
    git remote -v

    提取远程仓库

    从远程仓库下载新分支与数据

    git fetch

    该命令执行完后需要执行git merge 远程分支到你所在的分支。

    git merge

    推送到远程仓库

    git push  分支名称
    $ git push origin master    # 推送到 Github
    • 执行 git fetch origin master 时,它的意思是从名为 origin 的远程上拉取名为 master 的分支到本地分支 origin/master 中。既然是拉取代码,当然需要同时指定远程名与分支名,所以分开写。
    • 执行 git merge origin/master 时,它的意思是合并名为 origin/master 的分支到当前所在分支。既然是分支的合并,当然就与远程名没有直接的关系,所以没有出现远程名。需要指定的是被合并的分支。
    • 执行 git merge origin/master 时,它的意思是合并名为 origin/master 的分支到当前所在分支。既然是分支的合并,当然就与远程名没有直接的关系,所以没有出现远程名。需要指定的是被合并的分支。
    • 还可以一次性拉取多个分支的代码:git fetch origin master stable oldstable
    • 也还可以一次性合并多个分支的代码:git merge origin/master hotfix-2275 hotfix-2276 hotfix-2290
  • 相关阅读:
    DM数据库disql的使用 Disql disql 达梦数据库Disql
    移动端禁止蒙层下的页面滚动
    移动端如何自动适配px
    使用Vant做移动端对图片预览ImagePreview和List的理解
    uniapp中使用uView组件库
    h5使用vuephotopreview 做全屏预览
    jsonview的实现
    PC端自适应使用rem 移动端适配升级版
    axios解决跨域问题(vuecli3.0)
    vs code 配置git path
  • 原文地址:https://www.cnblogs.com/baizhuang/p/11606872.html
Copyright © 2011-2022 走看看