Git的理解学习笔记。

来源:互联网 发布:u盘安装linux系统教程 编辑:程序博客网 时间:2024/05/29 18:33
<object type="application/x-shockwave-flash" style="outline:none;" data="http://cdn.abowman.com/widgets/hamster/hamster.swf?" width="300" height="225"><param name="movie" value="http://cdn.abowman.com/widgets/hamster/hamster.swf?"></param><param name="AllowScriptAccess" value="always"></param><param name="wmode" value="opaque"></param></object>

Git学习 版本控制
Git管理的是修改,而不是文件
$git status查看库状态

    Workspace:工作区
    Index / Stage:暂存区
    Repository:仓库区(或本地仓库)
    Remote:远程仓库

1.在安装好git之后设置用户名和邮箱。--global参数,用了这个参数,表示你这台机器上所有的Git仓库都会使用这个配置,当然也可以对某个仓库指定不同的用户名和Email地址。
    $ git config --global user.name "Ykuee"
    $ git config --global user.email "Ykuee@qq.com"

2.创建repository(仓库)版本库。库内所有文件都被git管理。
mkdir 创建目录
dir/ls当前路径文件
pwd显示当前路径
    $ git init //把当前目录变为库。
    Initialized empty Git repository in /*/.git/

3.添加文件
    $ git add readme.txt(例)
    $ git add **.** //可添加多个文件
    $ git commit -m "wrote a readme file"//提交
//-m是为本次提交做说明。

4.查看修改
修改readme.txt后
    $git status //查看库的当前状态。是否有文件被修改。
    $git diff readme.txt(例) 可以查看都有那些被修改。
        前面带-红色说明被删除
        +绿色新增。
    在次add commit提交改动。

----------------------------

5.版本退回
git有指针指向各种版本。
查看历史版本
    $git log //显示版本的commit编号,作者,日期和提交说明
    commit 815180d5be8e8ee8d1f5079fdf3846bee0a9b5e9
    Author: 278725692 <YKuee@qq.com>
    Date:   Wed Jun 14 10:11:06 2017 +0800

        add somuch

    commit 4c6af144e22d260f3268f2e7b157bc56bec4f6aa
    Author: 278725692 <Ykuee@qq.com>
    Date:   Wed Jun 14 09:50:34 2017 +0800

        wrote a readme file

简化显示版本
    $ git log --pretty=oneline
    815180d5be8e8ee8d1f5079fdf3846bee0a9b5e9 add somuch
    4c6af144e22d260f3268f2e7b157bc56bec4f6aa wrote a readme file

版本退回
    $ git reset --hard HEAD^ //退回上一版本 HEAD^^退回上上版本。
    $ git reset --hard HEAD~*(数字)//往上退*个版本

根据commit编号退回,也可回滚。
    $git reset --hard 815180d5 //不必全部填完。

操作过的编号都在前边显示。通过编号退回
    $ git reflog
    815180d HEAD@{0}: reset: moving to 815180d5be
    4c6af14 HEAD@{1}: reset: moving to HEAD^
    815180d HEAD@{2}: commit: add somuch
    4c6af14 HEAD@{3}: commit (initial): wrote a readme file

6.撤销修改
    $ git checkout -- *.*(filename)//还原工作区的修改
文件没有add,回到上一次的储存的版本。
文件已经add,但是又有修改,则回到add的时候。
如果想要撤销已经add的文件,使用:
    $ git reset HEAD *.*(filename)

7.删除
文件处于库中,但被删除。
一是把它从库中一并删除
    $ git rm *.*
    $ git commit -m"remove *.*"
二是不小心删除,需要恢复,但只能恢复最新版本。
    $ git checkout -- *.*

8.远程仓库
先要创建自己的SSH key
    $ ssh-keygen -t rsa -C "Ykuee@qq.com"
在GitHub网站自己的账户中添加这个key
创建远程库
本地库与远程库链接
    $ git remote add origin git@github.com:***/Gitofmine.git
将本地库内容推送到远程库
    $ git push -u origin master
从现在起,只要本地作了提交,就可以通过命令提交到GitHub:
    $ git push origin master
从远程库克隆 GitHub新建库gitskills。
    $ git clone git@github.com:***/gitskills.git

----------------------------

9.分支
master作为主分支。创建并修改其他分区并不会改变别的分区的内容,最后合并分区
branch n. 树枝,分支,部门,分科,支流
创建分支 dev
    $ git checkout -b dev
git checkout命令加上-b参数表示创建并切换,相当于以下两条命令:
    $ git branch dev
    $ git checkout dev //切换到dev分支
查看当前分支
    $ git branch
切换分支
    $ git checkout *(branch name)
列出所有本地分支
    $ git branch
列出所有远程分支
    $ git branch -r
列出所有本地分支和远程分支
    $ git branch -a
删除分支 -D 强制删除
    $ git branch -d *(branch name)
合并某分支到当前分支
    $ git merge *(branch name)
查看分区合并图
    $ git log --graph
关闭Fast forward模式
在合并时创建新的commit。
    $ git merge --no-ff -m "merge with no-ff" dev

储存当前分支的工作现场。挂起。
    $ git stash
查看
    $ git stash list
恢复与删除
    $ git stash apply
    $ git stash drop
恢复并删除
    $ git stash pop
通过list恢复指定的stash
    $ git stash apply stash@{0}

-------------------------
删除远程分支
    $ git branch -r -d origin/branch-name  
    $ git push origin :branch-name  

