• Git 安装部署的详细说明


    1、官网安装 https://git-scm.com/downloads

    2、创建本地版本库

    
    Administrator@ThinkPadX1-Youga MINGW64 ~
    $ pwd
    /c/Users/Administrator
    
    Administrator@ThinkPadX1-Youga MINGW64 ~
    $ cd d:
    
    Administrator@ThinkPadX1-Youga MINGW64 /d
    $ pwd
    /d
    
    Administrator@ThinkPadX1-Youga MINGW64 /d
    $ mkdir git_repository
    
    Administrator@ThinkPadX1-Youga MINGW64 /d
    $ cd git_repository
    
    Administrator@ThinkPadX1-Youga MINGW64 /d/git_repository
    $ pwd
    /d/git_repository
    

    3、设置登录用户与邮箱

    Administrator@ThinkPadX1-Youga MINGW64 /d
    $ git config --global user.name xxx  -----登录用户
    
    Administrator@ThinkPadX1-Youga MINGW64 /d
    $ git config --global user.email xxx@139.com   -----登录邮箱
    
    Administrator@ThinkPadX1-Youga MINGW64 /d
    $ cd TestSoftware/
    
    Administrator@ThinkPadX1-Youga MINGW64 /d/TestSoftware
    $ cd git_repository/
    
    Administrator@ThinkPadX1-Youga MINGW64 /d/TestSoftware/git_repository
    $ pwd
    /d/TestSoftware/git_repository
    
    

    4、初始化版本库

    Administrator@ThinkPadX1-Youga MINGW64 /d/TestSoftware/git_repository
    $ git init
    Initialized empty Git repository in D:/TestSoftware/git_repository/.git/
    
    Administrator@ThinkPadX1-Youga MINGW64 /d/TestSoftware/git_repository (master)
    $ pwd
    /d/TestSoftware/git_repository
    
    Administrator@ThinkPadX1-Youga MINGW64 /d/TestSoftware/git_repository (master)
    $ ls -ah
    ./  ../  .git/
    
    Administrator@ThinkPadX1-Youga MINGW64 /d/TestSoftware/git_repository (master)
    $ pwd
    /d/TestSoftware/git_repository
    

    5、在版本库文件夹内创建readme.txt,并提交

    Administrator@ThinkPadX1-Youga MINGW64 /d/TestSoftware/git_repository (master)
    $ git add readme.txt
    fatal: pathspec 'readme.txt' did not match any files 
    
    Administrator@ThinkPadX1-Youga MINGW64 /d/TestSoftware/git_repository (master)
    $ git add readme.txt
    
    Administrator@ThinkPadX1-Youga MINGW64 /d/TestSoftware/git_repository (master)
    $ git commit -m "wrote a readme file2"
    [master f94d02b] wrote a readme file2
     1 file changed, 3 insertions(+)
    

    6、更新多次文件内容

    Administrator@ThinkPadX1-Youga MINGW64 /d/TestSoftware/git_repository (master)
    $ git add readme.txt
    
    Administrator@ThinkPadX1-Youga MINGW64 /d/TestSoftware/git_repository (master)
    $ git commit -m "append GPL"
    [master 195f5c9] append GPL
     1 file changed, 3 insertions(+), 1 deletion(-)
    
    Administrator@ThinkPadX1-Youga MINGW64 /d/TestSoftware/git_repository (master)
    $ git add readme.txt
    
    Administrator@ThinkPadX1-Youga MINGW64 /d/TestSoftware/git_repository (master)
    $ git commit -m "append friend"
    [master 77f50d5] append friend
     1 file changed, 3 insertions(+), 1 deletion(-)
    
    Administrator@ThinkPadX1-Youga MINGW64 /d/TestSoftware/git_repository (master)
    $ git log
    commit 77f50d59e515a5b64e57f5fb66a7be9cf5bc1c93 (HEAD -> master)
    Author: xxx <xxx@139.com>
    Date:   Tue Jan 26 10:36:37 2021 +0800
    
        append friend
    
    commit 195f5c95037a8259a5e1e2dea6f031d8418672be
    Author: xxx <xxx@139.com>
    Date:   Tue Jan 26 10:35:07 2021 +0800
    
        append GPL
    
    commit f94d02b835bcc03025b1978fa62f8795d4d1e1a0
    Author: xxx <xxx@139.com>
    Date:   Tue Jan 26 10:33:27 2021 +0800
    
        wrote a readme file2
    
    commit 9ae196987e826988ddc7ac65b3dc55cf3134644b
    Author: xxx <xxx@139.com>
    Date:   Tue Jan 26 10:32:05 2021 +0800
    
        wrote a readme file
    

    7、回退版本和恢复版本

    Administrator@ThinkPadX1-Youga MINGW64 /d/TestSoftware/git_repository (master)
    $ git log --pretty=oneline
    77f50d59e515a5b64e57f5fb66a7be9cf5bc1c93 (HEAD -> master) append friend
    195f5c95037a8259a5e1e2dea6f031d8418672be append GPL
    f94d02b835bcc03025b1978fa62f8795d4d1e1a0 wrote a readme file2
    9ae196987e826988ddc7ac65b3dc55cf3134644b wrote a readme file
    
    Administrator@ThinkPadX1-Youga MINGW64 /d/TestSoftware/git_repository (master)
    $ git reset --hard HEAD^
    HEAD is now at 195f5c9 append GPL
    
    Administrator@ThinkPadX1-Youga MINGW64 /d/TestSoftware/git_repository (master)
    $ git log
    commit 195f5c95037a8259a5e1e2dea6f031d8418672be (HEAD -> master)
    Author: xxx <xxx.com>
    Date:   Tue Jan 26 10:35:07 2021 +0800
    
        append GPL
    
    commit f94d02b835bcc03025b1978fa62f8795d4d1e1a0
    Author: xxx <xxx@139.com>
    Date:   Tue Jan 26 10:33:27 2021 +0800
    
        wrote a readme file2
    
    commit 9ae196987e826988ddc7ac65b3dc55cf3134644b
    Author: xxx <xxx@139.com>
    Date:   Tue Jan 26 10:32:05 2021 +0800
    
        wrote a readme file
    
    Administrator@ThinkPadX1-Youga MINGW64 /d/TestSoftware/git_repository (master)
    $ git reset --hard 77f5
    HEAD is now at 77f50d5 append friend
    
    Administrator@ThinkPadX1-Youga MINGW64 /d/TestSoftware/git_repository (master)
    $ cat readme.txt
    111
    2222
    3333
    Git is a distributed version control system.
    Git is free software distributed under the GPL.
    
    Git is a friend
    Administrator@ThinkPadX1-Youga MINGW64 /d/TestSoftware/git_repository (master)
    $
    
    

    8、删除文件

    Administrator@ThinkPadX1-Youga MINGW64 /d/TestSoftware/git_repository (master)
    $ git add test1.txt
    
    Administrator@ThinkPadX1-Youga MINGW64 /d/TestSoftware/git_repository (master)
    $ git commit -m 'add test'
    [master dd7f462] add test
     1 file changed, 1 insertion(+)
     create mode 100644 test1.txt
    
    Administrator@ThinkPadX1-Youga MINGW64 /d/TestSoftware/git_repository (master)
    $ rm test.txt
    rm: cannot remove 'test.txt': No such file or directory
    
    Administrator@ThinkPadX1-Youga MINGW64 /d/TestSoftware/git_repository (master)
    $ git status
    On branch master
    nothing to commit, working tree clean
    
    Administrator@ThinkPadX1-Youga MINGW64 /d/TestSoftware/git_repository (master)
    $ git rm test1.txt
    rm 'test1.txt'
    
    Administrator@ThinkPadX1-Youga MINGW64 /d/TestSoftware/git_repository (master)
    $ git commit -m 'remove test1.txt'
    [master 1cc8b9d] remove test1.txt
     1 file changed, 1 deletion(-)
     delete mode 100644 test1.txt
    
    Administrator@ThinkPadX1-Youga MINGW64 /d/TestSoftware/git_repository (master)
    $ ll
    total 1
    -rw-r--r-- 1 Administrator 197121 176 Jan 26 11:33 readme.txt
    
    Administrator@ThinkPadX1-Youga MINGW64 /d/TestSoftware/git_repository (master)
    $
    
    

    9、git设置连接远程仓库

    1、git创建repository,输入name,提交

    2、获取key

    Administrator@ThinkPadX1-Youga MINGW64 /d/TestSoftware/git_repository (master)
    $ ssh -T git@github.com
    git@github.com: Permission denied (publickey).
    
    Administrator@ThinkPadX1-Youga MINGW64 /d/TestSoftware/git_repository (master)
    $ ssh-keygen -t rsa -C "yourName"
    Generating public/private rsa key pair.
    Enter file in which to save the key (/c/Users/Administrator/.ssh/id_rsa):
    /c/Users/Administrator/.ssh/id_rsa already exists.
    Overwrite (y/n)? y
    Enter passphrase (empty for no passphrase):
    Enter same passphrase again:
    Your identification has been saved in /c/Users/Administrator/.ssh/id_rsa
    Your public key has been saved in /c/Users/Administrator/.ssh/id_rsa.pub #  ---秘钥存放处
    The key fingerprint is:
    SHA256:c3a0gzpjLHqXZP4Rgct3urOfsnjJwAH4EO6OLik2Waw yourName
    The key's randomart image is:
    +---[RSA 3072]----+
    |    .o           |
    |   .o .  .       |
    |    .o .. . .    |
    |   .  .... + .   |
    |  . .  .S.* =    |
    |   =   .=* = .   |
    | .= . .+*+o.     |
    |+E   ..o++*o .   |
    |o.o .. ..o=*o    |
    +----[SHA256]-----+
    Administrator@ThinkPadX1-Youga MINGW64 /d/TestSoftware/git_repository (master)
    $ cat /c/Users/Administrator/.ssh/id_rsa.pub
    
    

    3、设置key,输入key名字和生成秘钥

    4、本地加载秘钥,

    Administrator@ThinkPadX1-Youga MINGW64 /d/TestSoftware/git_repository (master)
    $ eval "$(ssh-agent -s)"
    Agent pid 715
    
    Administrator@ThinkPadX1-Youga MINGW64 /d/TestSoftware/git_repository (master)
    $ ssh-add
    Identity added: /c/Users/Administrator/.ssh/id_rsa (CjwRiver)
    

    5、重新推送

    Administrator@ThinkPadX1-Youga MINGW64 /d/TestSoftware/git_repository (master)
    $ git push -u origin master
    Enumerating objects: 25, done.
    Counting objects: 100% (25/25), done.
    Delta compression using up to 4 threads
    Compressing objects: 100% (15/15), done.
    Writing objects: 100% (25/25), 1.89 KiB | 483.00 KiB/s, done.
    Total 25 (delta 5), reused 0 (delta 0), pack-reused 0
    remote: Resolving deltas: 100% (5/5), done.
    To github.com:xxx/learngit.git
     * [new branch]      master -> master
    Branch 'master' set up to track remote branch 'master' from 'origin'.
    

    10、git设置克隆远程仓库

    $ git clone git@github.com:xxx/xxx.git   -------远程仓库地址
    Cloning into 'gitskills'...
    remote: Enumerating objects: 3, done.
    remote: Counting objects: 100% (3/3), done.
    remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
    Receiving objects: 100% (3/3), done.
    
    Administrator@ThinkPadX1-Youga MINGW64 /d/TestSoftware/git_repository (master)
    $ cd gitskills
    
    Administrator@ThinkPadX1-Youga MINGW64 /d/TestSoftware/git_repository/gitskills (main)
    $ ls
    README.md
    
    Administrator@ThinkPadX1-Youga MINGW64 /d/TestSoftware/git_repository/gitskills (main)
    $ cat README.md
    # gitskills
    gitkills,learn down
    
    

    11、分支管理

    1、创建分支和合并

    Administrator@ThinkPadX1-Youga MINGW64 /d/TestSoftware/git_repository (master) ----master分支下有两个文件
    $ ll
    total 1
    drwxr-xr-x 1 Administrator 197121   0 Jan 27 09:54 gitskills/
    -rw-r--r-- 1 Administrator 197121 176 Jan 26 11:33 readme.txt
    
    Administrator@ThinkPadX1-Youga MINGW64 /d/TestSoftware/git_repository (master)
    $ git checkout -b dev                  ------创建并切换到dev分支  -b是切换
    Switched to a new branch 'dev'
    
    Administrator@ThinkPadX1-Youga MINGW64 /d/TestSoftware/git_repository (dev)
    $ git branch                  ----查看当前分支
    * dev
      master
    
    Administrator@ThinkPadX1-Youga MINGW64 /d/TestSoftware/git_repository (dev)
    $ git add readme.txt            ---修改readme.txt ,新增【Creating a new branch is quick.】
    
    Administrator@ThinkPadX1-Youga MINGW64 /d/TestSoftware/git_repository (dev)
    $ git commit -m 'branch test'  --- dev分支上提交
    [dev 3e866eb] branch test
     1 file changed, 2 insertions(+), 1 deletion(-)
    
    Administrator@ThinkPadX1-Youga MINGW64 /d/TestSoftware/git_repository (dev)
    $ git checkout master  ---切换master
    Switched to branch 'master'
    Your branch is up to date with 'origin/master'.
    
    Administrator@ThinkPadX1-Youga MINGW64 /d/TestSoftware/git_repository (master)
    $ cat readme.txt    ---查看readme.txt内容,没有变
    111
    2222
    3333
    Git is a distributed version control system.
    Git is free software distributed under the GPL.
    Git is a friend
    Git has a mutable index called stage.
    444
    555
    Administrator@ThinkPadX1-Youga MINGW64 /d/TestSoftware/git_repository (master)
    $ git merge dev   ----合并分支。
    Updating 1cc8b9d..3e866eb
    Fast-forward    ----这里指的是快速合并
     readme.txt | 3 ++-
     1 file changed, 2 insertions(+), 1 deletion(-)
    
    Administrator@ThinkPadX1-Youga MINGW64 /d/TestSoftware/git_repository (master)
    $ cat readme.txt   ----合并之后查看readme.txt内容
    111
    2222
    3333
    Git is a distributed version control system.
    Git is free software distributed under the GPL.
    Git is a friend
    Git has a mutable index called stage.
    444
    555
    Creating a new branch is quick.
    Administrator@ThinkPadX1-Youga MINGW64 /d/TestSoftware/git_repository (master)
    $ git branch -d dev  ----删除分支dev,
    Deleted branch dev (was 3e866eb).
    
    Administrator@ThinkPadX1-Youga MINGW64 /d/TestSoftware/git_repository (master)
    $ git branch    ----查看当前分支
    * master
    
    

    2、分支冲突解决

    Administrator@ThinkPadX1-Youga MINGW64 /d/TestSoftware/git_repository (master)
    $ git switch -c feature1    -----创建新的分支
    Switched to a new branch 'feature1'
    
    Administrator@ThinkPadX1-Youga MINGW64 /d/TestSoftware/git_repository (feature1)
    $ git add readme.txt  ----修改readme.txt文件,提交
    
    Administrator@ThinkPadX1-Youga MINGW64 /d/TestSoftware/git_repository (feature1)
    $ git commit -m 'and simple'
    [feature1 b5b24d9] and simple
     1 file changed, 1 insertion(+), 1 deletion(-)
    
    Administrator@ThinkPadX1-Youga MINGW64 /d/TestSoftware/git_repository (feature1)
    $ git switch master  ----切换master
    Switched to branch 'master'
    Your branch is ahead of 'origin/master' by 1 commit.
      (use "git push" to publish your local commits)
    
    Administrator@ThinkPadX1-Youga MINGW64 /d/TestSoftware/git_repository (master)
    $ git add readme.txt   ---同样修改readme.txt文件后,再次提交
    
    Administrator@ThinkPadX1-Youga MINGW64 /d/TestSoftware/git_repository (master)
    $ git commit -m '& simple'
    [master cde2079] & simple
     1 file changed, 1 insertion(+), 1 deletion(-)
    
    Administrator@ThinkPadX1-Youga MINGW64 /d/TestSoftware/git_repository (master)
    $ git merge feature1   ----合并看看,Git告诉我们,readme.txt文件存在冲突,必须手动解决冲突后再提交。
    Auto-merging readme.txt
    CONFLICT (content): Merge conflict in readme.txt
    Automatic merge failed; fix conflicts and then commit the result.
    
    Administrator@ThinkPadX1-Youga MINGW64 /d/TestSoftware/git_repository (master|MERGING)
    $ git status  -----git status也可以告诉我们冲突的文件:
    On branch master
    Your branch is ahead of 'origin/master' by 2 commits.
      (use "git push" to publish your local commits)
    
    You have unmerged paths.
      (fix conflicts and run "git commit")
      (use "git merge --abort" to abort the merge)
    
    Unmerged paths:
      (use "git add <file>..." to mark resolution)
            both modified:   readme.txt
    
    Untracked files:
      (use "git add <file>..." to include in what will be committed)
            gitskills/
    
    no changes added to commit (use "git add" and/or "git commit -a")
    
    Administrator@ThinkPadX1-Youga MINGW64 /d/TestSoftware/git_repository (master|MERGING)
    $ cat readme.txt   ---查看readme.txt的内容:
    111
    2222
    3333
    Git is a distributed version control system.
    Git is free software distributed under the GPL.
    Git is a friend
    Git has a mutable index called stage.
    444
    555
    <<<<<<< HEAD
    Creating a new branch is quick & simple.
    =======
    Creating a new branch is quick AND simple.
    >>>>>>> feature1
    
    Administrator@ThinkPadX1-Youga MINGW64 /d/TestSoftware/git_repository (master|MERGING)
    $ git add readme.txt  ---再次修改保存后提交
    
    Administrator@ThinkPadX1-Youga MINGW64 /d/TestSoftware/git_repository (master|MERGING)
    $ git commit -m 'conflict fixed'
    [master 3d5f936] conflict fixed
    
    Administrator@ThinkPadX1-Youga MINGW64 /d/TestSoftware/git_repository (master)
    $ git log
    commit 3d5f936a2fe2e440521d29346023fb078bee99b2 (HEAD -> master)
    Merge: cde2079 b5b24d9
    Author: cjw <18813048840@139.com>
    Date:   Wed Jan 27 11:34:44 2021 +0800
    
        conflict fixed
    
    commit cde20792faa9effeebcdd3292c17c39732f55429
    Author: cjw <18813048840@139.com>
    Date:   Wed Jan 27 11:32:32 2021 +0800
    
        & simple
    
    commit b5b24d95cd22cc8d32dea7431fa90e0f72a52bbc (feature1)
    Author: cjw <18813048840@139.com>
    Date:   Wed Jan 27 11:30:45 2021 +0800
    
        and simple
    
    commit 3e866ebbef42f9353276dc24be01ef1aa629cc42
    Author: cjw <18813048840@139.com>
    Date:   Wed Jan 27 10:10:04 2021 +0800
    
    
    Administrator@ThinkPadX1-Youga MINGW64 /d/TestSoftware/git_repository (master)
    $ git branch -d feature1  ----删除分支
    Deleted branch feature1 (was b5b24d9).
    
    Administrator@ThinkPadX1-Youga MINGW64 /d/TestSoftware/git_repository (master)
    $ git log --graph --pretty=oneline --abbrev-commit  ---带参数的git log也可以看到分支的合并
    *   3d5f936 (HEAD -> master) conflict fixed
    |
    | * b5b24d9 and simple
    * | cde2079 & simple
    |/
    * 3e866eb branch test
    * 1cc8b9d (origin/master) remove test1.txt
    * dd7f462 add test
    * f020c25 status
    * 1a58908 update 2
    * ed66b14 index called
    * 77f50d5 append friend
    * 195f5c9 append GPL
    * f94d02b wrote a readme file2
    * 9ae1969 wrote a readme file
    
    Administrator@ThinkPadX1-Youga MINGW64 /d/TestSoftware/git_repository (master)
    $ q
    bash: q: command not found
    
    Administrator@ThinkPadX1-Youga MINGW64 /d/TestSoftware/git_repository (master)
    $ cat readme.txt
    111
    2222
    3333
    Git is a distributed version control system.
    Git is free software distributed under the GPL.
    Git is a friend
    Git has a mutable index called stage.
    444
    555
    <<<<<<< HEAD
    Creating a new branch is quick & simple.
    =======
    Creating a new branch is quick AND simple.
    >>>>>>> feature1
    
    Administrator@ThinkPadX1-Youga MINGW64 /d/TestSoftware/git_repository (master)
    $
    
    

    3、分支管理策略

    合并分支时,如果可能,Git会用Fast forward模式,但这种模式下,删除分支后,会丢掉分支信息。
    如果要强制禁用Fast forward模式,Git就会在merge时生成一个新的commit,这样,从分支历史上就可以看出分支信息。

    下面我们实战一下--no-ff方式的git merge:
    首先,仍然创建并切换dev分支:

    Administrator@ThinkPadX1-Youga MINGW64 /d/TestSoftware/git_repository (master)
    $ git switch -c dev
    Switched to a new branch 'dev'
    
    Administrator@ThinkPadX1-Youga MINGW64 /d/TestSoftware/git_repository (dev)
    $ git add readme.txt
    
    Administrator@ThinkPadX1-Youga MINGW64 /d/TestSoftware/git_repository (dev)
    $ git commit -m 'add test1'
    [dev 3c0c8ed] add test1
     1 file changed, 2 insertions(+)
    
    Administrator@ThinkPadX1-Youga MINGW64 /d/TestSoftware/git_repository (dev)
    $ git switch master
    Switched to branch 'master'
    Your branch is ahead of 'origin/master' by 4 commits.
      (use "git push" to publish your local commits)
    
    Administrator@ThinkPadX1-Youga MINGW64 /d/TestSoftware/git_repository (master)
    $ git merge --no-ff -m "merge with no-ff" dev
    Merge made by the 'recursive' strategy.
     readme.txt | 2 ++
     1 file changed, 2 insertions(+)
    
    Administrator@ThinkPadX1-Youga MINGW64 /d/TestSoftware/git_repository (master)
    $ git log --graph --pretty=oneline --abbrev-commit
    *   6809576 (HEAD -> master) merge with no-ff
    |
    | * 3c0c8ed (dev) add test1
    |/
    *   3d5f936 conflict fixed
    |
    | * b5b24d9 and simple
    * | cde2079 & simple
    |/
    * 3e866eb branch test
    * 1cc8b9d (origin/master) remove test1.txt
    * dd7f462 add test
    * f020c25 status
    * 1a58908 update 2
    * ed66b14 index called
    * 77f50d5 append friend
    * 195f5c9 append GPL
    * f94d02b wrote a readme file2
    * 9ae1969 wrote a readme file
    
    

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

    4、多人协作

    1. 首先,可以试图用git push origin 推送自己的修改;

    2. 如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并;

    3. 如果合并有冲突,则解决冲突,并在本地提交;

    4. 没有冲突或者解决掉冲突后,再用git push origin 推送就能成功!

    5. 如果git pull提示no tracking information,则说明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream-to origin/

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

    小结:

    •   查看远程库信息,使用git remote -v;
      
    •   本地新建的分支如果不推送到远程,对其他人就是不可见的;
      
    •   从本地推送分支,使用git push origin branch-name,如果推送失败,先用git pull抓取远程的新提交;
      
    •   在本地创建和远程分支对应的分支,使用git checkout -b branch-name origin/branch-name,本地和远程分支的名称最好一致;
      
    •   建立本地分支和远程分支的关联,使用git branch --set-upstream branch-name origin/branch-name;
      
    •   从远程抓取分支,使用git pull,如果有冲突,要先处理冲突。
      

    以上资料来自廖雪峰git资料

  • 相关阅读:
    POJ3783Balls[DP 最坏情况最优解]
    openjudge2989糖果[DP 01背包可行性]
    POJ1160 Post Office[序列DP]
    石子合并[DP-N3]
    POJ1065Wooden Sticks[DP LIS]
    POJ3636Nested Dolls[DP LIS]
    LCIS(最长公共上升子序列)Vijos1264神秘的咒语
    Vijos1680距离/openjudge2988计算字符串的距离[DP]
    Vijos1392拼拼图的小衫[背包DP|二维信息DP]
    NOIP2000方格取数[DP]
  • 原文地址:https://www.cnblogs.com/c-jw/p/14329232.html
Copyright © 2020-2023  润新知