zoukankan      html  css  js  c++  java
  • git基础知识

    Git的两大功能

         1.协作开发

         2.版本控制

    版本库

            版本库又名仓库,英文名repository,你可以简单理解成一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改、删除,Git都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻可以“还原”.

            所以,创建一个版本库非常简单    首先,选择一个合适的地方,创建一个空目录:

             1. mkdir  git_project

             2. cd git_project

             3. git init           

         瞬间Git就把仓库建好了,而且告诉你是一个空的仓库(empty Git repository),细心的读者可以发现当前目录下多了一个.git的目录,这个目录是Git来跟踪管理版本库的,没事千万不要手动修改这个目录里面的文件,不然改乱了,就把Git仓库给破坏了

         2.把文件添加到版本库

            所有的版本控制系统,其实只能跟踪文本文件的改动,比如TXT文件,网页,所有的程序代码等等,Git也不例外。版本控制系统可以告诉你每次的改动,比如在第5行加了一个单词“Linux”,在第8行删了一个单词“Windows”。而图片、视频这些二进制文件,虽然也能由版本控制系统管理,但没法跟踪文件的变化,只能把二进制文件每次改动串起来,也就是只知道图片从100KB改成了120KB,但到底改了啥,版本控制系统不知道,也没法知道。

      

     HEAD变量指向git当前管理的版本,可以通过不断改变HEAD的指向来回滚到之前提交过的任何版本

     git代码一旦提交到代码仓库,即使文件被删除也能被恢复过来.只有文件添加在暂存区中才可能被彻底删除

      

    Git文件版本管理命令

    • git init,初始化,表示即将对当前文件夹进行版本控制。
    • git status,查看Git当前状态,如:那些文件被修改过、那些文件还未提交到版本库等。
    • git add 文件名,将指定文件添加到版本库的暂存状态。
    • git commit -m '提交信息',将暂存区的文件提交到版本库的分支 如果当前在master就提交到master,在dev就会提交到dev分支
    • git log,查看提交记录,即:历史版本记录
    • git reflog    记录你的每一次命令
    • git reset --hard 0972f4b    回滚到指定提交版本

        

    Stage(暂存)区

        1.比如一个大功能需要修改100个文件,但是其中一个小的功能优先级比较高,需要先上线,但是这个功能只需要修改10个文件.这个时候可以先把这10个文件从工作区中添加到stage区中然后再把10个文件提交到代码仓库中.

        2.工作区的修改撤销

           git checkout -- readme.md     把readme.md文件在工作区的修改全部撤,这里有两种情况:

               1.一种是readme.md自修改后还没有被放到暂存区        现在撤销修改就回到和版本库一模一样的状态

               2.一种是readme.md已经添加到暂存区后又作了修改    现在撤销修改就回到添加到暂存区后的状态

              总之,就是让这个文件回到最近一次git commit  或git  add 时的状态

        3.暂存区的修改撤销

            1. git reset HEAD readme.md            git reset命令既可以回退版本,也可以把暂存区的修改回退到工作区.当我们用HEAD时,表示最新的版本

            2. git checkout -- readme.md             丢弃工作区的修改

       4.查看git工作区和暂存区的状态    git status 会把暂存区和工作区的变化都展示出来

         1.上部分显示的是暂存区状态

         2.下部分显示的是工作区状态

       

    Git分支策略

        master分支     是不能在上面做开发的,必须是稳定的版本  默认仅有一个名为master的分支

        dev分支          相当于测试环境的版本分支

        

        创建一个新的分支 拷贝一份当前所在的分支代码到新的分支

        这样每个人push的代码既不会影响到master分支也不会影响到其他人创建的分支.每个分支能影响到master分支仅仅在合并分支的时候

        当我们需要临时解决一个bug的时候也是需要通过创建一个新的分支来修改代码,解决bug后再和master分支合并,然后再切换到自己的开发分支

        git  checkout -b   branch1               创建一个属于自己的分支

         开发代码

        git  add .                                          将修改文件添加到本地版本库的暂存区中

        git  commit -m "说明"                      将暂存区的内容提交到本地当前的分支branch1中

        git    checkout   master                    切换回master分支

        git   merge   branch1                        将branch1分支上的内容合并到master分支  必须是在master分支上合并其它分支的代码,而不能在其它分支上合并master代码

    Git stash

       stash用于将工作区发生变化的所有文件获取临时存储在“某个地方”,将工作区还原当前版本未操作前的状态;stash还可以将临时存储在“某个地方”的文件再次拿回到工作区

    • git stash             将当前工作区所有修改过的内容存储到“某个地方”,将工作区还原到当前版本未修改过的状态
    • git stash list        查看“某个地方”存储的所有记录
    • git stash clear     清空“某个地方”
    • git stash pop       将第一个记录从“某个地方”重新拿到工作区(可能有冲突)
    • git stash apply     编号, 将指定编号记录从“某个地方”重新拿到工作区(可能有冲突) 
    • git stash drop      编号,删除指定编号的记录

    使用场景

          stash方案

             vim    app01/views.py                                                     # 开发某个新功能,刚开发到一半

             git stash                                                                           # 将开发到一半的新功能,临时存储到“某个地方”

             vim    pondo/settings.py                                                   # 紧急修复bug

             git add .                                                                            # 添加到修改bug的代码到暂存状态

             git  commit  -m  '紧急修复bug'                                          # 提交修复Bug的代码到分支

             git stash pop                                                                     # 将开发到一半的功能从“某个地方”再次拿到工作区继续开发

           分支解决方案:

                   git  branch                                                                   # 当前在master分支

                   git branch dev                                                             # 创建dev分支用于开发新功能

                   git checkout dev                                                           # 切换到dev分支

                   vim app01/views.py                                                     # 开发新功能到一半,需要紧急修复Bug

                   git add .

                   git commit -m '新功能开发一半'

                  git checkout master                                                     # 切换回master分支

                  git branch bug                                                             # 创建bug分支

                  git checkout bug                                                         # 切换到bug分支

                  vim pondo/settings.py                                                # 修改bug

                 git add .                                                                        # 提交bug

                 git commit -m '紧急修复bug'                                        # 提交bug

                git checkout master                                                     # 切换回master

                git merge bug                                                              # 将bug分支合并到master分支,表示bug修复完毕,可以上线

                git checkout dev                                                         # 切换到dev分支,继续开发新功能

                vim app01/views.py                                                   # 继续开发其他一半功能

                git add .                                                                      # 提交新功能

               git commit -m '继续开发完成'                                      # 提交功能

               git checkout master                                                    # 切换回master分支

               git merge dev                                                             # 将dev分支合并到master分支

         

    Git和Github实现远程代码托管

    将本地Git管理代码推送到github远程仓库

           git remote add origin https://github.com/aaa/pondo.git                       # 为地址起一个别名origin

           git push origin master                                                                         # 将本地master分支内容推送到GitHub

               Username for 'https://github.com':                                                  # 输入GitHub用户名

               Password for 'https://aa@github.com':                                           # 输入GitHub密码
            git push origin dev                                                                             # 将本地dev分支内容以及版本信息推送到GitHub
     
    新电脑第一次使用,需要将代码从GitHub中获取并继续开发
          git clone https://github.com/aaa/pondo.git                                           # 将项目从GitHub中获取
          cd      pondo/
          git Branch                                                                                            # 默认获取到得只有master分支
         * master
     
          git branch dev origin/dev                                                                    # 创建dev分支且和远程dev分支同步
          git checkout dev                                                                                 # 切换到dev分支
          vim app01/views.py                                                                            # 继续开发新功能
          git add .                                                                                              # 添加文件到版本库的暂存状态
          git commit -m '公司开发功能1'                                                           # 提交新功能到版本库的分支
         git push origin dev                                                                              # 提交dev分支内容到远程GitHub托管仓库的dev分支
     
     
    第二次使用电脑开发
        git checkout dev                                                                             # 切换到dev分支
        git fetch origin dev                                                                         # 从GitHub仓库获取dev分支最新内容到版本库的分支
        git merge origin/dev                                                                       # 将版本库的分支内容合并到工作区
        获取dev分支方法2:
       【git pull origin 分支】命令等同于【git fetch origin 分支】+ 【git merge origin/分支】
        git pull origin dev                                                                              # 从GitHub仓库获取dev分支最新内容,并合并到本地
        vim app01/views.py                                                                          # 继续开发新功能
        git add .                                                                                            # 添加文件到版本库的暂存状态
        git commit -m 'xxxxxxxxxxx'                                                             # 提交新功能到版本库的分支
        git push origin dev                                                                           # 提交dev分支内容到远程GitHub托管仓库的dev分支
      
      

     Github多人协作冲突解决方法

    • 先 git pull origin master   然后 git push origin master
    • 先 git fetch origin master 然后 git merge origin/master   再  git push origin master
    • 先 git fetch origin master 然后 git rebase origin/master  再  git push origin master

           三者都可以完成合并并提交新功能,但是日志记录会有差异  如:前两者版本记录中会出现合并,而第三种可以保证版本记录干净整洁

        多人协作的工作模式:

    1. 首先,可以试图用 git push origin branch-name 推送自己的修改;

    2. 如果推送失败,则因为远程分支比你的本地更新,需要先用 git pull 试图合并;

    3. 如果合并有冲突,则解决冲突.并在本地提交;

    4. 没有冲突或者解决掉冲突后,再用 git push origin branch-name 推送就能成功!

        如果git pull 提示"no tracking information",则说明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream branch-name origin/branch-name 

    Git忽略特殊文件

       在Git工作区的根目录下创建一个特殊的.gitignore文件,然后把要忽略的文件名填进去,Git就会自动忽略这些文件.最后一步就是把.gitignore也提交到Git版本库

    Git提交指定的单个文件

       1.一次修改了多个文件 但是只需要提交指定的文件

        

     2.git add templates/appconf/cachemgr.html     //提交到暂存区

        git stash -u -k      //忽略其他,关键一步

        git status            //可以看到只有一个文件需要commit 

       

    3.git  commit   -m    '提交说明'     //提交暂存区

     

    4.git push  推送提交到远程仓库

    5.查看git远程仓库

        只提交了一个html文件到远程仓库  

       

     git add         是把工作区的文件添加到暂存区中

     git commit   是把暂存区中的文件纳入到git的版本控制信息里  每次commit git都会生成一条对应的commit记录

     git branch   基于每次的commit都可以创建一个新的分支

  • 相关阅读:
    ssh免密码登录与常见问题
    在eclipse中生成实体类
    在cmd中设置字体
    java命名
    c/s架构
    sql身份证号查人数
    bootstraptable表格基本
    手机登录验证
    form表单验证提示语句
    html让背景透明
  • 原文地址:https://www.cnblogs.com/yxh168/p/9248835.html
Copyright © 2011-2022 走看看