——Git分布式版本控制系统的使用

↘锁芯ラ 提交于 2019-12-09 09:18:35

一、Git的安装

  git的安装很简单,不介绍。

  安装好后,还需要最后一步设置,在命令行输入:

$ git config --global user.name "Your Name"
$ git config --global user.email "email@example.com"

二、创建版本库

  首先,选择一个合适的地方,创建一个空目录。

$ mkdir learngit
$ cd learngit
$ pwd
/Users/michael/learngit

  通过git init 命令把这个目录变成Git可以管理的仓库

$ git init
Initialized empty Git repository in /Users/michael/learngit/.git/

  文件一定放在仓库目录下。例如:将readme.txt文件放到Git仓库中

  第一步,用命令git add 告诉Git,把文件添加到仓库

$ git add readme.txt

  第二步,用命令git commit告诉Git,把文件提交到仓库

$ git commit -m "wrote a readme file"
[master (root-commit) eaadf4e] wrote a readme file
 1 file changed, 2 insertions(+)
 create mode 100644 readme.txt

  简单解释一下  git commit 命令,-m 后面输入的是本次提交的说明,可以输入任意内容,当然最好是有意义的,这样你就能从历史记录里方便地找到改动记录。

  git commit 可以一次提交很多文件,因此,可以多次add不同文件

三、内容修改

  提交后,又修改了readme.txt后,可以运行git status命令看看结果

$ 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 status命令可以让我们时刻掌握仓库当前的状态,上面的命令输出告诉我们,readme.txt被修改过了,但还没有准备提交的修改。

  运行git diff 可以查看具体修改了什么内容

$ git diff readme.txt 
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.

  最后,再做添加add和提交commit,提交前可以在查看一下

四、版本回退

  在Git中,git log命令可以查看最近到最远的提交日志

$ git log
commit 1094adb7b9b3807259d8cb349e7df1d4d6477073 (HEAD -> master)
Author: Michael Liao <askxuefeng@gmail.com>
Date:   Fri May 18 21:06:15 2018 +0800

    append GPL

commit e475afc93c209a690c39c13a46716e8fa000c366
Author: Michael Liao <askxuefeng@gmail.com>
Date:   Fri May 18 21:03:36 2018 +0800

    add distributed

commit eaadf4e385e865d25c48e7ca9c8395c3f7dfaef0
Author: Michael Liao <askxuefeng@gmail.com>
Date:   Fri May 18 20:59:18 2018 +0800

    wrote a readme file

  如果不想输出信息太多,可以加上--pretty=oneline参数:

$ git log --pretty=oneline
1094adb7b9b3807259d8cb349e7df1d4d6477073 (HEAD -> master) append GPL
e475afc93c209a690c39c13a46716e8fa000c366 add distributed
eaadf4e385e865d25c48e7ca9c8395c3f7dfaef0 wrote a readme file

  前面一串数字为版本号,每次提交一个新版本,Git就会把它们自动串成一条时间线。

 回退版本:

  首先,Git必须知道当前版本是哪个版本,在Git中,用HEAD表示当前版本,也就是最新的提交1094adb...(注意我的提交ID和你的肯定不一样),上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100

$ git reset --hard HEAD^
HEAD is now at e475afc add distributed

  还可以继续回退到上一个版本wrote a readme file,不过且慢,然我们用git log再看看现在版本库的状态:

$ git log
commit e475afc93c209a690c39c13a46716e8fa000c366 (HEAD -> master)
Author: Michael Liao <askxuefeng@gmail.com>
Date:   Fri May 18 21:03:36 2018 +0800

    add distributed

commit eaadf4e385e865d25c48e7ca9c8395c3f7dfaef0
Author: Michael Liao <askxuefeng@gmail.com>
Date:   Fri May 18 20:59:18 2018 +0800

    wrote a readme file

  这里没有最新版本了,但还是可以回到最新的那个的,找到那个版本号就行。

  Git提供了一个命令git reflog用来记录你的每一次命令

$ git reflog
e475afc HEAD@{1}: reset: moving to HEAD^
1094adb (HEAD -> master) HEAD@{2}: commit: append GPL
e475afc HEAD@{3}: commit: add distributed
eaadf4e HEAD@{4}: commit (initial): wrote a readme file

  就可以根据版本号回退了

$ git reset --hard 1094a
HEAD is now at 83b0afe append GPL

  如图为理解图:

 

五、工作区和暂存区

  工作区:就是你的电脑能看到的目录

  版本库:工作区有一个隐藏目录.git,这个是Git版本库。Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD

  创建Git版本库时,Git自动为我们创建了唯一一个master分支,所以,现在,git commit就是往master分支上提交更改。