----------------
常用命令总结
$ git init  // 初始化一个Git仓库
$ git status   // 查看仓库的状态
$ git add .   // 将所有修改添加到暂存区
$ git add *  // Ant风格添加修改
$ git add *Controller   // 将以Controller结尾的文件的所有修改添加到暂存区

$ git add Hello*   // 将所有以Hello开头的文件的修改添加到暂存区             例如:HelloWorld.txt,Hello.java,HelloGit.txt ...

$ git add Hello?   // 将以Hello开头后面只有一位的文件的修改提交到暂存区 例如:Hello1.txt,HelloA.java 如果是HelloGit.txt或者Hello.java是不会被添加的

可以多次添加然后在提交
$ git commit -m "comment"  // 将暂存区的修改提交到仓库 后面添加上有意义的注视信息

$ git diff  file  // 在file被修改了还未提交的时候查看修改的部分(和版本库中最新版本的不同 diff == difference 不同)

$ git log  // 查看git的commit信息,每次提交的信息包括注视在内,从最新提交到最久提交

$ git log --pretty=oneline   // 将commit 信息简化成一行显示
注意Git的版本号(commit id)是SHA1值ea34578d5496d7dd233c827ed32a8cd576c5ee85

$ git reset --hard HEAD^   // 退回到相对于当前版本的上一个版本 HEAD 表示当前版本

$ git reset --hard HEAD^^  // 退回到相对于当前版本的上上一个版本  HEAD 代表当前版本

$ git reset --hard HEAD~100 //退回到相对于当前版本的上 100 个版本去  HEAD 表示当前版本

$ git reset --hard 3628164  // 退回到指定的版本   这里不需要全部写commit id  Git 回去自动适配

Git的版本回退速度非常快,因为Git在内部有个指向当前版本的HEAD指针,当你回退版本的时候,Git仅仅是把HEAD从指向append GPL

$ git reflog   // 在退回到旧版本之后可以查看旧版本之前的提交日志
当我们想从一个旧版本退回到新版本但是我们关闭了shell窗口,不能查看之前的commit id了,就可以通过

$ git reflog 查看到之前的版本的commit id
$ git reset --hard 3628164

修改只能在被add 到暂存区以后才能被提交
在file 已经修改还未add的时候

$ git checkout --file  // 表示丢弃工作区的修改退回原始状态(不包括以及添加到暂存区的修改)

file已经修改和添加到了暂存区,还未commit
$ git reset HEAD file   // 丢弃file已经添加到暂存区的修改  HEAD 表示最新版本

如果file修改已经提交到本地仓库
$ git reset --hard HEAD^   //退回到上一个版本

--------
$ rm file  // 从文件系统中删除文件(Git 中还是有记录),$ git status 的时候Git 会告诉你有一个file 被删除了
$ git rm file  // 从Git版本库中删除文件(同时从文件系统中删除文件)
$ git status  正常


$ git rm file  // 从git版本库中删除文件
$ git commit -m "delete file" // 提交删除
$ git checkout file  // 想要从git恢复 会出现:error: pathspec 'README.txt' did not match any file(s) known to git.
$ git reset --hard HEAD^  // 恢复到上一个版本 可以恢复文件

$ rm file   //在文件系统中删除文件
$ git checkout file  // 由于是通过文件系统删除的所以可以通过checkout恢复
----------
$ ssh-keygen -t rsa -C "youremail@example.com"  // 创建SSH Key
由于这个Key也不是用于军事目的,所以也无需设置密码,所以一路回车就好,
如果顺利会在user下UserName目录中生成一个.ssh目录里面有id_rsa和id_rsa.pub两个文件
id_rsa是私钥,不能泄露出去,id_rsa.pub是公钥,可以告诉他人还有在github上添加的也是这个公钥
登陆GitHub,打开“Account settings”,“SSH Keys”页面,点“Add SSH Key”,填上任意Title,在Key文本框里粘贴id_rsa.pub文件的内容
GitHub允许你添加多个Key。假定你有若干电脑,你一会儿在公司提交,一会儿在家里提交,只要把每台电脑的Key都添加到GitHub,就可以在每台电脑上往GitHub推送了
--------------------
做全局的配置
$ git config --global user.name "zhangsan"
$ git config --global user.email "zhangsan@139.com"
$ git remote add origin git@github.com:zhangsan/ylez.git // 添加一个远程仓库
  // add origin 就是添加一个远程仓库
  // git@github.com:zhangsan/ylez.git  是远程仓库的地址
  // git@github.com 主机的地址  我们可以通过GitLab大家自己的git服务器
  // zhangsan 是你的用户名
  // /ylez.git 是你的仓库名
$ git push -u origin master  // 将本地的master分支推送到远程的master分支中
$ git push -u origin dev    // 本地切换到dev分支然后将本地的dev分支推送到远程

克隆远程仓库到本地
Git支持多种协议,包括https,但通过ssh支持的原生git协议速度最快。
$ git clone git@192.168.0.8:zhangsan/test.git  // 讲一个远程的仓库克隆到本地

$ git branch   // 查看git的所有分支
$ git branch dev  // 创建dev分支
$ git checkout dev  // 切换到一个已经存在的分支
$ git checkout -b dev  // 创建dev分支,并切换到dev分支
$ git branch -d dev  // 删除dev分支

$ git checkout master  // 切换到主分支
$ git merge dev   // 将dev分支合并到master分支