zoukankan      html  css  js  c++  java
  • Git之路-2017年9月8日14:37:01

    写在前面:

          主要参考廖雪峰考试的网站学习总结的,强烈推荐
           https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000

    1. Git是分布式版本控制系统;集中式的需要联网,分布式就是各自电脑都有一整套代码,保证了安全性,并且也可以设置一个各自修改然后上传统一地方--中央处理器,这样避免了各个电脑之间互传修改过的代码。大家只需要去中央处理器上去取就可以了。

    2. 方便版本修改,版本修改都有记录;

    3. git在linux上安装:sudo apt-get install git

    4. 版本库resipotory----简单理解成一个目录,这个目录里面的所有文件都可以被git管理起来,每个文件的修改、删除,Git都可以跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻可以还原。

       如何创建版本库.....

    5. (a) git status命令:让我们时刻掌握仓库当前的状态

        (b) git diff xxx命令:查看具体修改了什么内容

        (c) 提交到仓库:

               1)git add xxxx

                2)git commit -m "add distributed"

        (d) git log命令:显示从最近到最远的提交日志

              简化输出信息:git log --pretty==oneline(一行)

        (e) git退回到上一个版本: git reset --hard HEAD^

                   HEAD:表示当前版本,也就是最新的提交

                   HEAD^:上一个版本

                   HEAD^^:上上一个版本

                   往上100个版本:HEAD~100

           (f) git reflog记录你的每一次命令

           (g) 如果在回退以后,再想恢复,就必须找到想恢复文件之前的commit id

    6. 工作区和暂存区

        工作区: 你的电脑里能够看到的目录 

        版本库:工作区里面的隐藏目录.git

        暂存区:Git版本库(.git)里存放的stage(或者叫index)

                     Git自动为我们创建的第一个分支master,以及指向master的一个指针叫HEAD

         git add命令实际上就是把要提交的所有修改放到暂存区(Stage),然后,执行git commit就可以一次性把暂存区的所有修改提交到分支

    7. git跟踪并管理的是修改,而非文件

        第一次修改->git add->第二次修改->git commit  会提交第一次修改的,第二次修改的没有放在暂存区,因而不会被提交

    8. git diff HEAD --readme.txt

         可以查看工作区和版本库里面最新版本的区别

    9. 撤销修改:

                git checkout --file:可以放弃之前对工作区的修改

                                    --:这个符号很重要,否则就变成了切换到另一个分支的命令

                git checkout -- readme.txt:把readme.txt文件在工作区的修改全部撤销掉,分为两种情况:

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

                      (2) readme.txt已经添加到暂存区后,又做了修改,现在,测下哦修改就回到添加到暂存区后的状态。

                git reset命令既可以回退版本,也可以吧咱出去的修改回退到工作区。

                git reset HEAD file;

    10. 删除文件:

                (1) 直接在文件管理器中把没用的文件删了,或者用rm命令删了

                (2) Git知道删除了文件,因此工作区和版本库就不一致了

                (3) 现在的两个选择:

                         a) 确实要从版本库中删除该文件,git rm删掉然后git commit

                         b) 删错了,因为版本库里还有呢,所以可以很轻松地把误删的文件恢复到最新版本

                             $git checkout -- test.txt

    11. 远程仓库

          GITHUB:提供Git仓库托管服务的,只要注册一个GitHub账号,就可以免费获得Git远程仓库

          在自己的windows电脑上创建本地仓库时:

           git add file添加文件时出现这样错误:fatal: Not a git repository (or any of the parent directories): .git

                                                                     【解决办法】git init就可以了!

           

     1 Administrator@SZ-20170904JNLT MINGW64 /d/My Documents/Desktop
     2 $ cd D:Git
     3 
     4 Administrator@SZ-20170904JNLT MINGW64 /d/Git
     5 $ cd ./Git
     6 
     7 Administrator@SZ-20170904JNLT MINGW64 /d/Git/Git
     8 $ mkdir learngit
     9 
    10 Administrator@SZ-20170904JNLT MINGW64 /d/Git/Git
    11 $ cd ./learngit
    12 
    13 Administrator@SZ-20170904JNLT MINGW64 /d/Git/Git/learngit
    14 $ git config --global user.name "wangfei"
    15 
    16 Administrator@SZ-20170904JNLT MINGW64 /d/Git/Git/learngit
    17 $ git config --global user.email "573003483@qq.com"
    18 
    19 Administrator@SZ-20170904JNLT MINGW64 /d/Git/Git/learngit
    20 $ touch readme.md
    21 
    22 Administrator@SZ-20170904JNLT MINGW64 /d/Git/Git/learngit
    23 $ git add readme.md
    24 fatal: Not a git repository (or any of the parent directories): .git
    25 
    26 Administrator@SZ-20170904JNLT MINGW64 /d/Git/Git/learngit
    27 $ git init
    28 Initialized empty Git repository in D:/Git/Git/learngit/.git/
    29 
    30 Administrator@SZ-20170904JNLT MINGW64 /d/Git/Git/learngit (master)
    31 $ git add readme.md
    32 
    33 Administrator@SZ-20170904JNLT MINGW64 /d/Git/Git/learngit (master)
    34 $

    【安装过程中出现的一些错误及解决办法】

    Permanently added the RSA host key for IP address '192.30.252.130' to the list of known hosts.

    服务器上刚刚装git,然后拷贝代码出现了上述的问题,这问题很好解决,在hosts文件中加入github.com就可以了

    git bash 出现vim的时候怎么退出【类似于linux】

    如果是输出状态,首先Esc退出输入状态,然后Shift+;,再输入q!或wq!(不保存改动,wq!是保存文件的写入修改)退出

    http://blog.csdn.net/vosang/article/details/50499300

    A. 如何将本地仓库的文件代码上传到远程仓库(Github)上面

     1 Administrator@SZ-20170904JNLT MINGW64 /d/Git/Git/learngit (master)
     2 $ touch secondReadme 6 
     7 Administrator@SZ-20170904JNLT MINGW64 /d/Git/Git/learngit (master)
     8 $ git add secondReadme
     9 
    10 Administrator@SZ-20170904JNLT MINGW64 /d/Git/Git/learngit (master)
    11 $ git commit -m 'second commit'
    12 [master 585bf6c] second commit
    13  1 file changed, 0 insertions(+), 0 deletions(-)
    14  create mode 100644 secondReadme
    15 
    16 Administrator@SZ-20170904JNLT MINGW64 /d/Git/Git/learngit (master)
    17 $ git push origin master
    18 Counting objects: 28, done.
    19 Delta compression using up to 4 threads.
    20 Compressing objects: 100% (24/24), done.
    21 Writing objects: 100% (28/28), 11.92 KiB | 1.99 MiB/s, done.
    22 Total 28 (delta 1), reused 0 (delta 0)
    23 remote: Resolving deltas: 100% (1/1), done.
    24 To github.com:piaxiaohui/learngit.git
    25    c56b809..585bf6c  master -> master

    主要三步

                 1)   git add    xxxx

                 2)   git commit -m “注释”

                 3)   git push origin master //push 推(上传)上去,推到远程仓库

    提交到gerrit别的分支

    
    

    $ git push origin master(或者HEAD):refs/heads/FreeWong_branch

    
    
    

    B.从远程仓库下载到本地仓库

    $ git clone git@github.com:piaxiaohui/FirstDownloadProject.git  

    12. 分支管理:

           (1) 作用: 你创建了一个属于你自己的分支,别人看不到,还继续在原来的分支上正常工作,而你在自己的分支上干活,想提交就提交,直到开发完毕后,再一次性合并到原来的分支上,这样,既安全,又不影响别人工作。

            (2) 在Git里,master分支叫做主分支。HEAD严格来说不是指向提交,而是指向master,master才是指向提交的,所以HEAD指向的就是当前分支

                   新建分支dev,并让head现在指向dev,那么对工作区的修改和提交就是针对dev分支了,比如新提交一次后,dev指针往前移动一步,而master指针不变

                现在将分支合并,只需要将master指向dev的当前提交即可

    相关命令:

             查看分支:git branch

             创建分支:git branch <name>

             切换分支:git checkout <name>

             创建+切换分支:git checkout -b <name>

             合并某分支到当前分支:git merge <name>

              删除分支: git branch -d <name>

    13. 分支管理之解决冲突

    14. 分支管理策略

         (1) 通常合并分支时,git会用 Fast Forward模式,但这种模式下,删除分支后,会丢掉分支信息。如果要强制禁用Fast forward模式(git merge --no-ff -m "merge with no-ff" dev),Git就会在merge时声称一个新的commot,这样从分支历史上就可以看出分支信息。

          (2) 分支策略:

                     1)master分支应该是非常稳定的,仅用来发布新版本,平时不能在上面干活

                      2)干活都在dev分支上,然后再合并分支

                             合并分支时,加上--no-ff参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并

                              fast forward合并就看不出来曾静做过合并

    15. bug分支

          每个bug都可以通过一个新的临时分支来修复,修复后,合并分支,然后降临时分支删除

           命令git stash:把当前工作现场“存储”起来,等到以后恢复现场后继续工作

           命令git status:查看工作区

           命令git stash list:查看工作现场

           恢复之前的stash内容:

                           方式一:git stash apply: 但是恢复后,stash内容并不删除,需要用git stash drop来删除

                           方式二: git stash pop,恢复的同时把stash内容也删除了

            恢复制定的stash: git stash list

    16. Feature分支:主要是用于为master分支添加一些新功能前创建的分支,如果功能接受,再合并

                                 丢弃一个没有被合并过的分支,可以通过git branch -D<name>强行删除

    17.多人协作

              (1) 查看远程库(origin)的信息 git remote/git remote -v(显示更详细的信息)

              (2) 推送分支,就是把该分支上的所有本地提交推送到远程库,推送时要指定本地分支

                        $ git push origin master

               (3) master分支和dev分支需要时刻与远程同步,bug分支和feature分支不需要与远程时刻同步

               (4)当你的小伙伴要在远程dev分支上开发,就必须创建远程origin的dev分支到本地

                         $ git checkout -b dev origin/dev       

    因此,多人协作的工作模式通常是这样:

    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

                这就是多人协作的工作模式,一旦熟悉了,就非常简单。

    17. 标签管理

           发布一个版本时,我们通常现在版本库中打一个标签(tag),这样,就唯一确定了打标签时刻的版本.

           Git标签虽然是版本库的快照,但其实他就是指向某个commit的指针.

           1-> Git中打标签流程

               (1) 首先,切换到需要打标签的分支上

                        git checkout xx(比如master)

                (2) 然后 git tag <name>

                (3) git tag 查看所有标签

                (4)给之前的commit打标签

                        1)先找到历史提交的commit id

                              git log --pretty=oneline --abbrev -commit

                        2 ) 然后 git tag v0.9 6224937[commit id]

                  (5) 查看标签的详细信息:

                             git show <tagname>

                  (6)可以创建带有说明的标签

                              $ git tag -a v0.1 -m “version 0.1 released” 3628164

                                  -a:表示制定标签名

                                  -m:指定说明文字

             2-> 操作标签

                    1) 删除打错的标签:git tag -d v0.1

                    2) 推送某个标签到远程: git push origin <tagname>

                         一次性推送全部尚未推送到远程的本地标签:git push origin --tags

                     3) 要删除远程的标签:

                                    第一步,先从本地删除 git tag -d v0.9

                                    第二步,再从远程删除 git push origin:refs/tags/v0.9<tagname>

                                     要看看是否真的从远程库删除了标签,可以登陆GitHub查看

                     4)要删除以后的GitHub的远程库:git remote rm origin

    18.  自定义Git

          (1) 让Git显示颜色:

                                 git config --global color.ui true

           (2) 忽略某些文件时,需要编写.gitignore【最好用文本编辑器创建】

           .gitignore文件本身要放到版本库里,并且可以对.gitignore做版本管理

            (3)设置命令简写

                       单个单词命令:

                                          git st就能表示git status

                                          $ git config --global alias.st    status

                       多个单词命令:

                                           $ git config --global alias.usage 'reset HEAD'

              (4) 配置git的时候,加上--global时针对当前用户起作用的,如果不加,那只针对当前的仓库器作用

                         每个仓库的Git配置文件都放在.git/config文件中

                         当前用户的Git配置文件放在用户主目录下的一个隐藏文件.gitconfig中

                                                  

                 

      

        

  • 相关阅读:
    多线程博文地址 http://www.cnblogs.com/nokiaguy/archive/2008/07/13/1241817.html
    vs2010一运行就报错deven.exe assert failure 解决方法,卸载系统中.netFramework最新版本的(简体中文)
    Lambda语句中创建自定义类型时,也可指定某种特定类型,方法是在new与{}之间写上类型名称
    Win7开始菜单所在目录
    C#中Struct与Class的区别
    Linq语句:三表联查
    用exp、dmp导入导出用户到同一个实例下时,类型type会有问题
    列、约束重命名,原数据不丢失
    CDM中,创建一个或多个组合属性的唯一约束
    EF中新建表和关联表的方法
  • 原文地址:https://www.cnblogs.com/piaxiaohui/p/7496503.html
Copyright © 2011-2022 走看看