zoukankan      html  css  js  c++  java
  • git学习笔记

    1.创建git可以管理的仓库

     

    
    

    #切换到要创建仓库的目录
    $ mkdir gittest
    $ cd gittest/

    
    

    #创建git仓库
    $ git init
    Initialized empty Git repository in C:/gittest/.git/
     
    $ ls -a
    ./  ../  .git/

    
    

    $ ll
    total 7
    -rw-r--r-- 1 px222 197609 157 7月   2 21:46 config
    -rw-r--r-- 1 px222 197609  73 7月   2 21:46 description
    -rw-r--r-- 1 px222 197609  23 7月   2 21:46 HEAD
    drwxr-xr-x 1 px222 197609   0 7月   2 21:46 hooks/
    drwxr-xr-x 1 px222 197609   0 7月   2 21:46 info/
    drwxr-xr-x 1 px222 197609   0 7月   2 21:46 objects/
    drwxr-xr-x 1 px222 197609   0 7月   2 21:46 refs/

    2.添加文件到git仓库

    #使用命令git add <file>,添加文件到git的暂存区。可反复多次使用,添加多个文件

    $ git add  readme.txt

    #要随时掌握工作区的状态,使用git status命令。  

    $ git status 
    On branch master

    Initial commit

    Changes to be committed:
      (use "git rm --cached <file>..." to unstage)

            new file:   readme.txt

    #提交更改,实际上就是把暂存区的所有内容提交到当前分支。

    $ git commit  -m "git readme"

    [master (root-commit) a800ccb] git readme

     1 file changed, 2 insertions(+)

     create mode 100644 readme.txt

    3.git diff

    $ git status
    On branch master
    Changes not staged for commit:
      (use "git add <file>..." to update what will be committed)
      (use "git checkout -- <file>..." to discard changes in working directory)

            modified:   readme.txt

    no changes added to commit (use "git add" and/or "git commit -a")

    # 使用git diff 查看文件变更的内容

    $ git diff readme.txt
    diff --git a/readme.txt b/readme.txt
    index a6125e4..213b003 100644
    --- a/readme.txt
    +++ b/readme.txt
    @@ -1,2 +1,3 @@
     hello git,this is my first time use!
    +git is distributed version control system
     i very like git

    4 git reset 操作版本回退

    #使用git log 查看 我们提交历史
    $ git log commit 515343f4454fe165710bd61bda3634e9384be177 Author: peng xuan
    <px2222_1@hotmail.com> Date: Sun Jul 2 22:56:47 2017 +0800 add hate commit 0de38ca81795b63059bf3a981e0860713ce3528c Author: peng xuan <px2222_1@hotmail.com> Date: Sun Jul 2 22:54:24 2017 +0800 about python commit 834c8c6a9c91aec59dca12fb14004e57dc328d61 Author: peng xuan <px2222_1@hotmail.com> Date: Sun Jul 2 22:49:30 2017 +0800 add a line about distribute commit a800ccbcb8decb8386c121174b8462f3b9e89f78 Author: peng xuan <px2222_1@hotmail.com> Date: Sun Jul 2 22:13:09 2017 +0800 git readme





    #上面输出的内容太多,可以加--pretty=oneline参数

    $ git log --pretty=oneline
    515343f4454fe165710bd61bda3634e9384be177 add hate
    0de38ca81795b63059bf3a981e0860713ce3528c about python
    834c8c6a9c91aec59dca12fb14004e57dc328d61 add a line about distribute
    a800ccbcb8decb8386c121174b8462f3b9e89f78 git readme

    
    

     #回退到上个版本,也就是"about python" 那个commit

     上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100

    $ git reset --hard head^
    HEAD is now at 0de38ca about python

    #除了使用head^这种版本指定方法外,还是可以直接使用版本号,也就是commit id,使用git log 看到那一长串id就是commit id

    #现在我们后悔了,想重新回到回退之前的那个版本,这时只要我们窗口没有关,找到那个commit id 即可,如下所示,版本号不必要写全

    $ git reset --hard 515343f
    HEAD is now at 515343f add hate

     

    5.git reflog 显示命令历史记录

    $ git reflog
    515343f HEAD@{0}: reset: moving to 515343f
    0de38ca HEAD@{1}: reset: moving to head^
    515343f HEAD@{2}: commit: add hate
    0de38ca HEAD@{3}: commit: about python
    834c8c6 HEAD@{4}: commit: add a line about distribute
    a800ccb HEAD@{5}: commit (initial): git readme

    6. git checkout -- <file>

    命令git checkout -- readme.txt意思就是,把readme.txt文件在工作区的修改全部撤销,这里有两种情况:

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

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

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

    7.git reset HEAD <file>.

    用命令git reset HEAD file可以把暂存区的修改撤销掉(unstage),重新放回工作区; 修改重放回工作区后,使用命令git checkout -- file进一步撤销工作区修改 。git reset命令既可以回退版本,也可以把暂存区的修改回退到工作区。当我们用HEAD时,表示最新的版本.

    8.删除文件后的操作

    当使用操作系统命令删除了某个文件后,git 是知道该文件被删除的,这时工作区和版本库不一致。

    1. 这时我们有一个选择,就是确实要从版本库中删除该文件,那就用命令git rm删掉,并且git commit;现在,文件就从工作区和版本库中都被删除了,恢复一致状态。
    2. 删除操作也是修改操作,使用git checkout -- file 恢复到上次的git commit 。也就是可以把该file恢复过来。

    9.远程仓库

    1. 添加远程githup仓库
    #or create a new repository on the command line
    
    echo "# cmdb" >> README.md
    git init
    git add README.md
    git commit -m "first commit"
    #https协议,关联本地仓库的master分支到远程仓库
    git remote add origin https://github.com/px22222/cmdb.git
    #ssh协议
    git remote add origin git@github.com:px22222/cmdb.git
    #关联远程仓库后,第一次推送本地仓库的master分支的所有内容到关联的远程仓库

    git push -u origin master
    #本地仓库有新的提交后,推送修改到远程仓库 git push origin master #or push an existing repository from the command line git remote add origin https:
    //github.com/px22222/cmdb.git git push -u origin master

      2.从远程仓库克隆

    git clone git@github.com:px22222/perfect_crm.git
    #获取最新修改内容
    git pull  origin master

    10.分支管理

    1. 创建分支

        默认只有一个master分支,当我们创建新的分支,例如dev时,Git新建了一个指针叫dev,指向master相同的提交,再把HEAD指向dev,就表示当前分支在dev上,示意图如下

      

        

    #创建分支命令
    $ git checkout -b dev
    Switched to a new branch 'dev'

    #-b 参数表示创建并切换到dev分支,相当于如下2条命令
    $ git branch dev
    $ git checkout dev
    Switched to branch 'dev'

    #查看当前所在分支
    $ git branch
    * dev
      master


    #在新的分支对内容进行修改,然后提交修改
    $ git add README.md
    
    
    $ git commit -m "add a line on dev branch"
    [dev f848502] add a line on dev branch
     1 file changed, 1 insertion(+)

    $ git status
    On branch dev
    nothing to commit, working directory clean

    #切换到master分支发现README.md的内容并没有变化,那是因为我们提交点在dev分支上,而master分支的提交点并没有变化

    $ git checkout master
    Switched to branch 'master'

     



    #如果想要看到修改的内容,我们需要把dev分支和master分支合并
    $ git merge dev
    Updating 1ba58b8..f848502
    Fast-forward
     README.md | 1 +
     1 file changed, 1 insertion(+)

    #注意到上面的Fast-forward信息,Git告诉我们,这次合并是“快进模式”,也就是直接把master指向dev的当前提交,所以合并速度非常快。



    #如果觉得分支已经没用,可以删除分支
    $ git branch  -d dev
    Deleted branch dev (was f848502).

      2. 解决分支合并冲突

        当在不同的分支对同一部内容进行了修改,然后对这2部分分支的内容进行合并时会遇到冲突,这时需要手动解决,然后再次提交修改

  • 相关阅读:
    推送消息为什么使用RocketMQ,而不使用Kafka?
    com.google.common.collect.Lists.addAll()空指针原因分析
    AQS原理
    ReentrantLock-加锁
    ReentrantLock-自旋
    Reentrantlock-的核心内容
    java中,BigDecimal的add方法避坑指南
    Reentrantlock-实现原理
    Reentrantlock-适用场景
    JAVA foreach和普通for循环是否需要判断为null
  • 原文地址:https://www.cnblogs.com/pengxuann/p/7107430.html
Copyright © 2011-2022 走看看