zoukankan      html  css  js  c++  java
  • Title

    一、安装Git

       1、下载Windows版的Git:msysgit;官方下载地址:http://msysgit.github.io,安装选定要安装的目录(路径杜绝中文),剩下的按照默认安装即可,参考:GIt安装教程 。

       2、安装完成后,在开始菜单里找到“Git”->“Git Bash”,弹出一个类似命令行的窗口;或是在CMD命令提示符下,输入git回车可以看到很多提示,就说明Git安装成功!

       3、初始化目录 生成隐藏文件 .git 负责版本的保存

    mu@mu-PC MINGW64 /c/guotianbao
    $ git init
    Initialized empty Git repository in C:/guotianbao/.git/

       4、安装完成后,因为Git是分布式版本控制系统,所以,每个机器都必须自报家门:你的名字和Email地址,在命令行输入:  

    mu@mu-PC MINGW64 /c/guotianbao (master)
    $ git config --local user.name 'guotianbao'
    
    mu@mu-PC MINGW64 /c/guotianbao (master)
    $ git config --local user.email 'gmu1592618@gmail.com'
    

     二、常用命令

    1.基本命令

      -1.查看状态

    $ git status //查看工作区状态
    $ git diff //若git status提示有文件被修改,则可执行此命令查看修改的内容
    

        执行git status命令会看到两部分,上边是文件提交的暂存区,下边是文件所在的工作区;在当前工作区,而没有提交到暂存区的文件颜色是红色的,提交到暂存区的文件是绿色的,如果工作台面是干净的话,证明所有文件已提交到仓库。

      -2.提交数据

    $ git add .                     #提交所有文件
    $ git commit -m "自定义提交信息"  #提交注释
    

         $ git add . 把文件从工作区提交到暂存区

         $ git commit 把暂存区的所有内容提交到当前分支(仓库)

       -3.查看文件信息

    $ git ls-tree head   #查看版本(分支)中所有的文件
    $ git ls-files -s    #查看暂存区和版本中所有文件的详细信息
    $ git ls-files       #仅查看所有的文件名
    

      -4.查看所有日志

    $ git log    //显示操作日志
    $ git log  --pretty=oneline //显示精简信息
    $ git reflog //查看所有的日志
    

      -5.回滚版本

    #方式一: (三步操作)
        $ git reset --soft 版本号  #从分支回到暂存区
        $ git reset head 文件      #从暂存区回到修改过的内容
        $ git check out  文件      #从修改过的文件到原文件
    #方式二: (两部步操作)
        $ git reset --mix 版本号   #从分支回到修改过的内容 == git reset 版本号
        $ git check out  文件      #从修改过的文件到原文件
    #方式三: (一部步操作)
        $ git reset --hard 版本号  #从分支回到原文件
    

      -6.删除文件

    $ git rm test.txt
    $ git commit -m "remove test.txt"  
    2. 场景案例模拟

    示例一:

    1.  创建msg.py 写入短信功能代码并提交到分支

    mu@mu-PC MINGW64 /c/guotianbao (master)
    $ git add .
    
    mu@mu-PC MINGW64 /c/guotianbao (master)
    $ git commit -m '开发短信功能'
    [master (root-commit) 99afeac] 开发短信功能
     1 file changed, 1 insertion(+)
     create mode 100644 msg.py
    

    2.回滚到无短信功能的版本

    mu@mu-PC MINGW64 /c/guotianbao (master)
    $ git log
    commit 99afeacb8e856c7c4fd66cde1d633923703775f7 (HEAD -> master)
    Author: guotianbao <gmu1592618@gmail.com>
    Date:   Sat Nov 4 08:09:18 2017 +0800
    
        开发短信功能
    
    mu@mu-PC MINGW64 /c/guotianbao (master)
    $ git reset --hard 99afeacb8e856c7c4fd66cde1d633923703775f7
    HEAD is now at 99afeac 开发短信功能
    

    3.直接再次回滚到有短信功能的版本

    mu@mu-PC MINGW64 /c/guotianbao (master)
    $ git reflog
    99afeac (HEAD -> master) HEAD@{0}: reset: moving to 99afeacb8e856c7c4fd66cde1d633923703775f7
    39b29ba HEAD@{1}: commit: 增加aaa
    99afeac (HEAD -> master) HEAD@{2}: reset: moving to 99afeacb8e856c7c4fd66cde1d633923703775f7
    99afeac (HEAD -> master) HEAD@{3}: commit (initial): 开发短信功能
    
    mu@mu-PC MINGW64 /c/guotianbao (master)
    $ git reset --mix 39b29ba
    Unstaged changes after reset:
    M       msg.py
    
    mu@mu-PC MINGW64 /c/guotianbao (master)
    $ git checkout msg.py
    
    # 底下两部操作等于 git reset --hard 版本号
        git reset --mix 版本号
        git checkout 文件名
    

    示例二:

        stash 将工作区做的所有修改(做到一半的操作)保存到一个临时地方  

    #- 正在写代码(a.txt),发现线上代码(a.txt)有bug,先把现在代码保存到临时空间
    #- 修改完bug(a.txt)提交,再次取回之前保存的文件,这时发现之前保存的代码和提交的bug是同一个文件,有冲突
    #- 这时(a.txt)中两者都保留,手动保留想要的代码,再次提交
    
    #临时保存现在写的代码
    git stash  
    
    #去修改出现bug再次提交 
    bug....# 解决bug的过程
    git add .
    git status
    git commit -m "修改完bug"
    git status
    
    #切回之前保存的状态 git stash pop
      -如果修改的文件和保存的文件是同一个文件,则此文件中会保留两者的代码,需手动改回自己需要的代码
      - 如果不是同一个文件,则直接提交
    git stash pop
    git add .
    git status
    git commit -m "bug上又一次修改"
    具体过程
    3.分支  
    dev     #负责开发新功能
    bug     #负责修复线上的bug
    master  #线上代码
    
    ###分支
    
    #dev分支
        git branch       #查看所有分支
          * master       #前面有*号代表是当前分支
        
        git branch dev   #创建dev分支
        
        git branch       #查看所有分支
            dev
          * master       #前面有型号代表是当前分支
          
        git checkout dev #切换到dev分支
        
        git branch
          * dev          #当前分支
            master
    
    
    #bug分支
        git branch bug   #给master创建一个bug分支
        git branch       #查看当前分支
            bug
            dev
          * master       #当前所在分支
          
        git checkout bug #切换到bug分支
        git branch
          * bug
            dev
            master
    
    #修改完bug 把bug分支和master合并
        git checkout master #切换到master分支,然后合并bug分支
        git merge bug
        
    # 删除分支
        git branch -d bug   #只删除完成合并之后的dev分支
        git branch -D bug   #强制删除dev分支
    创建、合并、删除分支
    4.远程仓库

      由于本地Git仓库和GitHub仓库之间的传输是通过SSH加密的,所以,需要如下设置:

      第1步:创建SSH Key。在用户主目录下(例如:C:UsersAdministrator),看看有没有.ssh目录,如果有,再看看这个目录下有没有id_rsa和id_rsa.pub这两个文件,如果已经有了,可直接跳到下一步。如果没有,打开Shell(Windows下打开Git Bash),创建SSH Key: 

    $ ssh-keygen.exe //创建SSH key 【公钥和私钥,连接省却了用户名密码的输入】git窗口下,直接执行ssh-keygen.exe,默认往下执行,然后把公钥复制到github上
    

      如果一切顺利的话,可以在用户主目录里找到.ssh目录,里面有id_rsaid_rsa.pub两个文件,这两个就是SSH Key的秘钥对,id_rsa私钥,不能泄露出去,id_rsa.pub公钥,可以放心地告诉任何人。
      第2步:登陆GitHub,打开“settings”,“SSH and GPG Keys ”页面,然后,点“New SSH Key”,填上任意Title,在Key文本框里粘贴id_rsa.pub文件的内容,最后点击“Add Key”按钮完成。
      说明:为什么GitHub需要SSH Key呢?因为GitHub需要识别出你推送的提交确实是你推送的,而不是别人冒充的,而Git支持SSH协议,所以,GitHub只要知道了你的公钥,就可以确认只有你自己才能推送。当然,GitHub允许你添加多个Key。
      假定你有若干电脑,你一会儿在公司提交,一会儿在家里提交,只要把每台电脑的Key都添加到GitHub,就可以在每台电脑上往GitHub推送了。  

    添加远程仓库

      1、登录GitHub网站,并按网站要求创建一个新的仓库;

      2、根据GitHub网站提示,可以从这个仓库克隆出新的仓库,也可以把一个已有的本地仓库与之关联,然后,把本地仓库的内容推送到GitHub仓库。

      3、本地仓库与GitHub上相应的仓库建立关联,代码如下:(git@github.com:tianbaoo/test.git为我新建的仓库路径)

    $ git remote add origin git@github.com:tianbaoo/test.git
    

      添加后,远程库的名字就是origin,这是Git默认的叫法,也可以改成别的,但是origin这个名字一看就知道是远程库。

      4、把本地库的内容推送到远程库上,用git push命令,实际是把当前分支master推送到远程。

    $ git push -u origin master
    

      由于远程库是空的,我们第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令(不用带-u参数)。当然也可以不写!就需要你手动输入yes
      当你第一次使用Git的clone或者push命令连接GitHub时,会得到一个警告,这是因为Git使用SSH连接,而SSH连接在第一次验证GitHub服务器的Key时,需要你确认GitHub的Key的指纹信息是否真的来自GitHub的服务器,输入yes回车即可。  

      5、通过GitHub上的仓库来克隆出新的本地仓库(可以在任意一个文件夹下,建议最好在一个固定的盘下方便于管理),要克隆一个仓库,首先必须知道仓库的地址,然后使用 git clone命令克隆从远程库克隆到本地(说白了就是下载版本库)。代码如下:  

    $ git clone git@github.com:tianbaoo/test.git //应用场景:切换办公地点:家和公司,第一次都能从远程库上克隆然后进行开发!

    注意点:执行clone命令,实质上内部已经完成了初始化git库和本地与远程库连接的过程(内部config文件,已写好命名,同时远程库名字默认为origin)!

      也许还注意到,GitHub给出的地址不止一个,还可以用 https://github.com/tianbaoo/test.git 这样的地址。实际上,Git支持多种协议,默认的git://使用ssh,但也可以使用https等其他协议。使用https除了速度慢以外,还有个最大的麻烦是每次推送都必须输入口令,但是在某些只开放http端口的公司内部就无法使用ssh协议而只能用https。Git支持多种协议,包括https,但通过ssh支持的原生git协议速度最快。

    本地和远程仓库

    #本地代码推送到远程仓库
    git remote add origin git@github.com:tianbaoo/test.git  #设置远程仓库并设置别名origin
    git checkout master       #把当前分支切换到master分支
    git push origin master    #推送到master分支
     
    #从远程仓库拉代码
    git clone git@github.com:tianbaoo/test.git
    cd test/
    git branch          #只下载master分支
        #* master
    git branch  -a      #查看所有分支 有远程的分支
        * master
          remotes/origin/HEAD -> origin/master
          remotes/origin/dev
          remotes/origin/master
    git branch dev origin/dev       #拉远程分支的代码
    git branch
            dev
        *  master
    常用命令

    现实场景:

      在公司进行开发代码,代码没有写完,想要回家加班继续写,然后应该把公司的代码push到服务器上

    $ git remote add origin https://github.com/tianbaoo/test.git #给自己的远程库起origin别名
    
    $ git checkout master     # 切换到master分支
    $ git push origin master  # 把master分支推送到GitHub上
    

      回到家以后先把代码clone下来,进行修改后,再push到远程仓库上

    $ git clone https://github.com/tianbaoo/test.git #去GitHub上把代码复制下来
    
    $ cd test/ #进入test文件夹
    
    $ git branch dev origin/dev #创建一个跟远程仓库同名的dev分支
    $ git checkout dev          #切换到dev分支下
    
    #写代码. . .
    	. . .
    	. . .
    
    $ git add .                       #加到暂存区
    $ git commit -m '自定义提交信息'  #加到分支
    $ git push origin dev             #把dev分支提交到远程仓库orgin
    
    公司:
        git checkout dev
        #选其中一个
        git fetch origin dev    #从远程拉到本地的仓库 还需要 git reset --hard 文件        
        git pull origin dev     #从远程拉到原文件
        
        #----------提交成功完成-----------
        功能11
            git add .
            git commit ...
            git push origin dev
        #----------忘记提交,下班回家-------
        功能12:
            git add .
            git commit ...
            git push origin dev
    回家:
        git branch dev
        git pull origin dev
        功能13:
            git add .
            git commit ...
            git push origin dev
    
    
    #现在处于功能12没有提交的状态
    #先拉代码查看功能13和功能12是否有冲突,如果有冲突,手动修改 不能直接提交        
    公司:
        获取代码,
            git pull origin dev
            
            无冲突:过
            有冲突:
                手动解决
                git add .
                git commit -m '解决冲突'
    后续

    情景:

    第一步:在github上创建项目myblog,然后本地在blog目录下启动GIT执行命令git init

    第二步:git add .  然后再次 git commit -am "第一次提交项目"

    导致github上的版本里有文件和本地版本冲突,下面给出冲突原因:

    1 $ git push -u origin master
    2 Username for 'https://github.com': tianbaoo
    3 To https://github.com/tianbaoo/myblog.git
    4 ! [rejected] master -> master (non-fast-forward)
    5 error: failed to push some refs to 'https://github.com/tianbaoo/myblog.git'
    6 hint: Updates were rejected because the tip of your current branch is behind
    7 hint: its remote counterpart. Integrate the remote changes (e.g.
    8 hint: 'git pull ...') before pushing again.
    9 hint: See the 'Note about fast-forwards' in 'git push --help' for details. 
    View Code

    解决方法:

      git push -u origin master -f

    上述问题仅会在第一次提交可能出现。

    重点:对于多人协调开发时,提交也可能会出现冲突,因为别人可能已经比你更快的提交了,此时你只能把远程的克隆下来,合并,解决冲突后再提交

     

     

    git工作的一般流程:http://blog.csdn.net/javyzheng/article/details/50311175

    参考资料:Git开发 、 廖雪峰 、 武老师

  • 相关阅读:
    使用canvas实现擦玻璃效果
    安装jdk For Windows
    墙裂推荐4款js网页烟花特效
    再次推荐一款逼真的HTML5下雪效果
    HTML5播放暂停音乐
    周末web前端练习
    Javascript贪食蛇小游戏
    jquery实现更多内容效果
    jQuery省市区三级联动插件
    Web前端测试题
  • 原文地址:https://www.cnblogs.com/guotianbao/p/7779227.html
Copyright © 2011-2022 走看看