Git基本应用

本章内容git

  一、仓库的基本命令github

  二、分支管理ruby

 

 

仓库基本命令

一、建立本地管理仓库app

  git initssh

二、把文件添加到仓库学习

  git add readme.txtspa

三、告诉Git,把文件提交到仓库版本控制

  git commit -m ''wrote a readme file'code

四、git status命令可让咱们时刻掌握仓库当前的状态,上面的命令告诉咱们,readme.txt被修改过了,但尚未准备提交的修改。 blog

$ 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告诉咱们readme.txt被修改了,但若是能看看具体修改了什么内容,天然是很好的。好比你休假两周从国外回来,第一天上班时,已经记不清上次怎么修改的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.

  git diff顾名思义就是查看difference,显示的格式正是Unix通用的diff格式,能够从上面的命令输出看到,咱们在第一行添加了一个“distributed”单词。

六、在实际工做中,咱们脑子里怎么可能记得一个几千行的文件每次都改了什么内容,否则要版本控制系统干什么。版本控制系统确定有某个命令能够告诉咱们历史记录,在Git中,咱们用git log命令查看:

$ git log
commit 3628164fb26d48395383f8f31179f24e0882e1e0
Author: Michael Liao <askxuefeng@gmail.com>
Date:   Tue Aug 20 15:11:49 2013 +0800

    append GPL

commit ea34578d5496d7dd233c827ed32a8cd576c5ee85
Author: Michael Liao <askxuefeng@gmail.com>
Date:   Tue Aug 20 14:53:12 2013 +0800

    add distributed

commit cb926e7ea50ad11b8f9e909c05226233bf755030
Author: Michael Liao <askxuefeng@gmail.com>
Date:   Mon Aug 19 17:51:55 2013 +0800

    wrote a readme file 
$ git log --pretty=oneline #输出格式比较简洁
$ git log --pretty=oneline
3628164fb26d48395383f8f31179f24e0882e1e0 append GPL
ea34578d5496d7dd233c827ed32a8cd576c5ee85 add distributed
cb926e7ea50ad11b8f9e909c05226233bf755030 wrote a readme file

七、恢复到起先的版本

$ git reset --hard 3628164
HEAD is now at 3628164 append GPL

八、你恢复到起先的版本,如今又后悔了,想恢复回来,那怎么办?那就必须找到append GPL的commit ID

$ git reflog
ea34578 HEAD@{0}: reset: moving to HEAD^
3628164 HEAD@{1}: commit: append GPL
ea34578 HEAD@{2}: commit: add distributed
cb926e7 HEAD@{3}: commit (initial): wrote a readme file

  获得这个ID 如今就能够去恢复了。

  

九、工做区和暂存区的概念

  廖雪峰Git

十、$ git checkout -- readme.txt

   命令git checkout -- readme.txt意思就是,把readme.txt文件在工做区的修改所有撤销,这里有两种状况:

  一种是readme.txt自修改后尚未被放到暂存区,如今,撤销修改就回到和版本库如出一辙的状态;

  一种是readme.txt已经添加到暂存区后,又做了修改,如今,撤销修改就回到添加到暂存区后的状态。

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

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

 十一、用命令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
#
no changes added to commit (use "git add" and/or "git commit -a")

  还记得如何丢弃工做区的修改吗?

$ git checkout -- readme.txt

$ git status
# On branch master
nothing to commit (working directory clean)

十二、 git rm test.txt        #从版本库中删除该文件

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

  如今,文件就从版本库中被删除了。

  另外一种状况是删错了,由于版本库里还有呢,因此能够很轻松地把误删的文件恢复到最新版本:

$ git checkout -- test.txt

  git checkout实际上是用版本库里的版本替换工做区的版本,不管工做区是修改仍是删除,均可以“一键还原”。

 1三、在github上建立了一个新库,是空的,如今想把本地的库与之关联

git remote add origin git@github.com:帐号/learngit.git

  添加后,远程库的名字就是origin,这是Git默认的叫法,也能够改为别的,可是origin这个名字一看就知道是远程库。

      下一步,就能够把本地库的全部内容推送到远程库上:

$ git push -u origin master
Counting objects: 19, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (19/19), done.
Writing objects: 100% (19/19), 13.73 KiB, done.
Total 23 (delta 6), reused 0 (delta 0)
To git@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

1四、克隆远程库

$ git clone git@github.com:michaelliao/gitskills.git
Cloning into 'gitskills'...
remote: Counting objects: 3, done.
remote: Total 3 (delta 0), reused 0 (delta 0)
Receiving objects: 100% (3/3), done.

  你也许还注意到,GitHub给出的地址不止一个,还能够用https://github.com/michaelliao/gitskills.git这样的地址。实际上,Git支持多种协议,默认的git://使用ssh,但也可使用https等其余协议。

  使用https除了速度慢之外,还有个最大的麻烦是每次推送都必须输入口令,可是在某些只开放http端口的公司内部就没法使用ssh协议而只能用https

 

分支管理

  分支就是科幻电影里面的平行宇宙,当你正在电脑前努力学习Git的时候,另外一个你正在另外一个平行宇宙里努力学习SVN。

  若是两个平行宇宙互不干扰,那对如今的你也没啥影响。不过,在某个时间点,两个平行宇宙合并了,结果,你既学会了Git又学会了SVN!

  

一、建立与合并分支

  廖雪峰Git.原理

  *建立dev分支,而后切换到dev分支:  

$ git checkout -b dev
Switched to a new branch 'dev'
等同于
$ git branch dev
$ git checkout dev
Switched to branch 'dev'

  用git branch命令查看当前的分支:

$ git branch
* dev
  master

  git branch命令会列出全部分支,当前分支前面会标一个*号。

  而后,咱们就能够在dev分支上正常提交,好比对readme.txt作个修改,加上一行:

$ git add readme.txt 
$ git commit -m "branch test"
[dev fec145a] branch test
 1 file changed, 1 insertion(+)

  如今,dev分支的工做完成,咱们就能够切换回master分支:

$ git checkout master
Switched to branch 'master'

  切换回master分支后,再查看一个readme.txt文件,刚才添加的内容不见了!由于那个提交是在dev分支上,而master分支此刻的提交点并无变:

  

  如今,咱们把dev分支的工做成果合并到master分支上: 

$ git merge dev
Updating d17efd8..fec145a
Fast-forward
 readme.txt |    1 +
 1 file changed, 1 insertion(+)

  git merge命令用于合并指定分支到当前分支。

  合并完成后,就能够放心地删除dev分支了:

$ git branch -d dev
Deleted branch dev (was fec145a).
相关文章
相关标签/搜索