zoukankan      html  css  js  c++  java
  • git

    git的安装

    yum -y install git

    进行git的全局配置

    git config --global user.name "yourname" #设定自定义的昵称
    git config --global user.email "youremail@example.com" #设定自己的邮箱
    git config --global color.ui true #设置命令代码多颜色显示
    git config --list #列出以上配置的信息

    全局配置对应的文件

    [liming@centos7 2018-09-21]$ cat ~/.gitconfig
    [user]
        name = liming
        email = liming@centos7.com
    [color]
        ui = true

     新建项目目录并初始化

    mkdir  2018-09-21
    cd  2018-09-21
    
    git init  .    在当前目录初始化,之后会出现目录  .git

    局部配置用户的相关信息

    [liming@centos7 2018-09-21]$ git config user.name 'liming_local'
    [liming@centos7 2018-09-21]$ cat .git/config  #其对应的文件
    [core]
        repositoryformatversion = 0
        filemode = true
        bare = false
        logallrefupdates = true
    [user]
        name = liming_local

     git status命令:查看当前用户的提交状态

     git   log 命令:查看用户操作的记录

    git add命令,添加到待提交列表里面

    首先:我们来新建两个文件  readme  和 log
    然后使用 git add提交
    [liming@centos7 2018-09-21]$ git add readme
    [liming@centos7 2018-09-21]$ git add log
    其次:提交改变并查看状态
    [liming@centos7 2018-09-21]$ git commit -m "初始化提交"
    [master (root-commit) 04018e4] 初始化提交
     2 files changed, 2 insertions(+)
     create mode 100644 log
     create mode 100644 readme
    [liming@centos7 2018-09-21]$ git status
    # On branch master
    nothing to commit, working directory clean
    再其次:在文件readme中加入一行,并查看状态
    [liming@centos7 2018-09-21]$ vim readme
    [liming@centos7 2018-09-21]$ 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
    #
    no changes added to commit (use "git add" and/or "git commit -a")
    好,我们先将它提交

    [liming@centos7 2018-09-21]$ git add readme
    [liming@centos7 2018-09-21]$ git status
    # On branch master
    # Changes to be committed:
    # (use "git reset HEAD <file>..." to unstage)
    #
    # modified: readme
    #
    [liming@centos7 2018-09-21]$ git commit -m "增加一行readme"
    [master 5eb920f] 增加一行readme
    1 file changed, 1 insertion(+)

    查看log,里面没有中文显示

    [liming@centos7 2018-09-21]$ git log
    commit 5eb920f9674586be09d5d99033b10a19f59e8957
    Author: liming_local <liming@centos7.com>
    Date: Fri Sep 21 15:13:07 2018 +0800

    <E5><A2><9E><E5><8A><A0><E4><B8><80><E8><A1><8C>readme

    commit 04018e41728e15d1a61a59923abfa51f443994ed
    Author: liming_local <liming@centos7.com>
    Date: Fri Sep 21 15:11:36 2018 +0800

    <E5><88><9D><E5><A7><8B><E5><8C><96><E6><8F><90><E4><BA><A4>

    设置git的编码格式

     git config --global core.quotepath false   #显示 status 编码
    
     git config --global gui.encoding utf-8  #图形界面编码
    
     git config --global i18n.commit.encoding utf-8  #提交信息编码
    
     git config --global i18n.logoutputencoding utf-8  #输出 log 编码
    
     export LESSCHARSET=utf-8
    

     再次查看

    [liming@centos7 2018-09-21]$ git log
    commit 5eb920f9674586be09d5d99033b10a19f59e8957
    Author: liming_local <liming@centos7.com>
    Date:   Fri Sep 21 15:13:07 2018 +0800
    
        增加一行readme
    
    commit 04018e41728e15d1a61a59923abfa51f443994ed
    Author: liming_local <liming@centos7.com>
    Date:   Fri Sep 21 15:11:36 2018 +0800
    
        初始化提交

     本地删除文件并恢复 git  checkout ,场景:当你修改文件后发现文件修改的有很大问题,可以回到之前提交列表的状态

    [liming@centos7 2018-09-21]$ rm -f readme
    [liming@centos7 2018-09-21]$ ls
    log
    
    [liming@centos7 2018-09-21]$ git checkout readme
    [liming@centos7 2018-09-21]$ ls
    log  readme
    [liming@centos7 2018-09-21]$ more readme

     git show 加 id 查看日志的详细内容

    [liming@centos7 2018-09-21]$ git show  04018e41728e15d1a61a59923abfa51f443994ed
    commit 04018e41728e15d1a61a59923abfa51f443994ed
    Author: liming_local <liming@centos7.com>
    Date:   Fri Sep 21 15:11:36 2018 +0800
    
        初始化提交
    
    diff --git a/log b/log
    new file mode 100644
    index 0000000..a1514f8
    --- /dev/null
    +++ b/log
    @@ -0,0 +1 @@
    +log log
    diff --git a/readme b/readme
    new file mode 100644
    index 0000000..54e4beb
    --- /dev/null
    +++ b/readme
    @@ -0,0 +1 @@
    +this is a first file for git
    View Code

    git  reset 命令

    下面先看一张表

    git reset 撤销有三种方式:尽量不采用head的方式

    1  --soft  commit-id 表示从本地仓库的位置推到待提交列表的位置,再次使用git commit -m 可以提交到本地仓库位置

    [liming@centos7 2018-09-21]$ git log
    commit 8aa0bb07b80425baf96300c1439c94e923803c1c
    Author: liming_local <liming@centos7.com>
    Date:   Fri Sep 21 16:31:25 2018 +0800
    
        增加文件3.txt
    
    commit a25abc1a8dd505825bcc87240c08ea477ba23de5
    Author: liming_local <liming@centos7.com>
    Date:   Fri Sep 21 16:30:40 2018 +0800
    
        增加文件2.txt
    
    commit fee63c016ef26ce241c72da2ecab9449cd9508c3
    Author: liming_local <liming@centos7.com>
    Date:   Fri Sep 21 16:30:10 2018 +0800
    
        增加文件1.txt
    
    commit 5eb920f9674586be09d5d99033b10a19f59e8957
    Author: liming_local <liming@centos7.com>
    Date:   Fri Sep 21 15:13:07 2018 +0800
    
        增加一行readme
    
    commit 04018e41728e15d1a61a59923abfa51f443994ed
    Author: liming_local <liming@centos7.com>
    Date:   Fri Sep 21 15:11:36 2018 +0800
    
        初始化提交
    [liming@centos7 2018-09-21]$ git reset --soft a25abc1a8dd505825bcc87240c08ea477ba23de5
    [liming@centos7 2018-09-21]$ git status
    # On branch master
    # Changes to be committed:
    #   (use "git reset HEAD <file>..." to unstage)
    #
    #    new file:   3.txt
    #
    [liming@centos7 2018-09-21]$ git log
    commit a25abc1a8dd505825bcc87240c08ea477ba23de5
    Author: liming_local <liming@centos7.com>
    Date:   Fri Sep 21 16:30:40 2018 +0800
    
        增加文件2.txt
    
    commit fee63c016ef26ce241c72da2ecab9449cd9508c3
    Author: liming_local <liming@centos7.com>
    Date:   Fri Sep 21 16:30:10 2018 +0800
    
        增加文件1.txt
    
    commit 5eb920f9674586be09d5d99033b10a19f59e8957
    Author: liming_local <liming@centos7.com>
    Date:   Fri Sep 21 15:13:07 2018 +0800
    
        增加一行readme
    
    commit 04018e41728e15d1a61a59923abfa51f443994ed
    Author: liming_local <liming@centos7.com>
    Date:   Fri Sep 21 15:11:36 2018 +0800
    
        初始化提交
    View Code

     2 --mixed commit-id 表示回到本地代码的位置,需要 git add   ,   git   commit  才能恢复到本地仓库位置

    [liming@centos7 2018-09-21]$ git log
    commit 7668f11905334fda74fc409c8ecbc7cafc3a6352
    Author: liming_local <liming@centos7.com>
    Date:   Fri Sep 21 16:45:54 2018 +0800
    
        3.txt重新提交
    
    commit a25abc1a8dd505825bcc87240c08ea477ba23de5
    Author: liming_local <liming@centos7.com>
    Date:   Fri Sep 21 16:30:40 2018 +0800
    
        增加文件2.txt
    
    commit fee63c016ef26ce241c72da2ecab9449cd9508c3
    Author: liming_local <liming@centos7.com>
    Date:   Fri Sep 21 16:30:10 2018 +0800
    
        增加文件1.txt
    
    commit 5eb920f9674586be09d5d99033b10a19f59e8957
    Author: liming_local <liming@centos7.com>
    Date:   Fri Sep 21 15:13:07 2018 +0800
    
        增加一行readme
    
    commit 04018e41728e15d1a61a59923abfa51f443994ed
    [liming@centos7 2018-09-21]$ git status
    # On branch master
    nothing to commit, working directory clean
    [liming@centos7 2018-09-21]$ git reset --mixed a25abc1a8dd505825bcc87240c08ea477ba23de5
    [liming@centos7 2018-09-21]$ git log
    commit a25abc1a8dd505825bcc87240c08ea477ba23de5
    Author: liming_local <liming@centos7.com>
    Date:   Fri Sep 21 16:30:40 2018 +0800
    
        增加文件2.txt
    
    commit fee63c016ef26ce241c72da2ecab9449cd9508c3
    Author: liming_local <liming@centos7.com>
    Date:   Fri Sep 21 16:30:10 2018 +0800
    
        增加文件1.txt
    
    commit 5eb920f9674586be09d5d99033b10a19f59e8957
    Author: liming_local <liming@centos7.com>
    Date:   Fri Sep 21 15:13:07 2018 +0800
    
        增加一行readme
    
    commit 04018e41728e15d1a61a59923abfa51f443994ed
    Author: liming_local <liming@centos7.com>
    Date:   Fri Sep 21 15:11:36 2018 +0800
    
        初始化提交
    [liming@centos7 2018-09-21]$ git status
    # On branch master
    # Untracked files:
    #   (use "git add <file>..." to include in what will be committed)
    #
    #    3.txt
    nothing added to commit but untracked files present (use "git add" to track)
    View Code

    3 --hard commit-id (慎用,生产中用到的次数极少);表示本地仓库和本地代码的状态都回到 提交代码时的状态;请看下面会到  增加文件1.txt  的状态

    [liming@centos7 2018-09-21]$ git log
    commit 6d5057d6b725a44863d53fdfff8ed7a43f521363
    Author: liming_local <liming@centos7.com>
    Date:   Fri Sep 21 16:57:14 2018 +0800
    
        第三次提交3.txt
    
    commit a25abc1a8dd505825bcc87240c08ea477ba23de5
    Author: liming_local <liming@centos7.com>
    Date:   Fri Sep 21 16:30:40 2018 +0800
    
        增加文件2.txt
    
    commit fee63c016ef26ce241c72da2ecab9449cd9508c3
    Author: liming_local <liming@centos7.com>
    Date:   Fri Sep 21 16:30:10 2018 +0800
    
        增加文件1.txt
    
    commit 5eb920f9674586be09d5d99033b10a19f59e8957
    Author: liming_local <liming@centos7.com>
    Date:   Fri Sep 21 15:13:07 2018 +0800
    
        增加一行readme
    
    commit 04018e41728e15d1a61a59923abfa51f443994ed
    [liming@centos7 2018-09-21]$ git reset --hard fee63c016ef26ce241c72da2ecab9449cd9508c3
    HEAD is now at fee63c0 增加文件1.txt
    [liming@centos7 2018-09-21]$ git log
    commit fee63c016ef26ce241c72da2ecab9449cd9508c3
    Author: liming_local <liming@centos7.com>
    Date:   Fri Sep 21 16:30:10 2018 +0800
    
        增加文件1.txt
    
    commit 5eb920f9674586be09d5d99033b10a19f59e8957
    Author: liming_local <liming@centos7.com>
    Date:   Fri Sep 21 15:13:07 2018 +0800
    
        增加一行readme
    
    commit 04018e41728e15d1a61a59923abfa51f443994ed
    Author: liming_local <liming@centos7.com>
    Date:   Fri Sep 21 15:11:36 2018 +0800
    
        初始化提交
    [liming@centos7 2018-09-21]$ ls
    1.txt  log  readme
    View Code

     git rm 场景:你在本地删除一个文件,要想本地仓库保持一致,就使用这个命令

    [liming@centos7 2018-09-21]$ rm 1.txt   #本地删除文件
    [liming@centos7 2018-09-21]$ git status
    # On branch master
    # Changes not staged for commit:
    #   (use "git add/rm <file>..." to update what will be committed)
    #   (use "git checkout -- <file>..." to discard changes in working directory)
    #
    #    deleted:    1.txt
    #
    no changes added to commit (use "git add" and/or "git commit -a")
    [liming@centos7 2018-09-21]$ git log
    commit fee63c016ef26ce241c72da2ecab9449cd9508c3
    Author: liming_local <liming@centos7.com>
    Date:   Fri Sep 21 16:30:10 2018 +0800
    
        增加文件1.txt
    
    commit 5eb920f9674586be09d5d99033b10a19f59e8957
    Author: liming_local <liming@centos7.com>
    Date:   Fri Sep 21 15:13:07 2018 +0800
    
        增加一行readme
    
    commit 04018e41728e15d1a61a59923abfa51f443994ed
    Author: liming_local <liming@centos7.com>
    Date:   Fri Sep 21 15:11:36 2018 +0800
    
        初始化提交
    
    [liming@centos7 2018-09-21]$ git rm 1.txt #本地仓库也删除
    rm '1.txt'
    [liming@centos7 2018-09-21]$ git log
    commit fee63c016ef26ce241c72da2ecab9449cd9508c3
    Author: liming_local <liming@centos7.com>
    Date:   Fri Sep 21 16:30:10 2018 +0800
    
        增加文件1.txt
    
    commit 5eb920f9674586be09d5d99033b10a19f59e8957
    Author: liming_local <liming@centos7.com>
    Date:   Fri Sep 21 15:13:07 2018 +0800
    
        增加一行readme
    
    commit 04018e41728e15d1a61a59923abfa51f443994ed
    Author: liming_local <liming@centos7.com>
    Date:   Fri Sep 21 15:11:36 2018 +0800
    
        初始化提交
    [liming@centos7 2018-09-21]$  git status
    # On branch master
    # Changes to be committed:
    #   (use "git reset HEAD <file>..." to unstage)
    #
    #    deleted:    1.txt
    #
    [liming@centos7 2018-09-21]$ git commit -m '删除了1.txt'  #提交一次删除操作
    [master a90c6c4] 删除了1.txt
     1 file changed, 0 insertions(+), 0 deletions(-)
     delete mode 100644 1.txt
    [liming@centos7 2018-09-21]$ git status   #状态就可以了
    # On branch master
    nothing to commit, working directory clean
    [liming@centos7 2018-09-21]$ git log
    commit a90c6c43997799e4fd8ec318157c952d07442531
    Author: liming_local <liming@centos7.com>
    Date:   Fri Sep 21 17:12:20 2018 +0800
    
        删除了1.txt
    
    commit fee63c016ef26ce241c72da2ecab9449cd9508c3
    Author: liming_local <liming@centos7.com>
    Date:   Fri Sep 21 16:30:10 2018 +0800
    
        增加文件1.txt
    
    commit 5eb920f9674586be09d5d99033b10a19f59e8957
    Author: liming_local <liming@centos7.com>
    Date:   Fri Sep 21 15:13:07 2018 +0800
    
        增加一行readme
    
    commit 04018e41728e15d1a61a59923abfa51f443994ed
    Author: liming_local <liming@centos7.com>
    Date:   Fri Sep 21 15:11:36 2018 +0800
    
        初始化提交
    View Code

     .gitignore文件:用来忽略一些不想提交的文件,这个最好初始化的时候创建

    首先建立一个文件 
    touch  .gitignore
    touch database.yml #忽略这个文件
    
    vim .gitignore
    *yml  忽略yml结尾的文件
    
    提交.gitignore
    git add .gitignore
    
    git commit -m '提交文件 .gitignore'

     git  checkout   分支名称, 切换到其他分支的命令

    [liming@centos7 2018-09-21]$ git branch
    * master
    [liming@centos7 2018-09-21]$ git branch 20180921-001 #创建分支
    [liming@centos7 2018-09-21]$ git branch #当前分支前面有*
      20180921-001
    * master
    [liming@centos7 2018-09-21]$ git checkout 20180921-001  #切换到分支上面
    Switched to branch '20180921-001'
    接着我们修改文件readme
    再提交
    git add readme
    git commit -m '001分支修改readme内容'
    查看
    分别切换到主分支,和001分支,发现001分支多一条log

     删除一个分支:git branch -d   名称

    [liming@centos7 2018-09-21]$ git branch 20180921-002
    [liming@centos7 2018-09-21]$ git branch -d 20180921-002
    Deleted branch 20180921-002 (was a4f1c8b).
    [liming@centos7 2018-09-21]$ git branch
    * 20180921-001
      master

     git merge  分支名称  将分支的改变同步到主分支,这个比svn和cvs有优势,没有奔溃的危险

    先切换到主分支
    git checkout master
    
    合并
    git merge 20180921-001
    
    git log   #查看 日志多了分支的一条记录,id 也一样

     到这里为止,我们只用到了本地仓库的层次,还有远程的git服务器用来提交代码,然后成员之间相互交流

    先说一下现有的git服务器,有githup这个是外国的,要考虑网络问题还有私有是要收费的,codIng.net这个是国内的,私有是免费的

    现在我们使用coding.net说明

    1 先在coding.net上面注册
    2 新建项目
    3 回到linux上面推送代码
    [liming@centos7 2018-09-21]$ git remote add origin https://git.coding.net/study_more/first_item.git
    [liming@centos7 2018-09-21]$ git push -u origin master
    Username for 'https://git.coding.net': XXXXX
    Password for 'https://study_more@git.coding.net': 
    Counting objects: 17, done.
    Compressing objects: 100% (12/12), done.
    Writing objects: 100% (17/17), 1.51 KiB | 0 bytes/s, done.
    Total 17 (delta 2), reused 0 (delta 0)
    To https://git.coding.net/study_more/first_item.git
     * [new branch]      master -> master
    Branch master set up to track remote branch master from origin.

    回到coding.net上面查看

     当然也可以多个远程服务器的地址并存:

    修改配置

    cat .git/config
    [remote "origin"]
        url = https://git.coding.net/study_more/first_item.git
        fetch = +refs/heads/*:refs/remotes/origin/*
    [remote "backup"]
        url =比如说github的地址
        fetch = +refs/heads/*:refs/remotes/bakcup/*

     说明:

    git remote add origin https://git.coding.net/study_more/first_item.git  其中的origin指的就是 远程服务其的名称

    git push -u origin master  (master:master)

     git clone  从远程下载git的项目

    1 新建一个目录,可以是没有使用git初始化的
    [liming@centos7 2018-09-21]$ cd ..
    [liming@centos7 workspace]$ ls
    2018-09-21
    [liming@centos7 workspace]$ mkdir down_load
    [liming@centos7 workspace]$ cd down_load/
    [liming@centos7 down_load]$ git clone https://git.coding.net/study_more/first_item.git
    Cloning into 'first_item'...
    Username for 'https://git.coding.net': XXXXXX
    Password for 'https://study_more@git.coding.net': 
    remote: Enumerating objects: 17, done.
    remote: Counting objects: 100% (17/17), done.
    remote: Compressing objects: 100% (12/12), done.
    remote: Total 17 (delta 2), reused 0 (delta 0)
    Unpacking objects: 100% (17/17), done.
    [liming@centos7 down_load]$ ls
    first_item

     git pull origin master 从远程服务器上面pull项目,必须是使用了git初始化了的情况

    这样一来,一个提交,一个pull就可以相互的交流了,工作中要多push

     git冲突的问题:

    场景:我这边修改了本地文件没提交,另外一边有另外一个同事也修改了同样的文件并且提交了

    我push命令的时候出现了错误:

    [liming@centos7 2018-09-21]$ git pull origin master
    Username for 'https://git.coding.net': study_more
    Password for 'https://study_more@git.coding.net': 
    remote: Enumerating objects: 5, done.
    remote: Counting objects: 100% (5/5), done.
    remote: Compressing objects: 100% (3/3), done.
    remote: Total 3 (delta 1), reused 0 (delta 0)
    Unpacking objects: 100% (3/3), done.
    From https://git.coding.net/study_more/first_item
     * branch            master     -> FETCH_HEAD
    Auto-merging readme
    CONFLICT (content): Merge conflict in readme
    Automatic merge failed; fix conflicts and then commit the result.
    [liming@centos7 2018-09-21]$ git status
    # On branch master
    # Your branch is ahead of 'origin/master' by 1 commit.
    #   (use "git push" to publish your local commits)
    #
    # You have unmerged paths.
    #   (fix conflicts and run "git commit")
    #
    # Unmerged paths:
    #   (use "git add <file>..." to mark resolution)
    #
    #    both modified:      readme
    #
    no changes added to commit (use "git add" and/or "git commit -a")

    解决:注意上面提到了readme文件

    首先 人工去协商;确认需要保留的

    this is a first file for git
    add  a line
    在001分支上面加的内容
    <<<<<<< HEAD
    在目录2018-09-21中的修改
    =======
    在目录hhh中的修改
    >>>>>>> 83f9fe1b6ee0bf33b70deda90d40043fba2084b8
    
    我将上面的内容改为

    this is a first file for git
    add a line
    在001分支上面加的内容
    在目录2018-09-21中的修改

    我再操作一次

    git add readme

    git commit -m "合并冲突"

    git push origin master

    在同事的另外一般就可以pull了看到的就是合并后的内容

    注意事项:

    首先想到的是要pull代码,修改代码要多提交,一旦出现冲突就可以短时间内解决,否则一旦代码多了,你哭去吧

     最后git使用注意的事项

    1 不要改变时间线  rebase不要用,cherry-pick没必要用

    2 代码存放选择:开源放 github ,私有放coding.net ,尽量不要自己搭建gitlab,出了问题不好解决

    3 git log写具体些,宁多勿少

  • 相关阅读:
    nginx 注册为服务
    使用Windows Service Wrapper快速创建一个Windows Service
    mongo数据导入导出
    msql数据导入导出
    sql server 数据库之间导入导出数据表
    性能问题核对清单
    常用sqlserver性能分析
    Jmeter压测Mysql示例
    nginx日志定制
    zookeeper集群部署
  • 原文地址:https://www.cnblogs.com/mmyy-blog/p/9685408.html
Copyright © 2011-2022 走看看