git&GitHub 入门(转载)

 

 

 

版本管理控制工具两大优点:

  1.团队协作开发

  2.版本管理

  允许可以很容易对产品的版本进行任意回滚

 

 


 

常用版本管理工具

  1.VSS-- Visual Source Safe

  2.CVS--Concurrent Versions System

  3.SVN --CollabNet Subversion

  4.BitKeeper

  5.GIT

 

 


 

git安装

  Git可以在Linux、Unix、Mac和Windows这几大平台上正常运行

 

 


 

版本库创建

  版本库又名仓库,英文名repository,你可以简单理解成一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改、删除,Git都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻可以“还原”。

  步骤:

  1.在一个自定义的磁盘下创建一个空目录

$ mkdir git_trainning
$ cd git_trainning

   2.初始化git

$ git init

   此时git仓库就建好了,此时的仓库是一个空的仓库。

  当前目录下多了一个.git的目录,这个目录是Git来跟踪管理版本库的,没事千万不要手动修改这个目录里面的文件,不然改乱了,就把Git仓库给破坏了。如果你没有看到.git目录,那是因为这个目录默认是隐藏的,用ls -ah命令就可以看见。

 


 

将文件添加到文本库

  所有的版本控制系统,其实只能跟踪文本文件的改动,比如TXT文件,网页,所有的程序代码等等,Git也不例外

  而图片、视频这些二进制文件,虽然也能由版本控制系统管理,但没法跟踪文件的变化,只能把二进制文件每次改动串起来,也就是只知道图片从100KB改成了120KB,但到底改了啥,版本控制系统不知道,也没法知道。

   Microsoft的Word格式是二进制格式,因此,版本控制系统是没法跟踪Word文件的改动的

  步骤:

  1.编写一个first_git_file.txt文件【一定要放到git_trainning目录下(子目录也行)

$ vim first_git_file.txt
 
#文本内容
first time using git, excited!
第一次用git哈哈

   2.用命令git  add 告诉git,把文件添加git暂存区

$ git add first_git_file.txt

  执行上面的命令,没有任何提示,说明添加成功。

  3.用命令git  commit 告诉git,把文件从暂存区提交到仓库。

$ git commit -m "commit my first git file"

  你在往git库里提交代码时,你需要告诉git你是谁,这样git就会纪录下来是谁改的代码,其实就是为了日后查询方便,你只需要提供一个名字和邮件地址就可以。

  你可以通过git config --global --edit修改

  -m 后面输入的是本次提交的说明,

   为什么Git添加文件需要addcommit一共两步呢?

   因为commit可以一次提交很多文件,所以你可以多次add不同的文件。

  如:

$ git add file1.txt
$ git add file2.txt file3.txt
$ git commit -m "add 3 files."

 

 


 

代码回滚

  1.代码修改并提交:

    代码修改后执行代码:

$ git add .    # .  代表把当前目录下所有改动的文件都提交到代码库

     提交后我们可以查看仓库当前的状态:

$ git status

 

     当记不清上次是怎么修改时,我们可以通过命令来查看:

$ git diff first_git_file.txt
diff --git a/first_git_file.txt b/first_git_file.txt
index 2d13c2c..248d853 100644
--- a/first_git_file.txt
+++ b/first_git_file.txt
@@ -1,3 +1,4 @@
-first time using git, excited!
+First time using git, excited! update ...
 insert line here...
 第一次用git哈哈
+insert line again haha...

   输出中+号显示的就是修改或新增的内容,-号显示的就是去掉或被修改的内容

 

  2.代码回滚

  实际工作中,代码经过很多次修改后,版本控制系统有命令可以告诉我们历史记录。

  在Git中,我们用git log命令查看:

$ git log
$ git log --pretty=oneline

  git log命令显示从最近到最远的提交日志

  

  回滚到指定的版本号:

  首先,Git必须知道当前版本是哪个版本,在Git中,用HEAD表示当前版本,也就是最新的提交

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

  从当前版本回退到之前的版本要使用到git  reset 命令。

#返回到上一个版本

$ git reset --hard HEAD^

  此时用git  log再查看版本库的状态时最新的那个版本已经找不到了。

  此时你还想找到最新的那个版本的话可以通过HEAD指向版本号来找回最新的版本。

#当命令行关闭找不到版本号时可通过此操作来找到

$ git reflog

 


 

工作区和暂存区

  工作区里有一个隐藏目录 .git,这个不算工作区,而是Git的版本库。

  版本库里有称为stage(或者叫index)的暂存区,还有git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD

  

  前面讲了我们把文件往Git版本库里添加的时候,是分两步执行的:

  第一步是用git add把文件添加进去,实际上就是把文件修改添加到暂存区;

  第二步是用git commit提交更改,实际上就是把暂存区的所有内容提交到当前分支。

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

  可以简单理解为,需要提交的文件修改通通放到暂存区,然后,一次性提交暂存区的所有修改。

 


 

 撤销修改

  分两种情况:

  1.还在工作区的情况

    删掉最后一行,手动把文件恢复到上一个版本的状态。

    如果用git status查看一下:

 1 git status
 2 
 3 On branch master
 4 Changes not staged for commit:
 5   (use "git add <file>..." to update what will be committed)
 6   (use "git checkout -- <file>..." to discard changes in working directory)
 7  
 8     modified:   readme.md
 9  
10 no changes added to commit (use "git add" and/or "git commit -a")

 

    git checkout -- file可以丢弃工作区的修改。

  2.还在暂存区的情况

    git add到暂存区。庆幸的是,在commit之前,你发现了这个问题。用git status查看一下,修改只是添加到了暂存区,还没有提交

$ git status

On branch master
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)
 
    modified:   readme.md

    用命令git reset HEAD file可以把暂存区的修改撤销掉(unstage),重新放回工作区:

$ git reset HEAD readme.md

Unstaged changes after reset:
M   readme.md

    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.md
#
no changes added to commit (use "git add" and/or "git commit -a")

    丢弃工作区的修改

$ git checkout -- readme.md

 

 

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

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

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

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

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

 


 

删除操作

  一般情况下,通常直接在文件管理器中把没用的文件删了,或者用rm命令删了

  这个时候,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"

[master 03df00a] remove test
 1 file changed, 0 insertions(+), 0 deletions(-)
 delete mode 100644 test.txt

  现在,文件就从版本库中被删除了。

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

$ git checkout -- test.txt

 

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

 


 

GitHub(远程仓库)

 

posted @ 2019-07-17 21:19  JamJarBranch  阅读(189)  评论(0编辑  收藏  举报