• git 学习笔记 Git实践


    网上有很多教程,这里我自己做下整理,省得有时忘记,有道是好记性不如烂博客!

             先大概描述下Git的各种命令:

              git init                     #初始化

              git clone                  #将远程项目拷贝到本地

              git add                    # 提交文件更改(修改和新增)

              git commit              # 基于当前分支提交修改

              git reset                  # 去除某个提交之后的一切提交记录

              git log                     # 查看当前分支下的某个提交记录

              git whatchanged   # 查看更详细的提交记录,可以看到具体哪些文件做了修改

              git status                # 查看当前状态

              git checkout            # 切换分支或者回滚到某个提交

              git branch               # 创建或查看分支    

              git merge                # 合并目标分支到当前分支  

           1.Git配置:

              Git有三种配置方式,一种是针对全部用户,一种是针对当前用户,还有一种是针对当前工程.

              1)全部用户:/etc/gitconfig     通过git config --system进行配置

              2)当前用户:~/.gitconfig       通过git config --global进行配置

              3)当前工程:.git/config         

                   同时当前工程的配置会覆盖当前用户的配置,当前用户的配置也会覆盖全部用户的配置

            

              我们更多的是针对~/.gitconfig和.git/config进行配置.如可以通过以下命令对当前用户进行配置:

              git config --global user.name "userName"

              git config --global user.email "userName@gmail.com"

              随后我们就可以通过vi ~/.gitconfig或git config --global --list进行查看当前用户的配置

              具体配置我们可以通过git help config查看

              这里贴上一段对git显示的脚本,方便你使用git命令

    Shell代码  收藏代码
    1. git config --global color.ui "auto"  
    2. git config --global color.diff "auto"  
    3. git config --global color.status "auto"  
    4. git config --global color.branch "auto"  

      

           2.Git对于文件的管理.

              对于Git而言,文件只有两种状态:untracked和tracked,也就是未跟踪和已跟踪.

              同时已跟踪文件又分为三种状态:

                   unmodified:文件没有做过任何修改

                   modified:文件已经修改了,但还没有提交

                   staged:文件已经修改,准备提交

           3.Git命令的使用

              1)在本地创建Git工程,这里我把工程创建到/tmp/workspace下,没有该目录需先创建.然后Git工程名是git-project

    Shell代码  收藏代码
    1. cd /tmp/workspace  
    2. mkdir git-project  
    3. cd git-project  
    4. git init  

          当看到Initialized empty Git repository in /tmp/workspace/git-project/.git/ 就表示已经创建成功

              2)提交更新文件(这里请注意,这里的更新包括新增,修改),比如我这里想新增一个说明文件README.TXT,同时提交到Git仓库

    Shell代码  收藏代码
    1. echo README > README.TXT  
    2. git add README.TXT                                       #添加  
    3. git commit -m "README"                               #提交到本地仓库,并说明是README  
    4. git push                                                          #如果是要提交到远程仓库,则还需要使用该命令  

             3)有时以下记不得具体对工程做了哪些修改,则可以使用git diff,比如
                 echo README2 > README.TXT                      # 先修改README.TXT,以便查看内容变化

                 git diff

                 然后控制台可以看到如下内容:

    Shell代码  收藏代码
    1. diff --git a/README.TXT b/README.TXT  
    2. index e845566..1a06674 100644  
    3. --- a/README.TXT  
    4. +++ b/README.TXT  
    5. @@ -1 +1 @@  
    6. -README  
    7. +README2  

                为了下面的完整性,这里我再将修改README.TXT给提交上去,可以用一条语句搞定:

                git commit -a -m "README2"

             4)上面git diff只是对比已经提交了的文件,也就是git tracked的文件的更新情况.如果你新建了一个文件,但没有提交给git仓库的话,git diff是跟踪不到的.这里我们要使用git status.如下:
               echo README > README.HTML                        #新建README.HTML文件
               git diff                                                              # 看不到有什么变化
               使用git status -s命令后则会看到以下内容:
    Shell代码  收藏代码
    1. ?? README.HTML  
     

               将README.HTML也提交上去

               git add README.HTML 

               git commit -m "create README.HTML"

            

         5) 和git仓库里某个文件内容一致,比如你对一个文件做了些修改,但不想要了,想跟仓库中该文件内容一样,则

                 echo README3 > README.TXT   # 先修改README.TXT,这里用cat README.TXT看到的是README3

                 git checkout -- README.TXT       # 同步git仓库中README.TXT内容,再从README.TXT看到的是README2

                 可能一次提交了多个文件,但不可能每个文件都git checkout吧.还可以有另外一种方式,通过git log查看你commit的key,再通过git checkout commit_no完成.比如我这里:

    Shell代码  收藏代码
    1. commit 1b5c1689dbfad446fbc29a001fd6498e74bb4427  
    2. Author: guoyunsky <xxx@xxx.com>  
    3. Date:   Mon Dec 26 11:52:46 2011 +0800  
    4.   
    5.     create README.HTML  
    6.   
    7. commit bc8460c7889aa005f6f056151505c0887c3fd5d5  
    8. Author: guoyunsky <xxx@xxx.com>  
    9. Date:   Mon Dec 26 11:48:38 2011 +0800  
    10.   
    11.     README2  
    12.   
    13. commit 5c7eeb2b31e5f0722cf2bfc038a51fffcea8dfe1  
    14. Author: guoyunsky <xxx@xxx.com>  
    15. Date:   Mon Dec 26 11:48:10 2011 +0800  
    16.   
    17.     README  
     

           之前是想回滚到README2,它的commit是bc8460c7889aa005f6f056151505c0887c3fd5d5.

    所以我们只需git checkout bc8460c7889aa005f6f056151505c0887c3fd5d5
    即可.

           这个可以随便切换到任意commit.比如我又想回到README,HTML.

           则直接git checkout 1d30434716df7e95a533e20f2973a107eb65b0d1即可

           6)GIT 回退 GIT checkout

              通过上面git log可以看出git checkout后git仓库中并不会发生变化,包括索引文件和源码.所以这里引入git reset.

              比如我这里就只要README这个提交下的源码,README之后的所有修改都是无效的.这也意味着Git仓库中README这个提交是最新.所以需要删除掉README2和create README.html的commit.这里就可以使用git reset了.具体命令如下:

          git reset --hard 571d6fac5b8218b40953e478dbb28e41c5511904

          同时本地的代码也是README状态!所以这个可是要慎用!因为不仅git仓库没有了相关索引文件和源码,连你本地的源码也被清除,只有README状态下的源码.你可以用git log查看下,发现只有README这个提交了

           有时我们有这样一种需求,比如想取消某一次提交,但不想修改本地代码,只是不想在git仓库中提交.我们也可以使用git reset.如我想取消最近一次提交,则可以

           git reset --soft HEAD~1

           那么你上一次提交就不会反应到Git仓库中去了.

           这里介绍下git reset:

            git reset HEAD filename   #从暂存区中删除文件

            git reset –hard HEAD~3   #会将最新的3次提交全部清空,那么仓库中最新的代码应该是HEAD~4,之前三次提交全部没了
            git reset –hard commit bc8460c7889aa005f6f056151505c0887c3fd5d5 #回退到bc8460c7889aa005f6f056151505c0887c3fd5d5 版本

             git reset –mixed    #此为默认方式,不带任何参数的git reset,回退到某个版本,只保留源码,回退commit和index信息
             git reset –soft       #回退到某个版本,只回退了commit的信息,不会恢复到index file。如果还要提交,直接commit即可
            git reset –hard      #彻底回退到某个版本,本地的源码也会变为上一个版本的内容 

          7)修改文件名,这里不在是修改文件内容.修改文件名的话,比如这里修改README.TXT为readme.txt,对于Git来说,是删除了README.TXT新增了readme.txt文件.我们可以通过git status来查看

    Shell代码  收藏代码
    1. # On branch master  
    2. # Changes not staged for commit:  
    3. #   (use "git add/rm <file>..." to update what will be committed)  
    4. #   (use "git checkout -- <file>..." to discard changes in working directory)  
    5. #  
    6. #   deleted:    README.TXT  
    7. #  
    8. # Untracked files:  
    9. #   (use "git add <file>..." to include in what will be committed)  
    10. #  
    11. #   readme.txt  
    12. no changes added to commit (use "git add" and/or "git commit -a")  

          但Git不可能这样弱智,可以使用git mv README.TXT readme.txt,如发生错误可以视情况强制执行:git mv -f README.TXT readme.txt,再通过git status查看:

    Shell代码  收藏代码
    1. # On branch master  
    2. # Changes to be committed:  
    3. #   (use "git reset HEAD <file>..." to unstage)  
    4. #  
    5. #   renamed:    README.TXT -> readme.txt  
    6. #  

             

        8) Git删除文件

                 git rm HEADME.TXT

                 git commit -m "delete README.TX

                 以上会在git仓库中删除README.TXT,同时以后也不会再跟踪这个文件.如你输入git diff则不会再拿这个文件去对比.但有时我们只想删除跟踪这个文件,但还想在git仓库中保留这个文件.则可以使用这个命令:

                 git rm --cached  README.TXT

         9)Git分支 git branch

              分支是个永恒的概念,比如很多开源程序都有版本以及不同的功能实现.如Hadoop被用到各个方面.

              git branch branch_name            #创建分支

              git branch -r                              #查看远程分支,也就是你git仓库里有哪些分支

              git branch -a                              # 查看所有分支,远程和本地

              git branch --no-merge                # 查看所有未合并的分支

              git branch --merge                     # 查看所有已合并的分支

              git checkout branch_name         # 切换到某个分支

              git checkout -b branch_name     # 创建并且切换到某个分支

              git branch -d branch_name        # 删除某个分支,仅能删除合并了的分支

              git branch -D branch_name       # 删除某个分支,未能合并的分支也能删除

              git merge dest_branch               # 将目标分支合并到你当前分支

              以上只是命令,这里来个实践.我们重新建个git工程.也算是对git有个大概的使用

              #创建git工程

              mkdir git-branch-test

              cd git-branch-test

              git init

              echo "test" > test.txt

              git add test.txt

              git commit -m "test"                #提交到master分支

              git checkout -b test                  #创建并进入test分支

              echo "test2" >> test.txt          #追加文件内容到test.txt,如此test分支中test.txt文件内容已修改

              git add test.txt

              git commit -m "test2"              #提交到test分支

              git checkout master                 #切换到master分支

              echo "test3" >> test.txt          #追加内容到test.txt,如此master分支中test.txt文件内容又有修改

              git add test.txt

              git commit -m "test3"             #提交到master分支

              经过以上命令,我们知道master分支中提交过两次,test.txt文件内容是test test3.而test分支也同样提交过两次,内容是test test2.这里我们将test分支合并到master中:

               git checkout master

               git merge test

               之后再跟test.txt文件内容为如下: 

    Shell代码  收藏代码
    1. test  
    2. <<<<<<< HEAD  
    3. test3  
    4. =======  
    5. test2  
    6. >>>>>>> test  

              可以看到合并之后有冲突,那需要我们根据实际情况处理.

  • 相关阅读:
    CentOS安装python setuptools and pip
    Memcached集群:Magent缓存代理使用
    PHP上传类 图片上传 upload class实现image crop resize 缩略图
    CentOS全自动一键安装PHP,MySQL,phpmyadmin与Nginx
    【转】浅析linux内存模型
    【转】深入浅出异步I/O模型
    【转】客户/服务器程序设计范式
    【转】如何保证睡眠的情况下把各种事情做好
    【转】非教育网中IPv4网络访问IPv6资源
    busybox介绍
  • 原文地址:https://www.cnblogs.com/Anderson-An/p/9966823.html
Copyright © 2020-2023  润新知