Git学习

作者: fastcv | 来源:发表于2019-09-19 17:08 被阅读0次

    初始化操作

    gerry@gerry-H81M-DS2:/temp/files$ git init
    初始化空的 Git 仓库于 /temp/files/.git/
    
    gerry@gerry-H81M-DS2:/temp/files$ ls -al
    总用量 12
    drwxrwxr-x  3 gerry gerry 4096 9月  19 11:30 .
    drwxrwxrwx 17 root  root  4096 9月  19 11:28 ..
    drwxrwxr-x  7 gerry gerry 4096 9月  19 11:30 .git
    

    新增提交操作

    gerry@gerry-H81M-DS2:/temp/files$ touch readme.txt
    gerry@gerry-H81M-DS2:/temp/files$ vi readme.txt
    gerry@gerry-H81M-DS2:/temp/files$ cat readme.txt 
    Git is a version control system.
    Git is free software.
    gerry@gerry-H81M-DS2:/temp/files$ git add readme.txt 
    gerry@gerry-H81M-DS2:/temp/files$ git commit -m "wrote a readme file"
    [master (根提交) 647dda7] wrote a readme file
     1 file changed, 2 insertions(+)
     create mode 100644 readme.txt
    

    更新之后查看状态操作

    gerry@gerry-H81M-DS2:/temp/files$ vi readme.txt
    gerry@gerry-H81M-DS2:/temp/files$ cat readme.txt 
    Git is a distributed version control system.
    Git is free software.
    gerry@gerry-H81M-DS2:/temp/files$ git status
    位于分支 master
    尚未暂存以备提交的变更:
      (使用 "git add <文件>..." 更新要提交的内容)
      (使用 "git checkout -- <文件>..." 丢弃工作区的改动)
    
        修改:     readme.txt
    
    未跟踪的文件:
      (使用 "git add <文件>..." 以包含要提交的内容)
    
        .readme.txt.swp
    
    修改尚未加入提交(使用 "git add" 和/或 "git commit -a")
    

    看看具体修改了什么内容操作

    gerry@gerry-H81M-DS2:/temp/files$ git diff
    diff --git a/readme.txt b/readme.txt
    index 46d49bf..9247db6 100644
    --- a/readme.txt
    +++ b/readme.txt
    @@ -1,2 +1,2 @@
    -Git is a version control system.
    +Git is a distributed version control system.
     Git is free software.
    

    查看历史

    gerry@gerry-H81M-DS2:/temp/files$ vi readme.txt 
    gerry@gerry-H81M-DS2:/temp/files$ cat readme.txt 
    Git is a distributed version control system.
    Git is free software distributed under the GPL.
    gerry@gerry-H81M-DS2:/temp/files$ 
    gerry@gerry-H81M-DS2:/temp/files$ git add readme.txt 
    gerry@gerry-H81M-DS2:/temp/files$ git commit -m "append GPL"
    [master 44643e9] append GPL
     1 file changed, 1 insertion(+), 1 deletion(-)
    gerry@gerry-H81M-DS2:/temp/files$ 
    gerry@gerry-H81M-DS2:/temp/files$ git log
    commit 44643e9d0d7273941d82b90a092421d7406e6f02
    Author: gerry <heyxhazx1003@163.com>
    Date:   Thu Sep 19 11:44:20 2019 +0800
    
        append GPL
    
    commit a2e20fd9327f034823666b05c1ac313ac1cd9661
    Author: gerry <heyxhazx1003@163.com>
    Date:   Thu Sep 19 11:40:20 2019 +0800
    
        add distributed
    
    commit 647dda76c889395fa35d6dd10c2d47dea1b7f9df
    Author: gerry <heyxhazx1003@163.com>
    Date:   Thu Sep 19 11:34:13 2019 +0800
    
        wrote a readme file
    gerry@gerry-H81M-DS2:/temp/files$ git log --pretty=oneline
    44643e9d0d7273941d82b90a092421d7406e6f02 append GPL
    a2e20fd9327f034823666b05c1ac313ac1cd9661 add distributed
    647dda76c889395fa35d6dd10c2d47dea1b7f9df wrote a readme file
    
    

    版本回退

    gerry@gerry-H81M-DS2:/temp/files$ git log --pretty=oneline
    44643e9d0d7273941d82b90a092421d7406e6f02 append GPL
    a2e20fd9327f034823666b05c1ac313ac1cd9661 add distributed
    647dda76c889395fa35d6dd10c2d47dea1b7f9df wrote a readme file
    gerry@gerry-H81M-DS2:/temp/files$ 
    gerry@gerry-H81M-DS2:/temp/files$ git reset --hard HEAD^
    HEAD 现在位于 a2e20fd add distributed
    gerry@gerry-H81M-DS2:/temp/files$ cat readme.txt 
    Git is a distributed version control system.
    Git is free software.
    gerry@gerry-H81M-DS2:/temp/files$ git log
    commit a2e20fd9327f034823666b05c1ac313ac1cd9661
    Author: gerry <heyxhazx1003@163.com>
    Date:   Thu Sep 19 11:40:20 2019 +0800
    
        add distributed
    
    commit 647dda76c889395fa35d6dd10c2d47dea1b7f9df
    Author: gerry <heyxhazx1003@163.com>
    Date:   Thu Sep 19 11:34:13 2019 +0800
    
        wrote a readme file
    gerry@gerry-H81M-DS2:/temp/files$ git reset --hard 44643e
    HEAD 现在位于 44643e9 append GPL
    gerry@gerry-H81M-DS2:/temp/files$ git log
    commit 44643e9d0d7273941d82b90a092421d7406e6f02
    Author: gerry <heyxhazx1003@163.com>
    Date:   Thu Sep 19 11:44:20 2019 +0800
    
        append GPL
    
    commit a2e20fd9327f034823666b05c1ac313ac1cd9661
    Author: gerry <heyxhazx1003@163.com>
    Date:   Thu Sep 19 11:40:20 2019 +0800
    
        add distributed
    
    commit 647dda76c889395fa35d6dd10c2d47dea1b7f9df
    Author: gerry <heyxhazx1003@163.com>
    Date:   Thu Sep 19 11:34:13 2019 +0800
    
        wrote a readme file
    gerry@gerry-H81M-DS2:/temp/files$ cat readme.txt 
    Git is a distributed version control system.
    Git is free software distributed under the GPL.
    

    查看每一次的操作记录

    gerry@gerry-H81M-DS2:/temp/files$ git reflog
    44643e9 HEAD@{0}: reset: moving to 44643e
    a2e20fd HEAD@{1}: reset: moving to HEAD^
    44643e9 HEAD@{2}: commit: append GPL
    a2e20fd HEAD@{3}: commit: add distributed
    647dda7 HEAD@{4}: commit (initial): wrote a readme file
    
    

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

    gerry@gerry-H81M-DS2:/temp/files$ git diff HEAD -- readme.txt
    diff --git a/readme.txt b/readme.txt
    index 8443d23..a824bbc 100644
    --- a/readme.txt
    +++ b/readme.txt
    @@ -1,2 +1,3 @@
     Git is a distributed version control system.
     Git is free software distributed under the GPL.
    +Git has a mutable idnex called stage.
    
    

    丢弃工作区的修改

    gerry@gerry-H81M-DS2:/temp/files$ vi readme.txt 
    gerry@gerry-H81M-DS2:/temp/files$ git status
    位于分支 master
    尚未暂存以备提交的变更:
      (使用 "git add <文件>..." 更新要提交的内容)
      (使用 "git checkout -- <文件>..." 丢弃工作区的改动)
    
        修改:     readme.txt
    
    修改尚未加入提交(使用 "git add" 和/或 "git commit -a")
    gerry@gerry-H81M-DS2:/temp/files$ git checkout -- readme.txt
    gerry@gerry-H81M-DS2:/temp/files$ git status
    位于分支 master
    无文件要提交,干净的工作区
    
    

    git checkout -- file命令中的--很重要,没有--,就变成了“切换到另一个分支”的命令

    丢弃暂缓区的修改

    gerry@gerry-H81M-DS2:/temp/files$ vi readme.txt 
    gerry@gerry-H81M-DS2:/temp/files$ cat readme.txt 
    Git is a distributed version control system.
    Git is free software distributed under the GPL.
    Git has a mutable idnex called stage.
    My stupid boss still prefers SVN.
    gerry@gerry-H81M-DS2:/temp/files$ git add readme.txt 
    gerry@gerry-H81M-DS2:/temp/files$ git status
    位于分支 master
    要提交的变更:
      (使用 "git reset HEAD <文件>..." 以取消暂存)
    
        修改:     readme.txt
    
    gerry@gerry-H81M-DS2:/temp/files$ git reset HEAD readme.txt
    重置后取消暂存的变更:
    M   readme.txt
    gerry@gerry-H81M-DS2:/temp/files$ git status
    位于分支 master
    尚未暂存以备提交的变更:
      (使用 "git add <文件>..." 更新要提交的内容)
      (使用 "git checkout -- <文件>..." 丢弃工作区的改动)
    
        修改:     readme.txt
    
    修改尚未加入提交(使用 "git add" 和/或 "git commit -a")
    gerry@gerry-H81M-DS2:/temp/files$ git checkout -- readme.txt
    gerry@gerry-H81M-DS2:/temp/files$ git status
    位于分支 master
    无文件要提交,干净的工作区
    
    

    删除文件

    确定删除

    gerry@gerry-H81M-DS2:/temp/files$ touch hello.txt
    gerry@gerry-H81M-DS2:/temp/files$ git status
    位于分支 master
    未跟踪的文件:
      (使用 "git add <文件>..." 以包含要提交的内容)
    
        hello.txt
    
    提交为空,但是存在尚未跟踪的文件(使用 "git add" 建立跟踪)
    gerry@gerry-H81M-DS2:/temp/files$ git add hello.txt 
    gerry@gerry-H81M-DS2:/temp/files$ git commit -m "add hello.txt file"
    [master 945402c] add hello.txt file
     1 file changed, 0 insertions(+), 0 deletions(-)
     create mode 100644 hello.txt
    gerry@gerry-H81M-DS2:/temp/files$ rm hello.txt 
    gerry@gerry-H81M-DS2:/temp/files$ git status
    位于分支 master
    尚未暂存以备提交的变更:
      (使用 "git add/rm <文件>..." 更新要提交的内容)
      (使用 "git checkout -- <文件>..." 丢弃工作区的改动)
    
        删除:     hello.txt
    
    修改尚未加入提交(使用 "git add" 和/或 "git commit -a")
    gerry@gerry-H81M-DS2:/temp/files$ git rm hello.txt 
    rm 'hello.txt'
    gerry@gerry-H81M-DS2:/temp/files$ git commit -m "remove hello.txt"
    [master fb14536] remove hello.txt
     1 file changed, 0 insertions(+), 0 deletions(-)
     delete mode 100644 hello.txt
    
    

    取消删除

    gerry@gerry-H81M-DS2:/temp/files$ touch hello.txt
    gerry@gerry-H81M-DS2:/temp/files$ git add hello.txt 
    gerry@gerry-H81M-DS2:/temp/files$ git commit -m "add file"
    [master d600b99] add file
     1 file changed, 0 insertions(+), 0 deletions(-)
     create mode 100644 hello.txt
    gerry@gerry-H81M-DS2:/temp/files$ git status
    位于分支 master
    无文件要提交,干净的工作区
    gerry@gerry-H81M-DS2:/temp/files$ rm hello.txt 
    gerry@gerry-H81M-DS2:/temp/files$ git status
    位于分支 master
    尚未暂存以备提交的变更:
      (使用 "git add/rm <文件>..." 更新要提交的内容)
      (使用 "git checkout -- <文件>..." 丢弃工作区的改动)
    
        删除:     hello.txt
    
    修改尚未加入提交(使用 "git add" 和/或 "git commit -a")
    gerry@gerry-H81M-DS2:/temp/files$ git checkout -- hello.txt
    gerry@gerry-H81M-DS2:/temp/files$ ls
    hello.txt  readme.txt
    
    

    远程仓库

    查看是否有秘钥

    //在用户主目录
    gerry@gerry-H81M-DS2:~$ cd .ssh
    gerry@gerry-H81M-DS2:~/.ssh$ ls
    id_rsa  id_rsa.pub  known_hosts
    gerry@gerry-H81M-DS2:~/.ssh$ 
    

    如果没有,那么就需要创建

    $ ssh-keygen -t rsa -C "youremail@example.com"
    

    然后一路同意回车即可

    有了秘钥之后

    我们把公钥配置到我们的github上面即可,具体操作步骤自行百度
    id_rsa.pub是公钥

    提交

    //先关联
    $ git remote add origin git@github.com:michaelliao/learngit.git
    
    //提交
    $ git push -u origin master
    Counting objects: 20, done.
    Delta compression using up to 4 threads.
    Compressing objects: 100% (15/15), done.
    Writing objects: 100% (20/20), 1.64 KiB | 560.00 KiB/s, done.
    Total 20 (delta 5), reused 0 (delta 0)
    remote: Resolving deltas: 100% (5/5), done.
    To github.com:michaelliao/learngit.git
     * [new branch]      master -> master
    Branch 'master' set up to track remote branch 'master' from 'origin'.
    

    把本地库的内容推送到远程,用git push命令,实际上是把当前分支master推送到远程。

    由于远程库是空的,我们第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。

    $ git push origin master
    

    新建分支

    new

    git switch -c dev

    gerry@gerry-H81M-DS2:/temp/files$ git checkout -b dev
    切换到一个新分支 'dev'
    gerry@gerry-H81M-DS2:/temp/files$ git branch
    * dev
      master
    gerry@gerry-H81M-DS2:/temp/files$ vi readme.txt 
    gerry@gerry-H81M-DS2:/temp/files$ git add readme.txt 
    gerry@gerry-H81M-DS2:/temp/files$ git commit -m "branch test"
    [dev 55e220b] branch test
     1 file changed, 1 insertion(+)
    gerry@gerry-H81M-DS2:/temp/files$ git checkout master
    切换到分支 'master'
    //$ git switch master
    gerry@gerry-H81M-DS2:/temp/files$ cat readme.txt 
    Git is a distributed version control system.
    Git is free software distributed under the GPL.
    Git has a mutable idnex called stage.
    
    

    git checkout命令加上-b参数表示创建并切换,相当于以下两条命令:

    $ git branch dev
    $ git checkout dev
    Switched to branch 'dev'
    

    合并分支

    gerry@gerry-H81M-DS2:/temp/files$ git checkout master
    切换到分支 'master'
    gerry@gerry-H81M-DS2:/temp/files$ cat readme.txt 
    Git is a distributed version control system.
    Git is free software distributed under the GPL.
    Git has a mutable idnex called stage.
    gerry@gerry-H81M-DS2:/temp/files$ git branch
      dev
    * master
    gerry@gerry-H81M-DS2:/temp/files$ git merge dev
    更新 d600b99..55e220b
    Fast-forward
     readme.txt | 1 +
     1 file changed, 1 insertion(+)
    gerry@gerry-H81M-DS2:/temp/files$ git status
    位于分支 master
    无文件要提交,干净的工作区
    gerry@gerry-H81M-DS2:/temp/files$ git log
    commit 55e220bdd233fe0f9c63bb6ea8246e8eac2fd5eb
    Author: gerry <heyxhazx1003@163.com>
    Date:   Thu Sep 19 12:28:38 2019 +0800
    
        branch test
    
    commit d600b996dcaf8d8aa1fcfb0d18cb3aa1f59ffdc0
    Author: gerry <heyxhazx1003@163.com>
    Date:   Thu Sep 19 12:12:51 2019 +0800
    
        add file
    
    commit fb14536102f0a530f806786a6f72c848ee8519fb
    Author: gerry <heyxhazx1003@163.com>
    Date:   Thu Sep 19 12:11:35 2019 +0800
    
        remove hello.txt
    
    commit 945402ceeff41ac8774ed547ce0360e263ba3080
    Author: gerry <heyxhazx1003@163.com>
    Date:   Thu Sep 19 12:10:18 2019 +0800
    
        add hello.txt file
    gerry@gerry-H81M-DS2:/temp/files$ cat readme.txt 
    Git is a distributed version control system.
    Git is free software distributed under the GPL.
    Git has a mutable idnex called stage.
    Create a new branch is quick.
    
    

    删除分支

    gerry@gerry-H81M-DS2:/temp/files$ git branch -d dev
    已删除分支 dev(曾为 55e220b)。
    gerry@gerry-H81M-DS2:/temp/files$ git branch
    * master
    
    

    查看分支合并情况

    git log --graph --pretty=oneline --abbrev-commit
    *   c44a846 conflict fixed
    |\  
    | * 23e6df6 AND simple
    * | b508aed & simple
    |/  
    * a3b43ce AND simple
    * 55e220b branch test
    * d600b99 add file
    * fb14536 remove hello.txt
    * 945402c add hello.txt file
    * 7a9ccd4 change
    * 44643e9 append GPL
    * a2e20fd add distributed
    * 647dda7 wrote a readme file
    
    

    相关文章

      网友评论

          本文标题:Git学习

          本文链接:https://www.haomeiwen.com/subject/lwjkuctx.html