六、管理修改

   Git管理的是修改,而不是文件。可以看一下下面这个过程:

  第一次修改 -> git add -> 第二次修改 -> git commit,然而第二次修改并没有被修改

解释:当你用git add命令后,在工作区的第一次修改被放入暂存区,准备提交,但是,在工作区的第二次修改并没有放入暂存区,所以,git commit只负责把暂存区的修改提交了,也就是第一次的修改被提交了,第二次的修改不会被提交。

七、撤销修改

  如果需要撤销修改,可以自己手动把文件恢复到上一个修改前的状态。

  第一种,在没有git add前,你可以使用git checkout -- file可以丢弃工作区的修改。

  命令git checkout -- readme.txt意思就是,把readme.txt文件在工作区的修改全部撤销,这里有两种情况:一种是readme.txt自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;一种是readme.txt已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。总之,就是让这个文件回到最近一次git commitgit add时的状态。

  git checkout -- file命令中的--很重要,没有--,就变成了“切换到另一个分支”的命令,我们在后面的分支管理中会再次遇到git checkout命令。

  第二种,你已经git add 后,并没有git commit,可以用命令git reset HEAD <file>可以把暂存区的修改撤销掉(unstage),重新放回工作区。

$ git reset HEAD readme.txt
Unstaged changes after reset:
M    readme.txt

  git reset命令既可以回退版本,也可以把暂存区的修改回退到工作区。当我们用HEAD时,表示最新的版本。再用git status查看一下,现在暂存区是干净的,工作区有修改:

$ 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
$ git checkout -- readme.txt

$ git status
On branch master
nothing to commit, working tree clean

八、删除文件

  在Git种,删除也是一个修改操作。当你把一个文件删除后,Git知道你删除了文件,因此,工作区和版本库就不一致了,git status命令会立刻告诉你哪些文件被删除了:

$ 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:    test.txt

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

  现在你有两个选择,一是确实要从版本库中删除该文件,那就用命令git rm删掉,并且git commit

$ git rm test.txt
rm 'test.txt'

$ git commit -m "remove test.txt"
[master d46f35e] remove test.txt
 1 file changed, 1 deletion(-)
 delete mode 100644 test.txt

  另一种情况是删错了,因为版本库里还有呢,所以可以很轻松地把误删的文件恢复到最新版本:

$ git checkout -- test.txt

  git checkout其实是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”。

九、远程仓库

  1、注册Github账号

  2、创建SSH Key。

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

  一路回车,最后可以在用户主目录里找到.ssh目录,里面有id_rsaid_rsa.pub两个文件,这两个就是SSH Key的秘钥对,id_rsa是私钥,不能泄露出去,id_rsa.pub是公钥,可以放心地告诉任何人。

  3、登录Github,打开“settings”,“SSH Keys”页面。将公钥添加进去。

 十、添加远程仓库

  目前,在GitHub上的这个新仓库还是空的,GitHub告诉我们,可以从这个仓库克隆出新的仓库,也可以把一个已有的本地仓库与之关联,然后,把本地仓库的内容推送到GitHub仓库。

  关联远程仓库

$ git remote add origin git@github.com:KBoss174/Angular.git

  请千万注意,你自己的GitHub账户名(这是我的账户名KBoss174),否则,你在本地关联的就是我的远程库,将会无法推送。添加后,远程库的名字就是origin,这是Git默认的叫法,也可以改成别的,但是origin这个名字一看就知道是远程库。

  把本地仓库的内容推送到github

$ git push -u origin master
The authenticity of host 'github.com (52.74.223.119)' can't be established.
RSA key fingerprint is SHA256:nThbg6kXUpJWGl7E1IGOCspRomTxdCARLviKw6E5SY8.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'github.com,52.74.223.119' (RSA) to the list of known hosts.
Enumerating objects: 75, done.
Counting objects: 100% (75/75), done.
Delta compression using up to 8 threads
Compressing objects: 100% (72/72), done.
Writing objects: 100% (75/75), 208.63 KiB | 565.00 KiB/s, done.
Total 75 (delta 3), reused 0 (delta 0)
remote: Resolving deltas: 100% (3/3), done.
To github.com:KBoss174/Angular.git
 * [new branch]      master -> master
Branch 'master' set up to track remote branch 'master' from 'origin'.

十一、从远程库克隆

  使用命令git clone可以克隆一个本地库:

$ git clone git@github.com:KBoss174/Angular.git

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!