Git是一个分布式版本控制系统。它能够很方便的记录你的每一次变更,而不须要每次都备份,还能让你和他人很方便的协同开发。这样你每次作了什么改动,瞄一眼就一清二楚了。node
--git
从官网下载适合本身电脑的Git,点击安装,一路“Next”就能够了。安装完成,打开Console开始设置Git参数。github
$ git config --global user.name "xxx" $ git config --global user.email "xxx@xxx.xxx" //在上面的两个引号中分别填写你的名字和邮箱。 //因为Git是分布式的版本控制系统,可能会有不少用户,每一个用户须要有本身的名字和邮箱来互相区分。
--web
简单的说,你能够将版本库理解为一个目录。咱们用Git来管理咱们的文件,因此你得告诉Git你须要它管理哪一个目录下的文件,这个目录就是版本库。ssh
git init //建立一个learnGit目录,并进入learnGit目录,建立版本库 md learnGit cd learnGit git init
--编辑器
仓库下建立的文件以及目录须要手动的提交到仓库中。提交分为两步:
1. git add
2. git commit -m
"提交的说明"分布式
先建立一个文件叫作readme.txt,里面输入this
Git is amazing! I love Git!
接着将这个readme.txt提交到仓库中:url
> git add readme.txt warning: LF will be replaced by CRLF in readme.txt. The file will have its original line endings in your working directory. > git commit -m "add a readme file" [master (root-commit) e7ddd65] add a readme file warning: LF will be replaced by CRLF in readme.txt. The file will have its original line endings in your working directory. 1 file changed, 3 insertions(+) create mode 100644 readme.txt
--spa
使用git status
查看目前工做区的状态信息
将readme.md修改成
Git is great! I love git!
接着使用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
知道文件被修改了,可是咱们并不了解到底修改了哪些内容。所以使用git diff
能够知道具体的修改内容。
> git diff readme.txt diff --git a/readme.txt b/readme.txt index 2482f69..8e882dd 100644 --- a/readme.txt +++ b/readme.txt @@ -1,3 +1,2 @@ -Git is amazing! -I love Git! - +Git is great! +I love git! \ No newline at end of file warning: LF will be replaced by CRLF in readme.txt. The file will have its original line endings in your working directory.
--
将修改过的文件进行提交
> git add readme.txt
再来看当前工做区的状态
> git status warning: LF will be replaced by CRLF in readme.txt. The file will have its original line endings in your working directory. On branch master Changes to be committed: (use "git reset HEAD <file>..." to unstage) modified: readme.txt
继续提交修改后的文件
> git commit -m "amazing became great" [master warning: LF will be replaced by CRLF in readme.txt. The file will have its original line endings in your working directory. 469dcdc] amazing became great warning: LF will be replaced by CRLF in readme.txt. The file will have its original line endings in your working directory. 1 file changed, 1 insertions(+), 1 deletions(-)
再来看当前工做区的状态
> git status On branch master nothing to commit, working directory clean
--
git log
命令能够查看全部的历史记录
> git log commit e4af028a493a4459fea0c0f673149281e0d11949 Author: LIYANG <liyangtom@163.com> Date: Tue Apr 26 16:17:58 2016 +0800 add new line commit 469dcdcd4de36234666885f87fa581441a834992 Author: LIYANG <liyangtom@163.com> Date: Tue Apr 26 16:07:00 2016 +0800 amazing became great commit e7ddd658bf0e5791acd07c25a56ba1c4fba1a181 Author: LIYANG <liyangtom@163.com> Date: Tue Apr 26 15:49:34 2016 +0800 add a readme file
--
git log
命令给出了你的每一次提交,并按时间顺序依次显示,很是详细。可是有时候你只想要一个简单的结果,能够 git log --pretty=oneline
> git log --pretty=oneline e4af028a493a4459fea0c0f673149281e0d11949 add new line 469dcdcd4de36234666885f87fa581441a834992 amazing became great e7ddd658bf0e5791acd07c25a56ba1c4fba1a181 add a readme file
--
在Git中有个指针叫作HEAD
,HEAD
指向哪一个快照,你如今就在哪一个状态。对于第N个状态的版本HEAD~N
> git reset --hard HEAD~2 HEAD is now at e7ddd65 add a readme file
--
若是如今又想从新回到add new line
这个版本怎么办。很简单,只要知道add new line
的commit id
就能够了。因此你理所固然的使用git log
查看commit id
:
> git log --pretty=oneline 469dcdcd4de36234666885f87fa581441a834992 amazing became great e7ddd658bf0e5791acd07c25a56ba1c4fba1a181 add a readme file
add new line
不见了!记住git log
只能查看HEAD及HEAD之前的版本。
--
git reflog
这个命令能够查看全部操做命令
> git reflog 469dcdc HEAD@{0}: reset: moving to HEAD~1 e4af028 HEAD@{3}: commit: add new line 469dcdc HEAD@{4}: commit: amazing became great e7ddd65 HEAD@{5}: commit (initial): add a readme file
这时你就知道了add new line
的id
了,你就能够很开心的回去了
> git reset e4af028 Unstaged changes after reset: M readme.txt
--
工做区就是你存放一切文件的那个目录。好比前面咱们新建了一个目录,叫learnGit
,而后进入learnGit
,在learnGit
目录下使用git init
命令把learnGit
变成了一个Git能够管理的目录。Git自动生成了一个隐藏目录叫.git
。此时,这个learnGit目录就是工做区。
--
工做区中各有一个隐藏目录叫.git
。.git
就是版本库。你commit提交的就是这个地方。
--
虽然.git
目录是隐藏的,但你仍然能够打开。打开.git
,进去之后你会发现里面有不少目录和文件。其中有一个名叫index的文件,这个index文件就是暂存区stage。暂存区是版本库里的一个临时存储的地方,经由暂存区,再提交到版本库。
git版本控制的逻辑过程:
首先,你在工做区建立了一个文件或者修改了一个文件
而后你有输入了git add
,此时文件其实是被添加到了暂存区stage,也就是那个index文件
接着,你又输入git commit
,这才算是正式提交。Git默认给咱们建立了一个master分支和一个指向master分支的HEAD指针。
--
git add
添加到暂存区。你固然能够直接打开编辑器改回到以前的样子,但咱们但愿Git来帮咱们作这件事, 能够执行命令git checkout -- file
好比你在readme.txt中新添加了一行文本 。
Git is great! I love git! just add line
这时候就产生了一个修改,如今你后悔了,以为不该该添加这一行。
$ git checkout -- readme.md
输入完命令之后没有任何提示。没有提示证实你没错。 这时你再打开readme.txt查看一下,发现刚才添加的
just add line
这一行已经没有了。
--
git add
到了暂存区。此时只能把这个修改打回到工做区,而后在工做区把这个修改给杀掉。能够执行命令行git reset HEAD file
> git reset HEAD readme.txt Unstaged changes after reset: M readme.txt > git checkout readme.txt
--
删除文件也是一种修改,由于工做区里的东西发生了变化
新建立一个文件,而后git add,再git commit
> echo >new.txt > git add new.txt > git commit -m "create new.txt" [detached HEAD 21e3fe5] create new.txt 1 file changed, 1 insertion(+) create mode 100644 new.txt
--
而后再把它删了
> del new.txt
这时候Git发现你在工做目录里删了一个文件,可是Git的版本库里仍然还存在着new.txt
> git status HEAD detached from 9baed55 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: new.txt no changes added to commit (use "git add" and/or "git commit -a")
--
若是你肯定真的要把new.txt删除掉,那就须要执行命令
git rm file
> git rm new.txt rm 'new.txt'
再
git status
一下,发现你的操做尚未正式提交
> git status HEAD detached from 9baed55 Changes to be committed: (use "git reset HEAD <file>..." to unstage) deleted: new.txt
你须要再次
git commit
> git commit -m "del new.txt" [detached HEAD 5e46854] del new.txt 1 file changed, 1 deletion(-) delete mode 100644 new.txt
--
GitHub的官网注册一个帐号,注册以后点击
Settings
。
在左侧栏选择
SSH keys
,点击New SSH keys
--
进去Git安装目录的
\usr\bin
目录,在命令行输入如下命令
//把里面的xxx@xxx.xxx部分换成你的邮件地址,而后一路回车就好了。 //这样就在用户主目录(C:\Documents and Settings\用户名\.ssh)下生成了密钥对 // id_rsa是私钥,id_rsa.pub是公钥 $ ssh-keygen -t rsa -C "xxx@xxx.xxx"
回到GitHub在Title一栏中随便填一个名字,而后将
id_rsa.pub
中的内容粘贴到Key栏, 点击Add SSH key
按钮就完成了。
--
在GitHub上建立一个仓库,点击
New repository
在
Repository name
一栏中随便填写一个名字做为仓库名。而后直接点击Create repository
按钮。
--
仓库的基本界面以下,由于咱们使用的是SSH协议,而不是HTTPS协议,因此将默认的HTTPS切换成SSH
--
第一种状况: 你在本地尚未创建一个仓库
echo "# learnGit" >> README.md git init git add README.md git commit -m "first commit" git remote add origin git@github.com:liyang/learnGit.git git push -u origin master
第二种状况:若是你在本地已经有了一个仓库
git remote add origin git@github.com:liyang/learnGit.git git push -u origin master
--
首先建立一个test.txt的文件,在里面输入:
# this is a test file
而后将它提交:
$ git add test.txt $ git commit -m "add a test file"
接着建立一个dev分支。
$ git branch dev
--
这样就生成了一个叫dev的分支。但别忘了,咱们如今仍然在master分支
$ git branch dev * master //git branch会列出全部的分支,并在当前分支的前面加上一个*号。
若是须要切换到dev分支,只需执行
$ git checkout dev //撤销修改的语法是:git checkout -- file //而切换分支命令没有 -- 这两个短横。
若是你但愿建立一个分支并直接切换到那个分支,只需执行
$ git chekcout -b dev //这样将会建立dev分支并直接切换到dev分支。
--
在dev分支中进行修改。在test.txt后面加上一行
# this is a test file first line
接着进行提交
$ git add test.txt $ git commit -m "add first line on dev"
而后切换回master分支:
$ git checkout master
当切换回master分支后,打开test.txt,发现刚才添加的一行"first line"不见了, 由于"first line"是在dev分支上提交的。
# this is a test file
--
如今在master分支上,准备跟dev分支合并:
$ git merge dev Updating 0fed6b6..38fb696 Fast-forward test.txt | 1 + 1 file changed, 1 insertion(+)
合并完成之后,能够删除dev分支
$ git branch -d dev
--
git clone url
能够克隆远程仓库到本地
git clone https://github.com/roastlechon/nodejs-rtorrent.git