diff --git a/$$$$$$$$.txt b/$$$$$$$$.txt new file mode 100755 index 0000000000..a47fdd0a4e --- /dev/null +++ b/$$$$$$$$.txt @@ -0,0 +1 @@ +Thank you! \ No newline at end of file diff --git "a/- -Mr. liao \346\202\250\345\245\275\357\274\214\345\205\260\346\236\227\344\271\246- -.txt" "b/- -Mr. liao \346\202\250\345\245\275\357\274\214\345\205\260\346\236\227\344\271\246- -.txt" new file mode 100755 index 0000000000..05c03fdbc3 --- /dev/null +++ "b/- -Mr. liao \346\202\250\345\245\275\357\274\214\345\205\260\346\236\227\344\271\246- -.txt" @@ -0,0 +1,7 @@ +廖老师,您好 + 上善若水,水善利万物而不争 + 明白四达,能无知乎? + i am your new fan bobo + + 学生:兰林 + 七星龙井 diff --git "a/- \347\234\237\347\232\204\345\276\210\346\204\237\350\260\242~.txt" "b/- \347\234\237\347\232\204\345\276\210\346\204\237\350\260\242~.txt" new file mode 100755 index 0000000000..ed399f25d3 --- /dev/null +++ "b/- \347\234\237\347\232\204\345\276\210\346\204\237\350\260\242~.txt" @@ -0,0 +1,4 @@ +真的很感谢廖老师~ +看到这么多同学的反馈与感谢我都觉得还是蛮壮观的~ +有没有可以一起交流的小伙伴可以互相关注github啊 查看这条的提交者应该就可以了吧 +祝老师和同学们以后的每一天都开开心心~ \ No newline at end of file diff --git "a/- \351\200\232\344\277\227\346\230\223\346\207\202\357\274\214\350\250\200\350\276\236\345\271\275\351\273\230\357\274\214\351\235\236\345\270\270\346\204\237\350\260\242 -" "b/- \351\200\232\344\277\227\346\230\223\346\207\202\357\274\214\350\250\200\350\276\236\345\271\275\351\273\230\357\274\214\351\235\236\345\270\270\346\204\237\350\260\242 -" new file mode 100755 index 0000000000..5b06284643 --- /dev/null +++ "b/- \351\200\232\344\277\227\346\230\223\346\207\202\357\274\214\350\250\200\350\276\236\345\271\275\351\273\230\357\274\214\351\235\236\345\270\270\346\204\237\350\260\242 -" @@ -0,0 +1,5 @@ +让我试试pull 接收吧 不枉我学习到那么晚 哈哈 + + +我也试一下 +感谢老师 diff --git a/.000 b/.000 new file mode 100755 index 0000000000..0fe3df9bae --- /dev/null +++ b/.000 @@ -0,0 +1,151 @@ +工作区 -> git add -> 暂存区 -> git commit -> 版本库 -> git push -> 远程仓库 + +版本库HEAD表示当前版本,上一个版本HEAD^,上上一个版本HEAD^^....... + +<<<<<<< HEAD + +======= +>>>>>>> 2e3ba62650634f2f0a08f9d964b88c846a00c991 +配置本机git +git config --global user.name "abcd" +git config --global user.email abcd@efgh.com + +git连接自己的github +第一步:创建SSH_key: ssh-keygen -t rsa -C "aaadega@gmail.com", + 创建成功后.ssh文件下的id_rsa是私钥,id_rsa.pub是公钥 +第二步:登陆GitHub,打开“Account settings”,“SSH Keys”页面 +第三步:添加SSH key,用公钥 + +一切从版本库同步到远程的git都有uname和pword操作push +其他都是从本地直接切换操作 + +一定要从自己的账号下clone仓库,这样你才能推送修改。先fork再clone + +git init 初始化此文件夹为版本库 +git add readme.txt 将文件从工作区添加到暂存区 +git checkout -- readme.txt 撤销工作区文件的修改 +git commit -m "this is commit" 将文件从暂存区提交到版本库 +git reset HEAD 从暂存区回退到工作区 +git diff 查看工作区文件修改前后的差异 +git status 查看工作区与暂存区的文件修改状态 +git log 查看提交日志 +git log --pretty=oneline +git reset --hard HEAD^ 回退到上一版本 +git reflog 查看命令历史 +git remote add origin url 为远程Git更名为origin +git push -u origin master 首次推送此次修改 +git push origin master 然后可以不加-u +git clone url 克隆一个远程库到本地 +git branch page 创建新分支 +git checkout page 选择新分支 +git checkout -b page 相当于上面两条一起 +git branch 查看分支 +git merge page 合并分支page到master,checkout到master分支 +git merge page --no-ff -m "plain" 禁用Fast forward +git branch -d[D] page 删除分支page,删除前先切换到master分支[D强行删除] +git push origin :page 删除远程分支page +cat read.txt 查看文件内容(冲突) +git log --graph 查看分支合并情况 +git log --graph --pretty=oneline --abbrev-commit 查看最近分支合并情况 +git stash 隐藏当前工作区 +git stath list 查看隐藏的工作区 +git stash apply stash{0} 恢复隐藏的工作区,不会删除stash +git stash drop 删除stash +git stash pop stash{0} 恢复隐藏的工作区,一并删除stash +git remote -v 查看远程库信息 +git pull 拉取最新分支 +git branch --set-upstream branchName origin/branchName 指定本地与远程之间的链接 +git tag 可以打一个新标签 +git tag 查看所有标签 +git tag name id 打标签 +-a指定标签名,-m指定说明文字 +git show 可以看到说明文字 + + +有时git clone下来会出现很多branch,更麻烦的是如果主分支没代码那你就只能看到.git目录了。如下面的这个: + +$ git clonegit://gitorious.org/android-eeepc/mesa.git + + +  发现本地就只有一个.git目录,那么这个时候就需要checkout了。 + +  进入你的本地目录,如这个是mesa,利用 + +$ git branch –r + +  查看branch信息(当然你也可以用git show-branch查看,不过有时并不好用),获得如下branch信息: + +origin/android +origin/mesa-es +origin/mesa-es-dri + +  此时我们需要的是android分支的代码,那么此时就要进行checkout了。 +$ git checkout origin/android + +  你再看你的目录(mesa)下是不是有了代码了?其它的branch同理。 + + + + + +git clone默认会把远程仓库整个给clone下来; T2 {0 t, l+ @0 U" C2 g) i +但只会在本地默认创建一个master分支 +如果远程还有其他的分支,此时用git branch -a查看所有分支: + +* master +remotes/origin/HEAD -> origin/master " A4 u3 ~+ n5 u5 \7 R" Z( d# J +remotes/origin/master +remotes/origin/python_mail.skin +remotes/origin/udisk +remotes/origin/vip +复制代码 +能看到远程的所有的分支,如remotes/origin/python_mail.skin e Y' X9 ~, f1 | +可以使用checkout命令来把远程分支取到本地,并自动建立tracking + +$ git checkout -b python_mail.skin origin/python_mail.skin) X& X: I3 Q; ?9 j9 T5 @; J/ M +Branch python_mail.skin set up to track remote branch python_mail.skin from origin.; i/ B! ^3 J# u6 a( }. I$ M- i +Switched to a new branch 'python_mail.skin' +复制代码 +或者使用-t参数,它默认会在本地建立一个和远程分支名字一样的分支 +折叠展开复制代码 + +$ git checkout -t origin/python_mail.skin +复制代码 +也可以使用fetch来做: + +$ git fetch origin python_mail.skin:python_mail.skin +复制代码 +不过通过fetch命令来建立的本地分支不是一个track branch,而且成功后不会自动切换到该分支上- z) t: R4 p- s6 _2 d3 a +注意:不要在本地采用如下方法: + +$ git branch python_mail.skin +$ git checkout python_mail.skin/ i8 z/ N: a% v/ Q: M +$ git pull origin python_mail.skin:python_mail.skin +复制代码 +因为,这样建立的branch是以master为基础建立的,再pull下来的话,会和master的内容进行合并,有可能会发生冲突... + +Git中从远程的分支获取最新的版本到本地有这样2个命令: +1. git fetch:相当于是从远程获取最新版本到本地,不会自动merge + +git fetch origin master +git log -p master..origin/master +git merge origin/master + + 以上命令的含义: + 首先从远程的origin的master主分支下载最新的版本到origin/master分支上 + 然后比较本地的master分支和origin/master分支的差别 + 最后进行合并 + 上述过程其实可以用以下更清晰的方式来进行: +git fetch origin master:tmp +git diff tmp +git merge tmp + + 从远程获取最新的版本到本地的test分支上 + 之后再进行比较合并 +2. git pull:相当于是从远程获取最新版本并merge到本地 +git pull origin master + +上述命令其实相当于git fetch 和 git merge +在实际使用中,git fetch更安全一些 +因为在merge前,我们可以查看更新情况,然后再决定是否合并 +结束 diff --git a/.3qTeacherLiao.txt b/.3qTeacherLiao.txt new file mode 100755 index 0000000000..ea125728bb --- /dev/null +++ b/.3qTeacherLiao.txt @@ -0,0 +1 @@ +刚学会,来玩玩, diff --git a/.Tolvgx.md b/.Tolvgx.md new file mode 100644 index 0000000000..026f00f99a --- /dev/null +++ b/.Tolvgx.md @@ -0,0 +1,211 @@ +# learngit +### 写在前面 +- 本文档是学习 [廖雪峰Git教程](http://t.cn/zQ6LFwE) 后所做的笔记,教程帮忙很大,非常感谢! +- 本笔记主要记录了教程中所用的命令,概念内容不包括在内。 +- 建议看完教程后再看Git官网的 [Pro Git](https://git-scm.com/book/zh/v2) 一书。 +- 最后附上本人的 [GitHub](https://github.com/tolvgx) ,感谢拨冗翻阅拙作,敬请斧正。 + +## 一、Git安装 +安装完成后,还需要最后一步设置,在命令行输入: + + $ git config --global user.name "Your Name" + $ git config --global user.email "email@example.com" + +注意git config命令的--global参数,用了这个参数,表示你这台机器上所有的Git仓库都会使用这个配置,当然也可以对某个仓库指定不同的用户名和Email地址。 + +## 二、创建版本库 + + $ git init + Initialized empty Git repository in /Users/tolvgx/learngit/.git/ + +瞬间Git就把仓库建好了,而且告诉你是一个空的仓库(empty Git repository),细心的读者可以发现当前目录下多了一个.git的目录,这个目录是Git来跟踪管理版本库的,没事千万不要手动修改这个目录里面的文件,不然改乱了,就把Git仓库给破坏了。 + +如果你没有看到.git目录,那是因为这个目录默认是隐藏的,用ls -ah命令就可以看见。 + +### 添加文件到Git仓库 + + $ git add + $ git commit -m "log" + +- 第一步,使用命令git add ,注意,可反复多次使用,添加多个文件; +- 第二步,使用命令git commit完成。-m后面输入的是本次提交的说明,可以输入任意内容,当然最好是有意义的,这样你就能从历史记录里方便地找到改动记录。 + +## 三、时光穿梭机 + + $ git reset --hard HEAD^ + $ git reset --hard commit_id + +- Git允许我们在版本的历史之间穿梭。HEAD指向的版本就是当前版本,上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100,或者直接写commit_id。 +- git reset命令既可以回退版本,也可以把暂存区的修改回退到工作区。具体参考下面的<撤销修改>。 + +### 特殊命令 + + $ git status + $ git log + $ git reflog + $ git diff /git diff HEAD -- + +- 要随时掌握工作区的状态,使用git status命令。 +- git log命令显示从最近到最远的提交日志 +- Git提供了一个命令git reflog用来记录你的每一次命令 +- 如果git status告诉你有文件被修改过,用git diff可以查看修改内容。`git diff `命令可以查看工作区和暂存区的区别。`git diff HEAD -- `命令可以查看工作区和版本库里面最新版本的区别。 + +### 重要概念 +- 工作区: +就是你在电脑里能看到的目录,比如我的learngit文件夹就是一个工作区。 +- 版本库: +工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库。 +- 暂存区: +Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区。 +- 分之: +Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD。 + + 前面讲了我们把文件往Git版本库里添加的时候,是分两步执行的: + 第一步是用git add把文件添加进去,实际上就是把文件修改添加到暂存区; + 第二步是用git commit提交更改,实际上就是把暂存区的所有内容提交到当前分支。 + 因为我们创建Git版本库时,Git自动为我们创建了唯一一个master分支,所以,现在,git commit就是往master分支上提交更改。 + 你可以简单理解为,需要提交的文件修改通通放到暂存区,然后,一次性提交暂存区的所有修改。 + +### 重要特性 + +下面,我们要讨论的就是,为什么Git比其他版本控制系统设计得优秀,因为Git跟踪并管理的是修改,而非文件。 +你会问,什么是修改?比如你新增了一行,这就是一个修改,删除了一行,也是一个修改,更改了某些字符,也是一个修改,删了一些又加了一些,也是一个修改,甚至创建一个新文件,也算一个修改。 + + 操作:第一次修改 -> git add -> 第二次修改 -> git commit + 结果:第二次的修改没有被提交 + 原因:我们前面讲了,Git管理的是修改,当你用git add命令后,在工作区的第一次修改被放入暂存区,准备提交,但是,在工作区的第二次修改并没有放入暂存区,所以,git commit只负责把暂存区的修改提交了,也就是第一次的修改被提交了,第二次的修改不会被提交。 + 解决:第一次修改 -> git add -> 第二次修改 -> git add -> git commit + +### 撤销修改 +- 丢弃工作区的修改:`$ git checkout -- ` +命令中的--很重要,没有--,就变成了“切换到另一个分支”的命令 +- 把暂存区的修改回退到工作区:`$ git reset HEAD ` + +**小结:** +场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令`git checkout -- `。 +场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令`git reset HEAD `,就回到了场景1,第二步按场景1操作。 +场景3:已经提交了不合适的修改到版本库时,想要撤销本次提交,参考版本回退一节,不过前提是没有推送到远程库。 + +### 删除文件 +一般情况下,你通常直接在文件管理器中把没用的文件删了,或者用rm命令删了: + + $ rm test.txt + +现在你有两个选择: + +- 一是确实要从版本库中删除该文件,那就用命令`$ git rm test.txt`删掉,并且`git commit`,文件就从版本库中被删除了。 +- 另一种情况是删错了,因为版本库里还有呢,所以可以很轻松地把误删的文件恢复到最新版本:`$ git checkout -- test.txt` + +## 四、远程仓库(GitHub) + +第1步:创建SSH Key。在用户主目录下,看看有没有.ssh目录,如果有,再看看这个目录下有没有id_rsa和id_rsa.pub这两个文件,如果已经有了,可直接跳到下一步。如果没有,打开Shell(Windows下打开Git Bash),创建SSH Key:`$ ssh-keygen -t rsa -C "youremail@example.com"` + +第2步:登陆GitHub,打开“Account settings”,“SSH Keys”页面: +然后,点“Add SSH Key”,填上任意Title,在Key文本框里粘贴id_rsa.pub文件的内容。 + +### 添加远程库 + +首先,登陆GitHub,然后,在右上角找到“Create a new repo”按钮,创建一个新的仓库。在Repository name填入learngit,其他保持默认设置,点击“Create repository”按钮,就成功地创建了一个新的Git仓库。 + +目前,在GitHub上的这个learngit仓库还是空的,GitHub告诉我们,可以从这个仓库克隆出新的仓库,也可以把一个已有的本地仓库与之关联,然后,把本地仓库的内容推送到GitHub仓库。 + +*1.把一个已有的本地仓库与之关联:* + + $ git remote add origin git@github.com:tolvgx/learngit.git + +请千万注意,把上面的tolvgx替换成你自己的GitHub账户名,否则,你在本地关联的就是我的远程库,关联没有问题,但是你以后推送是推不上去的,因为你的SSH Key公钥不在我的账户列表中。添加后,远程库的名字就是origin,这是Git默认的叫法,也可以改成别的,但是origin这个名字一看就知道是远程库。 + +*2.把本地库的所有内容推送到远程库上:* + + $ git push -u origin master + +把本地库的内容推送到远程,用git push命令,实际上是把当前分支master推送到远程。 +由于远程库是空的,我们第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令: + + $ git push origin master + +### 克隆远程库 +Git支持多种协议,包括https,但通过ssh支持的原生git协议速度最快。 + + $ git clone git@github.com:tolvgx/learngit.git + +## 五、分支管理 +- 分支在实际中有什么用呢?假设你准备开发一个新功能,但是需要两周才能完成,第一周你写了50%的代码,如果立刻提交,由于代码还没写完,不完整的代码库会导致别人不能干活了。如果等代码全部写完再一次提交,又存在丢失每天进度的巨大风险。 +- 现在有了分支,就不用怕了。你创建了一个属于你自己的分支,别人看不到,还继续在原来的分支上正常工作,而你在自己的分支上干活,想提交就提交,直到开发完毕后,再一次性合并到原来的分支上,这样,既安全,又不影响别人工作。 +- 其他版本控制系统如SVN等都有分支管理,但是用过之后你会发现,这些版本控制系统创建和切换分支比蜗牛还慢,简直让人无法忍受,结果分支功能成了摆设,大家都不去用。 +- 但Git的分支是与众不同的,无论创建、切换和删除分支,Git在1秒钟之内就能完成!无论你的版本库是1个文件还是1万个文件。 + +### 创建与合并分支 + + 查看分支:git branch + + 创建分支:git branch + + 切换分支:git checkout + + 创建+切换分支:git checkout -b + + 合并某分支到当前分支:git merge + + 删除分支:git branch -d + +- 在版本回退里,你已经知道,每次提交,Git都把它们串成一条时间线,这条时间线就是一个分支。截止到目前,只有一条时间线,在Git里,这个分支叫主分支,即master分支。HEAD严格来说不是指向提交,而是指向master,master才是指向提交的,所以,HEAD指向的就是当前分支。 +- 一开始的时候,master分支是一条线,Git用master指向最新的提交,再用HEAD指向master,就能确定当前分支,以及当前分支的提交点,每次提交,master分支都会向前移动一步,这样,随着你不断提交,master分支的线也越来越长。 +- 当我们创建新的分支,例如dev时,Git新建了一个指针叫dev,指向master相同的提交,再把HEAD指向dev,就表示当前分支在dev上。你看,Git创建一个分支很快,因为除了增加一个dev指针,改改HEAD的指向,工作区的文件都没有任何变化!不过,从现在开始,对工作区的修改和提交就是针对dev分支了,比如新提交一次后,dev指针往前移动一步,而master指针不变。 +- 假如我们在dev上的工作完成了,就可以把dev合并到master上。Git怎么合并呢?最简单的方法,就是直接把master指向dev的当前提交,就完成了合并。所以Git合并分支也很快!就改改指针,工作区内容也不变!合并完分支后,甚至可以删除dev分支。删除dev分支就是把dev指针给删掉,删掉后,我们就剩下了一条master分支。 + +*下面开始实战。* +首先,我们创建dev分支,然后切换到dev分支: + + $ git checkout -b dev + Switched to a new branch 'dev' + +`git checkout`命令加上-b参数表示创建并切换,相当于以下两条命令: + + $ git branch dev + $ git checkout dev + Switched to branch 'dev' + +然后,用`git branch`命令查看当前分支: + + $ git branch + * dev + master + +`git branch`命令会列出所有分支,当前分支前面会标一个*号。 +然后,我们就可以在dev分支上正常提交,比如对readme.txt做个修改,加上一行,然后提交。 +现在,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`命令用于合并指定分支到当前分支。合并后,再查看readme.txt的内容,就可以看到,和dev分支的最新提交是完全一样的。 +注意到上面的Fast-forward信息,Git告诉我们,这次合并是“快进模式”,也就是直接把master指向dev的当前提交,所以合并速度非常快。 +当然,也不是每次合并都能Fast-forward,我们后面会讲其他方式的合并。 + +合并完成后,就可以放心地删除dev分支了: + + $ git branch -d dev + Deleted branch dev (was fec145a). + +删除后,查看branch,就只剩下master分支了: + + $ git branch + * master + +因为创建、合并和删除分支非常快,所以Git鼓励你使用分支完成某个任务,合并后再删掉分支,这和直接在master分支上工作效果是一样的,但过程更安全。 + + +## 六、常用命令 + cd ls cat mkdir rmdir rm vi pwd + +# 未完待续。。。 \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100755 index 0000000000..9b823b6242 --- /dev/null +++ b/.gitignore @@ -0,0 +1,12 @@ +mydb.txt +<<<<<<< HEAD +*.ignore +*.so +*.class +#windows +*.ini +*.Thumbs.db +======= + +*.so +>>>>>>> 2e3ba62650634f2f0a08f9d964b88c846a00c991 diff --git a/.idea/dd b/.idea/dd new file mode 100644 index 0000000000..f03f6945fb --- /dev/null +++ b/.idea/dd @@ -0,0 +1 @@ +dd diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100755 index 0000000000..ec7a8f5f66 --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100755 index 0000000000..35eb1ddfbb --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.project b/.project new file mode 100755 index 0000000000..6a3e5bed33 --- /dev/null +++ b/.project @@ -0,0 +1,11 @@ + + + learngit-1 + + + + + + + + diff --git a/.swp b/.swp new file mode 100755 index 0000000000..1e8fb8cbef Binary files /dev/null and b/.swp differ diff --git "a/0.0\345\255\246\344\271\240\347\254\224\350\256\260/GitNotes.md" "b/0.0\345\255\246\344\271\240\347\254\224\350\256\260/GitNotes.md" new file mode 100644 index 0000000000..b1952e084b --- /dev/null +++ "b/0.0\345\255\246\344\271\240\347\254\224\350\256\260/GitNotes.md" @@ -0,0 +1,186 @@ +##### 写在前面 +- 本文档是学习 [廖雪峰Git教程](http://t.cn/zQ6LFwE) 后所做的笔记,教程帮忙很大,非常感谢! +- 本笔记主要记录了教程中所用的命令,概念内容不包括在内。 +- 建议看完教程后再看Git官网的 [Pro Git](https://git-scm.com/book/zh/v2) 一书。 +- 最后附上本人的 [GitHub](https://github.com/caozhiqiango) ,感谢拨冗翻阅拙作,敬请斧正。 + +##### 创建版本库 +``` +git init #初始化所在目录为Git仓库 +``` +> 初始化的目录可以不为空 + +##### 添加文件到版本库 +``` +git add ... #添加文件到暂存区(stage) + -f ... #强制添加到暂存区(可用于添加忽略文件) +git commit -m "提交说明" #从暂存区提交到版本库 +``` +> git add 命令可多次执行,然后commit一次。 + +##### 时光机穿梭 +- 查看状态、差异 + +``` +git status #查看仓库当前状态 +git diff [file] #比较工作区和暂存区的差异 +git diff --cached [file] #比较暂存区和版本库的差异 +git diff HEAD -- [file] #比较工作区和版本库的差异 +``` +- 版本切换 + +``` +git log #查看提交历史 +git log -1 #查看最后一次提交信息(-2 则是最后两次) +git log --pretty=oneline #单行格式显示提交历史 + --graph #显示分支合并图 + --abbrev-commit #简写的commit_id +git reflog #查看所有操作记录,包括删除的commit记录 +git reset --hard HEAD^ #回退到上一版本 +# HEAD 表当前版本, HEAD^ 表上一版本,HEAD^^ 表上两版本,HEAD~99 表上99版本。 +git reset --hard commit_id #切换到指定版本 +``` +> Git跟踪管理的是修改,而非文件 + +- 撤销修改 + +``` +git checkout -- #撤销工作区的修改 +git reset HEAD #撤销暂存区的修改 +``` +> 若已commit但没提交到远程库,可用版本回退进行撤销 + +- 删除文件 + - 方法一:工作区删除文件,然后正常提交 + + ``` + rm ... #工作区删除 + git add ... #将修改提交至暂存区 + git commit -m "说明" #提交到版本库 + ``` + - 方法二:直接命令删除工作区和暂存区,然后提交版本库 + + ``` + git rm ... #删除工作区和暂存区文件 + git commit -m "说明" #提交到版本库 + ``` +> 删除、增加文件也都属于修改 + +##### 远程仓库 +- 创建SSH Key + +``` +ssh-keygen -t rsa -C "youremail@example.com" #生成的Key在家目录.ssh文件夹里面,pub后缀是公钥,另一个是私钥。 +``` + +- 添加远程库 + +``` +git remote add origin git@server-name:path/repo-name.git #添加远程仓库 +git remote #查看远程库信息 + -v #显示详细信息 +git push -u origin #推送并关联指定分支到远程库 +``` +> 除第一次关联,之后push不用加-u选项 + +- 从远程库克隆 + +``` +git clone git@server-name:path/repo-name.git #将远程仓库克隆到当前目录 +git pull #拉取远程仓库内容 +``` + +##### 分支管理 +``` +git branch #创建分支 +git checkout #切换到指定分支 +git checkout -b #创建并切换到该分支 +git branch #查看现有分支 +git branch -d #删除指定分支 +git branch --set-upstream #指定本地分支与远程分支的链接 +git merge #合并指定分支到当前分支 + --no-ff #禁用快速合并 +git merge --no-ff -m "提交说明" #普通方式合并,并附提交说明 +git stash #保存当前工作环境(包括工作区和暂存区) +git stash list #查看保存的工作列表 +git stash apply [stash@{X}] #恢复工作状态,但不删除stash内容 +git stash pop [stash@{X}] #恢复工作状态,并删除stash内容 +git stash drop [stash@{X}] #删除stash内容 +git branch -D #强制删除分支(常用于未合并的分支) +``` +> HEAD不是直接指向提交点,而是指向分支,分支再指向提交点 + +- 多人协作 + +``` +##error: failed to push some refs to ... +1. git pull 远程库 +2. 解决冲突(若有),再push +``` + +- 分支管理策略图 + +![image](http://www.liaoxuefeng.com/files/attachments/001384909239390d355eb07d9d64305b6322aaf4edac1e3000/0) + +##### 标签管理 +``` +git tag #查看现有标签 +git tag #给当前所在的commit打标签 +git tag #给指定commit打标签 +git tag -a -m "标签说明" #给指定commit打标签,并附说明 + -s -m "标签说明" #用gpg私钥签名 + -d #删除标签 +git show #显示标签信息 +git push origin #推送标签到远程库 +git push origin --tags #推送所有未推送的标签到远程库 +git push origin :refs/tags/ #删除远程标签(先删除本地,再使用该命令删除) +``` + +##### 自定义Git +``` +git config --global user.name "you_name" #设置全局用户名 +git config --global user.email "email@example.com" #设置全局邮箱 +git config --global color.ui true #设置全局颜色显示 +git config --global alias. <'command_name'> #设置别名 +``` +- 忽略特殊文件 + + 1. 工作区创建`.gitignore`文件 + 2. 内容举例,如下: + + ``` + #Windows: + Thumbs.db + ehthumbs.db + Desktop.ini + + #Python: + *.py[cod] + *.so + *.egg + *.egg-info + dist + build + #My configurations: + db.ini + deploy_key_rsa + ``` + +``` +git check-ignore -v #查看忽略该文件的规则 +``` +> 规则有错时常用上述命令查找定位 + +- 配置别名列表 + +``` +git config --global alias.confg 'config --global' +git confg alias.st status +git confg alias.co checkout +git confg alias.ci commit +git confg alias.br branch +git confg alias.unstage 'reset HEAD' +git confg alias.last 'log -1' +git confg alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit" +``` +- 搭建Git服务器 [教程地址](http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/00137583770360579bc4b458f044ce7afed3df579123eca000) \ No newline at end of file diff --git "a/0.0\345\255\246\344\271\240\347\254\224\350\256\260/README.md" "b/0.0\345\255\246\344\271\240\347\254\224\350\256\260/README.md" new file mode 100644 index 0000000000..ded98c5fec --- /dev/null +++ "b/0.0\345\255\246\344\271\240\347\254\224\350\256\260/README.md" @@ -0,0 +1,2 @@ +### 谢谢廖大!下方链接即是我的学习成果。 +- [学习笔记](https://github.com/caozhiqiango/learngit/blob/master/GitNotes.md) diff --git "a/00-\346\225\231\347\250\213\351\235\236\345\270\270\351\235\236\345\270\270\345\245\275\350\265\236\345\212\25119\345\205\203\345\205\203-\344\270\200\345\256\232\350\246\201\346\216\245\345\217\227\345\225\212.txt" "b/00-\346\225\231\347\250\213\351\235\236\345\270\270\351\235\236\345\270\270\345\245\275\350\265\236\345\212\25119\345\205\203\345\205\203-\344\270\200\345\256\232\350\246\201\346\216\245\345\217\227\345\225\212.txt" new file mode 100644 index 0000000000..9357d18677 --- /dev/null +++ "b/00-\346\225\231\347\250\213\351\235\236\345\270\270\351\235\236\345\270\270\345\245\275\350\265\236\345\212\25119\345\205\203\345\205\203-\344\270\200\345\256\232\350\246\201\346\216\245\345\217\227\345\225\212.txt" @@ -0,0 +1 @@ +Thank you michaelliao ! diff --git a/000.txt b/000.txt new file mode 100755 index 0000000000..12ba4bd769 --- /dev/null +++ b/000.txt @@ -0,0 +1,2 @@ +谢谢廖老师的教程,受益匪浅。 +sdfadfasdfasdfasdfasdf diff --git a/00000.txt b/00000.txt new file mode 100755 index 0000000000..9c17923f61 --- /dev/null +++ b/00000.txt @@ -0,0 +1,3 @@ +wangdong +changed by juhaotian +add a new line to pull request diff --git a/000000.txt b/000000.txt new file mode 100755 index 0000000000..61586b5935 --- /dev/null +++ b/000000.txt @@ -0,0 +1 @@ +Thanks for your teaching. Very good ! \ No newline at end of file diff --git a/000011.txt b/000011.txt new file mode 100755 index 0000000000..1a35ef7afd --- /dev/null +++ b/000011.txt @@ -0,0 +1 @@ +Thank You. \ No newline at end of file diff --git a/0000_thanks.txt b/0000_thanks.txt new file mode 100755 index 0000000000..e8215fa704 --- /dev/null +++ b/0000_thanks.txt @@ -0,0 +1,2 @@ +谢谢廖雪峰老师的课程! +浅显易懂,很有收获。 \ No newline at end of file diff --git a/0001000.txt b/0001000.txt new file mode 100755 index 0000000000..484ba93ef5 --- /dev/null +++ b/0001000.txt @@ -0,0 +1 @@ +This is a test. diff --git a/000ooo000.i b/000ooo000.i new file mode 100755 index 0000000000..7bb13b5b21 --- /dev/null +++ b/000ooo000.i @@ -0,0 +1,7 @@ +����.��Ϊ������,����κ�����ά���߱��ֺ�����ϵ��?��github�ϵ�����: +1.����ά���߿����������ݵ������ֿ� blessed repository�� +2.�����߿�¡�˹����ֿ�(blessed repository)���Լ��Ĺ����ֿ�developer public(��������ֿ�������gihub���Լ��һ��git���,֪ͨ����ά������ȡ���´���).(fork����). +3.��¡�Լ��Ĺ����ֿ⵽���ؿ⿪��,�������Լ��Ĺ����ֿ�developer-public. +4.pull request������ά����.(��ά���߷����ʼ���������ȡ�Լ������´���.) +5.����ά�������Լ����ص� integration manger �ֿ��У��������ߵĹ����ֿ��ΪԶ�ֿ̲⣬�ϲ����²�����.��һ����github��֪������ά������ô���?����integration manger���н������blessed repository������ֱ����github��վ�� �ֶ����? +6.ά���߽��ϲ���ĸ������͵����ֿ� blessed repository�� diff --git a/000thanks.txt b/000thanks.txt new file mode 100755 index 0000000000..05486e60d7 --- /dev/null +++ b/000thanks.txt @@ -0,0 +1 @@ +Thanks \ No newline at end of file diff --git a/007.learnGit b/007.learnGit new file mode 100755 index 0000000000..e4428580a5 --- /dev/null +++ b/007.learnGit @@ -0,0 +1 @@ +007.http://www.liaoxuefeng.com/.挺好用的 diff --git a/0314.txt b/0314.txt new file mode 100755 index 0000000000..11a72b4c65 --- /dev/null +++ b/0314.txt @@ -0,0 +1 @@ +谢谢! \ No newline at end of file diff --git a/0911_10.jpg b/0911_10.jpg new file mode 100755 index 0000000000..61ae60dfc3 Binary files /dev/null and b/0911_10.jpg differ diff --git a/0911_11.jpg b/0911_11.jpg new file mode 100755 index 0000000000..69357ed4fc Binary files /dev/null and b/0911_11.jpg differ diff --git a/0911_12.jpg b/0911_12.jpg new file mode 100755 index 0000000000..9eb4f6af1a Binary files /dev/null and b/0911_12.jpg differ diff --git a/0911_13.jpg b/0911_13.jpg new file mode 100755 index 0000000000..2e5390fa30 Binary files /dev/null and b/0911_13.jpg differ diff --git a/0911_14.jpg b/0911_14.jpg new file mode 100755 index 0000000000..b61012bee5 Binary files /dev/null and b/0911_14.jpg differ diff --git a/0911_8.jpg b/0911_8.jpg new file mode 100755 index 0000000000..a3dcc8b942 Binary files /dev/null and b/0911_8.jpg differ diff --git a/0911_9.jpg b/0911_9.jpg new file mode 100755 index 0000000000..28769694fd Binary files /dev/null and b/0911_9.jpg differ diff --git a/0919 b/0919 new file mode 100755 index 0000000000..03297322df --- /dev/null +++ b/0919 @@ -0,0 +1 @@ +Have a good night diff --git a/0README.md b/0README.md new file mode 100755 index 0000000000..41c8ee684b --- /dev/null +++ b/0README.md @@ -0,0 +1,147 @@ +工作区 -> git add -> 暂存区 -> git commit -> 版本库 -> git push -> 远程仓库 + +版本库HEAD表示当前版本,上一个版本HEAD^,上上一个版本HEAD^^....... + +配置本机git +git config --global user.name "abcd" +git config --global user.email abcd@efgh.com + +git连接自己的github +第一步:创建SSH_key: ssh-keygen -t rsa -C "aaadega@gmail.com", + 创建成功后.ssh文件下的id_rsa是私钥,id_rsa.pub是公钥 +第二步:登陆GitHub,打开“Account settings”,“SSH Keys”页面 +第三步:添加SSH key,用公钥 + +一切从版本库同步到远程的git都有uname和pword操作push +其他都是从本地直接切换操作 + +一定要从自己的账号下clone仓库,这样你才能推送修改。先fork再clone + +git init 初始化此文件夹为版本库 +git add readme.txt 将文件从工作区添加到暂存区 +git checkout -- readme.txt 撤销工作区文件的修改 +git commit -m "this is commit" 将文件从暂存区提交到版本库 +git reset HEAD 从暂存区回退到工作区 +git diff 查看工作区文件修改前后的差异 +git status 查看工作区与暂存区的文件修改状态 +git log 查看提交日志 +git log --pretty=oneline +git reset --hard HEAD^ 回退到上一版本 +git reflog 查看命令历史 +git remote add origin url 为远程Git更名为origin +git push -u origin master 首次推送此次修改 +git push origin master 然后可以不加-u +git clone url 克隆一个远程库到本地 +git branch page 创建新分支 +git checkout page 选择新分支 +git checkout -b page 相当于上面两条一起 +git branch 查看分支 +git merge page 合并分支page到master,checkout到master分支 +git merge page --no-ff -m "plain" 禁用Fast forward +git branch -d[D] page 删除分支page,删除前先切换到master分支[D强行删除] +git push origin :page 删除远程分支page +cat read.txt 查看文件内容(冲突) +git log --graph 查看分支合并情况 +git log --graph --pretty=oneline --abbrev-commit 查看最近分支合并情况 +git stash 隐藏当前工作区 +git stath list 查看隐藏的工作区 +git stash apply stash{0} 恢复隐藏的工作区,不会删除stash +git stash drop 删除stash +git stash pop stash{0} 恢复隐藏的工作区,一并删除stash +git remote -v 查看远程库信息 +git pull 拉取最新分支 +git branch --set-upstream branchName origin/branchName 指定本地与远程之间的链接 +git tag 可以打一个新标签 +git tag 查看所有标签 +git tag name id 打标签 +-a指定标签名,-m指定说明文字 +git show 可以看到说明文字 + +git 下载其他branch并同步本地branch + +有时git clone下来会出现很多branch,更麻烦的是如果主分支没代码那你就只能看到.git目录了。如下面的这个: + +$ git clonegit://gitorious.org/android-eeepc/mesa.git + + +  发现本地就只有一个.git目录,那么这个时候就需要checkout了。 + +  进入你的本地目录,如这个是mesa,利用 + +$ git branch –r + +  查看branch信息(当然你也可以用git show-branch查看,不过有时并不好用),获得如下branch信息: + +origin/android +origin/mesa-es +origin/mesa-es-dri + +  此时我们需要的是android分支的代码,那么此时就要进行checkout了。 +$ git checkout origin/android + +  你再看你的目录(mesa)下是不是有了代码了?其它的branch同理。 +   +  git clone默认会把远程仓库整个给clone下来; T2 {0 t, l+ @0 U" C2 g) i +但只会在本地默认创建一个master分支 +如果远程还有其他的分支,此时用git branch -a查看所有分支: + +* master +remotes/origin/HEAD -> origin/master " A4 u3 ~+ n5 u5 \7 R" Z( d# J +remotes/origin/master +remotes/origin/python_mail.skin +remotes/origin/udisk +remotes/origin/vip +复制代码 +能看到远程的所有的分支,如remotes/origin/python_mail.skin e Y' X9 ~, f1 | +可以使用checkout命令来把远程分支取到本地,并自动建立tracking + +$ git checkout -b python_mail.skin origin/python_mail.skin) X& X: I3 Q; ?9 j9 T5 @; J/ M +Branch python_mail.skin set up to track remote branch python_mail.skin from origin.; i/ B! ^3 J# u6 a( }. I$ M- i +Switched to a new branch 'python_mail.skin' +复制代码 +或者使用-t参数,它默认会在本地建立一个和远程分支名字一样的分支 +折叠展开复制代码 + +$ git checkout -t origin/python_mail.skin +复制代码 +也可以使用fetch来做: + +$ git fetch origin python_mail.skin:python_mail.skin +复制代码 +不过通过fetch命令来建立的本地分支不是一个track branch,而且成功后不会自动切换到该分支上- z) t: R4 p- s6 _2 d3 a +注意:不要在本地采用如下方法: + +$ git branch python_mail.skin +$ git checkout python_mail.skin/ i8 z/ N: a% v/ Q: M +$ git pull origin python_mail.skin:python_mail.skin +复制代码 +因为,这样建立的branch是以master为基础建立的,再pull下来的话,会和master的内容进行合并,有可能会发生冲突... +   +   +   +   +GIT FETCH VS GIT PULL + +1. git fetch:相当于是从远程获取最新版本到本地,不会自动merge + +git fetch origin master +git log -p master..origin/master +git merge origin/master + + 以上命令的含义: + 首先从远程的origin的master主分支下载最新的版本到origin/master分支上 + 然后比较本地的master分支和origin/master分支的差别 + 最后进行合并 + 上述过程其实可以用以下更清晰的方式来进行: + git fetch origin master:tmp +git diff tmp +git merge tmp + + 从远程获取最新的版本到本地的test分支上 + 之后再进行比较合并 +2. git pull:相当于是从远程获取最新版本并merge到本地 + git pull origin master + +上述命令其实相当于git fetch 和 git merge +在实际使用中,git fetch更安全一些 +因为在merge前,我们可以查看更新情况,然后再决定是否合并 diff --git a/0yupeng.txt b/0yupeng.txt new file mode 100755 index 0000000000..04c10bb7f8 --- /dev/null +++ b/0yupeng.txt @@ -0,0 +1,3 @@ +感谢 雪峰老师,有了您的讲解,我学习git省劲多了 + +Another guy edit this file in 2016.2.20 diff --git "a/0\345\244\232\350\260\242\345\273\226\350\200\201\345\270\210.txt" "b/0\345\244\232\350\260\242\345\273\226\350\200\201\345\270\210.txt" new file mode 100755 index 0000000000..96f5621ceb --- /dev/null +++ "b/0\345\244\232\350\260\242\345\273\226\350\200\201\345\270\210.txt" @@ -0,0 +1,6 @@ +一步一步学下来,收获颇丰! +感谢廖老师! +祝老师身体健康!工作顺利! +祝老师心想事成,万事如意! + +测试一下修改别人的txt,push后,是由廖老师解决冲突吗?如果有很多pull request,岂不是很累... \ No newline at end of file diff --git "a/10.9\346\204\237\350\260\242\345\273\226\350\200\201\345\270\210\350\277\231\344\271\210\345\245\275\347\232\204\346\225\231\347\250\213.txt" "b/10.9\346\204\237\350\260\242\345\273\226\350\200\201\345\270\210\350\277\231\344\271\210\345\245\275\347\232\204\346\225\231\347\250\213.txt" new file mode 100755 index 0000000000..8748c33aa2 --- /dev/null +++ "b/10.9\346\204\237\350\260\242\345\273\226\350\200\201\345\270\210\350\277\231\344\271\210\345\245\275\347\232\204\346\225\231\347\250\213.txt" @@ -0,0 +1,3 @@ +跟着老师的教程,一步一步学下来的,非常受益! +不过,有个问题想请教下老师,就是老师在讲版本回退时(git reset --hard HEAD^), +老师说--hard参数的意义,后面会讲,但是好像教程看完了,也没看到老师说hard的含义。 \ No newline at end of file diff --git a/110102031.txt b/110102031.txt new file mode 100755 index 0000000000..08d176d27a --- /dev/null +++ b/110102031.txt @@ -0,0 +1 @@ +jdlaksjdlksajkld diff --git a/11111.txt b/11111.txt new file mode 100755 index 0000000000..d48f8d0603 --- /dev/null +++ b/11111.txt @@ -0,0 +1 @@ +我想试一下...pullrequst.... \ No newline at end of file diff --git a/1127811371@qq.com b/1127811371@qq.com new file mode 100755 index 0000000000..119f076cfd --- /dev/null +++ b/1127811371@qq.com @@ -0,0 +1,4 @@ +Thanks for your Git course! +It's easy to study and I learned a lot. +I think it's the best course I have ever seen! +I hope the author can share more great courses! diff --git a/11447416.txt b/11447416.txt new file mode 100755 index 0000000000..72bbc40dfd --- /dev/null +++ b/11447416.txt @@ -0,0 +1,3 @@ +To sey learn ,I will say git is good,i must learn it will + then thanks Mr.Liao write the article. + thanks Mr.Liao write the article. diff --git a/11_sys0613.txt b/11_sys0613.txt new file mode 100755 index 0000000000..93880d0854 --- /dev/null +++ b/11_sys0613.txt @@ -0,0 +1,2 @@ +learn git soeasy +thanks teacher very much diff --git a/123 b/123 new file mode 100755 index 0000000000..e69de29bb2 diff --git a/17-3-6-familyi.txt b/17-3-6-familyi.txt new file mode 100644 index 0000000000..aaa684c8bc --- /dev/null +++ b/17-3-6-familyi.txt @@ -0,0 +1,7 @@ + +感谢老师出的这个教程!教程易懂,不枯燥,很容易上手 +这次的推送流程: +1、在learngit上加入自己的txt文档 +2、命令:add commit +3、命令:git push origin master +4、在github上pull request \ No newline at end of file diff --git "a/1iuyzh - \345\211\257\346\234\254.txt" "b/1iuyzh - \345\211\257\346\234\254.txt" new file mode 100755 index 0000000000..3a079bbe7c --- /dev/null +++ "b/1iuyzh - \345\211\257\346\234\254.txt" @@ -0,0 +1,2 @@ +Pull request test +Thank for your course! diff --git a/1iuyzh.txt b/1iuyzh.txt new file mode 100755 index 0000000000..3a079bbe7c --- /dev/null +++ b/1iuyzh.txt @@ -0,0 +1,2 @@ +Pull request test +Thank for your course! diff --git a/1xiaxiao.txt b/1xiaxiao.txt new file mode 100755 index 0000000000..c6c41c99c8 --- /dev/null +++ b/1xiaxiao.txt @@ -0,0 +1,3 @@ +Pull request test +Thank for your course! +xvcxvxcvxcvxcvxcvxcvxcv \ No newline at end of file diff --git a/2 b/2 new file mode 100755 index 0000000000..cfbacb455f --- /dev/null +++ b/2 @@ -0,0 +1,4 @@ +thanks +for your help + + diff --git a/201113880132.txt b/201113880132.txt new file mode 100755 index 0000000000..70aa12da5d --- /dev/null +++ b/201113880132.txt @@ -0,0 +1,60 @@ + + +������ -> git add -> �ݴ��� -> git commit -> �汾�� -> git push -> Զ�ֿ̲� + +�汾��HEAD��ʾ��ǰ�汾����һ���汾HEAD^������һ���汾HEAD^^....... + +���ñ���git +git config --global user.name "abcd" +git config --global user.email abcd@efgh.com + +git�����Լ���github +��һ��������SSH_key: ssh-keygen -t rsa -C "aaadega@gmail.com", + �����ɹ���.ssh�ļ��µ�id_rsa��˽Կ��id_rsa.pub�ǹ�Կ +�ڶ�������½GitHub���򿪡�Account settings������SSH Keys��ҳ�� +������������SSH key���ù�Կ + +һ�дӰ汾��ͬ����Զ�̵�git����uname��pword����push +�������Ǵӱ���ֱ���л����� + +һ��Ҫ���Լ����˺���clone�ֿ⣬��������������޸ġ���fork��clone + +git init ��ʼ�����ļ���Ϊ�汾�� +git add readme.txt ���ļ��ӹ��������ӵ��ݴ��� +git checkout -- readme.txt �����������ļ����޸� +git commit -m "this is commit" ���ļ����ݴ����ύ���汾�� +git reset HEAD ���ݴ������˵������� +git diff �鿴�������ļ��޸�ǰ��IJ��� +git status �鿴���������ݴ������ļ��޸�״̬ +git log �鿴�ύ��־ +git log --pretty=oneline +git reset --hard HEAD^ ���˵���һ�汾 +git reflog �鿴������ʷ +git remote add origin url ΪԶ��Git����Ϊorigin +git push -u origin master �״����ʹ˴��޸� +git push origin master Ȼ����Բ���-u +git clone url ��¡һ��Զ�̿⵽���� +git branch page �����·�֧ +git checkout page ѡ���·�֧ +git checkout -b page �൱����������һ�� +git branch �鿴��֧ +git merge page �ϲ���֧page��master��checkout��master��֧ +git merge page --no-ff -m "plain" ����Fast forward +git branch -d[D] page ɾ����֧page��ɾ��ǰ���л���master��֧[Dǿ��ɾ��] +git push origin :page ɾ��Զ�̷�֧page +cat read.txt �鿴�ļ����ݣ���ͻ�� +git log --graph �鿴��֧�ϲ���� +git log --graph --pretty=oneline --abbrev-commit �鿴�����֧�ϲ���� +git stash ���ص�ǰ������ +git stath list �鿴���صĹ����� +git stash apply stash{0} �ָ����صĹ�����������ɾ��stash +git stash drop ɾ��stash +git stash pop stash{0} �ָ����صĹ�������һ��ɾ��stash +git remote -v �鿴Զ�̿���Ϣ +git pull ��ȡ���·�֧ +git branch --set-upstream branchName origin/branchName ָ��������Զ��֮������� +git tag ���Դ�һ���±�ǩ +git tag �鿴���б�ǩ +git tag name id ���ǩ +-aָ����ǩ����-mָ��˵������ +git show ���Կ���˵������ \ No newline at end of file diff --git a/20150427add.txt b/20150427add.txt new file mode 100755 index 0000000000..7ef7b0db23 --- /dev/null +++ b/20150427add.txt @@ -0,0 +1 @@ +asdfasdfasdfasdfasdf diff --git a/20151224_test.txt b/20151224_test.txt new file mode 100755 index 0000000000..92b373c8a2 --- /dev/null +++ b/20151224_test.txt @@ -0,0 +1 @@ +Merry Chrismas! \ No newline at end of file diff --git a/20160407.txt b/20160407.txt new file mode 100755 index 0000000000..5f5534782a --- /dev/null +++ b/20160407.txt @@ -0,0 +1 @@ +Thanks!! diff --git a/201604221123 b/201604221123 new file mode 100755 index 0000000000..c298fe48de --- /dev/null +++ b/201604221123 @@ -0,0 +1 @@ +github test diff --git a/20160517 b/20160517 new file mode 100755 index 0000000000..7421001dfc --- /dev/null +++ b/20160517 @@ -0,0 +1,2 @@ +试试运气 +以前只是单纯的用来做备份,今天系统的看了下,大概知道怎么用git了,非常感谢! diff --git a/20160831.txt b/20160831.txt new file mode 100755 index 0000000000..cfcf4f31a8 --- /dev/null +++ b/20160831.txt @@ -0,0 +1 @@ +学习到很多,谢谢。 \ No newline at end of file diff --git a/20160923.txt b/20160923.txt new file mode 100755 index 0000000000..854f810072 --- /dev/null +++ b/20160923.txt @@ -0,0 +1 @@ +谢谢廖老师,写的很好,受益匪浅 diff --git a/20160929.txt b/20160929.txt new file mode 100755 index 0000000000..974c02b7b0 --- /dev/null +++ b/20160929.txt @@ -0,0 +1 @@ +通俗易懂,受益匪浅!谢谢! \ No newline at end of file diff --git a/2017_zhengtong_thanks_for_teacher.txt b/2017_zhengtong_thanks_for_teacher.txt new file mode 100644 index 0000000000..d97229c8f1 --- /dev/null +++ b/2017_zhengtong_thanks_for_teacher.txt @@ -0,0 +1,5 @@ +This is my first time to read your blog; +2017.1.1, I began tu learn git, and I find the blog on the Internet. +It's grateful for you; +I learn a lot from it; + By zhengtong 2017.1.4 \ No newline at end of file diff --git a/2300281344@qq.com.txt b/2300281344@qq.com.txt new file mode 100755 index 0000000000..df9b9dc493 --- /dev/null +++ b/2300281344@qq.com.txt @@ -0,0 +1,14 @@ +============= + Orz +============= + +我是WuTianming。 +我是个中学生。 +Orz +囧rz +学完Linux Shell和C++之后再也无力学Git +感到Git难得一塌糊涂有木有 +然而 +我Python都(快)会了,怎么能不会Git +所以 +这只是个Hello World diff --git a/232322.txt b/232322.txt new file mode 100755 index 0000000000..1ba67d4882 --- /dev/null +++ b/232322.txt @@ -0,0 +1 @@ +Very good tutorial, thank you diff --git a/2631015638@qq.com.txt b/2631015638@qq.com.txt new file mode 100755 index 0000000000..04d42ba92b --- /dev/null +++ b/2631015638@qq.com.txt @@ -0,0 +1 @@ +Thanks for Mrs.Liao, this is just for pull request try. \ No newline at end of file diff --git a/272700767.text b/272700767.text new file mode 100755 index 0000000000..424fb9bb4e --- /dev/null +++ b/272700767.text @@ -0,0 +1 @@ +学习了廖老师的Git和Python教程,收获非常大。希望廖老师能再接再厉,我会永远支持您的! diff --git a/272964081.txt b/272964081.txt new file mode 100755 index 0000000000..b3c9e870ee --- /dev/null +++ b/272964081.txt @@ -0,0 +1,3 @@ +let me have a try + +it is very nice to learn from your blog! \ No newline at end of file diff --git a/2769806795.txt b/2769806795.txt new file mode 100755 index 0000000000..db2a29e11f --- /dev/null +++ b/2769806795.txt @@ -0,0 +1 @@ +通俗易懂... \ No newline at end of file diff --git a/2827873682@qq.com b/2827873682@qq.com new file mode 100644 index 0000000000..261269cb0e --- /dev/null +++ b/2827873682@qq.com @@ -0,0 +1 @@ +谢谢老师 diff --git a/2borges b/2borges new file mode 100755 index 0000000000..d2b889c76f --- /dev/null +++ b/2borges @@ -0,0 +1 @@ +Imperceptible already in the morning, sincere thanks to you and your good tutorial. diff --git a/3.1415926.txt b/3.1415926.txt new file mode 100755 index 0000000000..92f563a635 --- /dev/null +++ b/3.1415926.txt @@ -0,0 +1 @@ +教程不错,就是对Pull Request不是太了解,所以就来演练一下。 \ No newline at end of file diff --git a/304270703@qq.com b/304270703@qq.com new file mode 100755 index 0000000000..4af1ada830 --- /dev/null +++ b/304270703@qq.com @@ -0,0 +1 @@ +Thanks for your articles. diff --git a/340623792@qq.com.txt b/340623792@qq.com.txt new file mode 100755 index 0000000000..7d94d5dc17 --- /dev/null +++ b/340623792@qq.com.txt @@ -0,0 +1 @@ +test Pull Request~ diff --git a/364834547@qq.txt.txt b/364834547@qq.txt.txt new file mode 100755 index 0000000000..3b9ce015dc --- /dev/null +++ b/364834547@qq.txt.txt @@ -0,0 +1 @@ +test and thanks! \ No newline at end of file diff --git a/374909444@qq.com.py b/374909444@qq.com.py new file mode 100755 index 0000000000..009c9960d3 --- /dev/null +++ b/374909444@qq.com.py @@ -0,0 +1,7 @@ +Git终于学完了。 +感谢廖老师! +同时也学了Python。 +我是想做数据挖掘。接下来想学用Python处理数据。 +今年9月份就要找工作了。 +希望能进西安华为研究所。 +再次感谢廖老师。 \ No newline at end of file diff --git a/3Q b/3Q new file mode 100755 index 0000000000..261269cb0e --- /dev/null +++ b/3Q @@ -0,0 +1 @@ +谢谢老师 diff --git a/3Q.txt b/3Q.txt new file mode 100755 index 0000000000..bd0286c61e --- /dev/null +++ b/3Q.txt @@ -0,0 +1,5 @@ +<<<<<<< HEAD +Thank you!!! +======= +��л����ʦ�Ľ̳̣������ջ�ܶ࣬�dz���л�� +>>>>>>> 2e3ba62650634f2f0a08f9d964b88c846a00c991 diff --git a/3Q_by_fei.txt b/3Q_by_fei.txt new file mode 100755 index 0000000000..87826a16df --- /dev/null +++ b/3Q_by_fei.txt @@ -0,0 +1 @@ +Thanks for your lesson. \ No newline at end of file diff --git a/3qs.txt b/3qs.txt new file mode 100755 index 0000000000..8cc604813c --- /dev/null +++ b/3qs.txt @@ -0,0 +1 @@ +多谢,必须点赞! \ No newline at end of file diff --git a/416663690@qq.com b/416663690@qq.com new file mode 100755 index 0000000000..38f82da9d4 --- /dev/null +++ b/416663690@qq.com @@ -0,0 +1 @@ +测试一下! 信息! diff --git a/422729946.txt b/422729946.txt new file mode 100755 index 0000000000..b063b859f2 --- /dev/null +++ b/422729946.txt @@ -0,0 +1,2 @@ +谢谢你 廖雪峰老师 + 你的文章让我对GitHub有了很多的认识。 diff --git a/43.html b/43.html new file mode 100755 index 0000000000..7f92a74f52 --- /dev/null +++ b/43.html @@ -0,0 +1,52 @@ + + + + + + + +
+NEW YORK-Ryan McCarthy, an assistant editor on The New York Times national desk, + has been named editor-in-chief of Vice News, according to a memo obtained by The Huffington Post. +The move comes as Editor-in-Chief Jason Mojica shifts over to the television side of Vice as head +of international coverage for its forthcoming nightly HBO news show. +Vice, which already has a weekly newsmagazine on HBO, has not yet +announced a start date for the program it first announced plans for a year ago. +Former Bloomberg executive Josh Tyrangiel, who joined Vice in October to oversee +the program, said in a memo that the new hires are part of the company's plan to "ramp up toward launch of the Vice nightly show on HBO." +McCarthy, who previously worked at The Huffington Post, Reuters and The Washington Post, joined the Times’ audience development team last year. +He’s the second Times staffer to join Vice this past week. Times media reporter Ravi Somaiya joined Vice as a tech corresponden +t for the HBO programs, according to the memo. +Tyrangiel also announced that Fusion’s Javier Guzman is joining as senior producer for U.S. news, +Christina Vallice of “NBC Nightly News” is joining as supervising producer focused on breaking news, +and Jessica Weisberg, who most recently worked on the second season of “Serial,” comes aboard as +supervising producer focused on the nightly show’s long-lead stories. +
+

This dialouge is copyed from NEW YORK Times.

+ + + \ No newline at end of file diff --git a/453149614@qq.com b/453149614@qq.com new file mode 100755 index 0000000000..f333821ef2 --- /dev/null +++ b/453149614@qq.com @@ -0,0 +1 @@ +一天学完,thank u @twbs :+1: diff --git a/454135329@qq.com b/454135329@qq.com new file mode 100755 index 0000000000..2a5b82bacd --- /dev/null +++ b/454135329@qq.com @@ -0,0 +1 @@ +git真的蛮好的,是我使用过最好的版本控制软件,感谢老师的帮助。 diff --git a/472546146@qq.txt b/472546146@qq.txt new file mode 100755 index 0000000000..f9ff7f7874 --- /dev/null +++ b/472546146@qq.txt @@ -0,0 +1 @@ +�ҿ�������ͨ���׶���git�̳̣�лл��ʦ \ No newline at end of file diff --git a/495523438@qq.com.txt b/495523438@qq.com.txt new file mode 100755 index 0000000000..1327da1627 --- /dev/null +++ b/495523438@qq.com.txt @@ -0,0 +1 @@ +谢谢廖神的教程,受益匪浅! \ No newline at end of file diff --git a/501709365.txt b/501709365.txt new file mode 100755 index 0000000000..3202a3ce6d --- /dev/null +++ b/501709365.txt @@ -0,0 +1,19 @@ +学习git心得: + +1:以前也用过git,但对分布式理解不强,因为很少使用分支,基本仍然按照svn的方式在使用。 +也就是每个开发人员一个仓库一个分支(master),远程一个分支(master)。 +实际上针对git,端端和后端的开发应该使用不同的方式: +先说移动端开发: +远程:master分支(加上若干标签,每个标签对应一个正式的发版)(属于稳定的代码),dev分支(用于内测版本的打包分支)。 +属于可打包进行测试的代码。 +本地:除了master和dev,还有开发人员专用的bug,feature分支。如果feature属于小团队合作,那还需要提交到远程,但合并到dev后可以废弃。 + +对于服务端端的开发: +可能还需要区分内部测试环境和开发环境,不用通过标签,因为服务端的旧发版的状态一般不需要保留。 + +2:对于代码的冲突,合并,解决冲突,重新提交的认识。 +以前使用的是插件或者工具,感觉非常复杂,实际上通过命令行掌握起来,要清楚,明了很多。可能还有一些复杂的命令还没有讲到,但实际上感觉这个课程讲到的东西已经基本够用。 + +3:非常感谢您的课程。 + + diff --git a/521xueweihan.txt b/521xueweihan.txt new file mode 100755 index 0000000000..45a563e330 --- /dev/null +++ b/521xueweihan.txt @@ -0,0 +1,2 @@ +最后一个测!let‘go! +再测试一次 \ No newline at end of file diff --git a/534295842 b/534295842 new file mode 100755 index 0000000000..3bdee47d2b --- /dev/null +++ b/534295842 @@ -0,0 +1 @@ +wj love fql diff --git a/53455375@qq.com.txt b/53455375@qq.com.txt new file mode 100755 index 0000000000..99abe36ac0 --- /dev/null +++ b/53455375@qq.com.txt @@ -0,0 +1 @@ +想测试下pull request,谢谢老师 \ No newline at end of file diff --git a/541020258.txt b/541020258.txt new file mode 100644 index 0000000000..3ec34217a5 --- /dev/null +++ b/541020258.txt @@ -0,0 +1 @@ +Thank you MR.liao \ No newline at end of file diff --git a/543449492@qq.com.txt b/543449492@qq.com.txt new file mode 100755 index 0000000000..7ca0b2ebc2 --- /dev/null +++ b/543449492@qq.com.txt @@ -0,0 +1 @@ +感谢你的Python和Git教程,受益良多! \ No newline at end of file diff --git a/57114571140005711457114.txt b/57114571140005711457114.txt new file mode 100644 index 0000000000..ebdb9202db --- /dev/null +++ b/57114571140005711457114.txt @@ -0,0 +1 @@ +thank you! diff --git a/574401281@qq.com b/574401281@qq.com new file mode 100755 index 0000000000..221f1d618e --- /dev/null +++ b/574401281@qq.com @@ -0,0 +1 @@ +测试下pull request diff --git a/57test b/57test new file mode 100755 index 0000000000..37df147756 --- /dev/null +++ b/57test @@ -0,0 +1,3 @@ +thanks for your course. + + diff --git a/584303154@qq.com.txt b/584303154@qq.com.txt new file mode 100755 index 0000000000..e69de29bb2 diff --git a/595521697@qq.com b/595521697@qq.com new file mode 100755 index 0000000000..93417e6f62 --- /dev/null +++ b/595521697@qq.com @@ -0,0 +1,5 @@ +廖老师的课程由浅入深 +旁征博引 +语言幽默风趣平时 +容易理解 +上上之作! diff --git a/649913117_thanks b/649913117_thanks new file mode 100755 index 0000000000..829b64fac0 --- /dev/null +++ b/649913117_thanks @@ -0,0 +1 @@ +一步步看下来,基本会玩了 就差熟练记住命令了 thanks diff --git a/666666.txt b/666666.txt new file mode 100755 index 0000000000..2c13900a04 --- /dev/null +++ b/666666.txt @@ -0,0 +1,2 @@ +just for testing +and thanks a lot to xuefeng liao~ diff --git a/674345386.txt b/674345386.txt new file mode 100755 index 0000000000..d8036c15d7 --- /dev/null +++ b/674345386.txt @@ -0,0 +1,2 @@ +Git is a version control system. +Git is free software. \ No newline at end of file diff --git a/744971084learninggit.txt b/744971084learninggit.txt new file mode 100755 index 0000000000..f00908b8d9 --- /dev/null +++ b/744971084learninggit.txt @@ -0,0 +1 @@ +yong pin tian xie \ No newline at end of file diff --git a/75201618@Git b/75201618@Git new file mode 100755 index 0000000000..4147ebe31f --- /dev/null +++ b/75201618@Git @@ -0,0 +1,434 @@ +yum install git + +设置用户信息 +git config --global user.name "Mark" +git config --global user.email 75201618@qq.com +注意git config命令的--global参数,用了这个参数,表示你这台机器上所有的Git仓库都会使用这个配置,当然也可以对某个仓库指定不同的用户名和Email地址。 + +创建git仓库 +在当前目录下创建git仓库 +git init +[root@localhost gittest]# git init +Initialized empty Git repository in /root/gittest/.git/ + +在git仓库中添加需要追踪的文件或目录,如果该文件或目录已经被追踪的话将被放入缓存区 +git add +[root@localhost gittest]# vim readme.txt +[root@localhost gittest]# git add readme.txt + +提交已暂存的文件(只会提交已暂存的文件,git add后的文件,未git add的文件不会进行提交) +git commit 启动文本编辑器输入本次提交的说明 +git commit -m 'initial project version' 将文件提交到仓库中,并且输入“*”为本次提交的说明 +git commit -a -m "Mark at 2016" 自动提交已追踪但还未暂存的文件 +[root@localhost gittest]# git commit -m "wrote a readme file" +[master (root-commit) 1ba1490] wrote a readme file + 1 files changed, 2 insertions(+), 0 deletions(-) + create mode 100644 readme.txt +git commit命令执行成功后告诉你,1个文件被改动,插入了两行内容 + +git add需要添加追踪的文件和目录,添加的文件或目录需要加在命令的后方,而git commit提交的文件为已追踪的文件,不需要指定文件或目录。 + +查看文件状态 +git status +[root@localhost gittest]# vim readme.txt +[root@localhost gittest]# git status +# On branch master +# Changed but not updated: +# (use "git add ..." to update what will be committed) +# (use "git checkout -- ..." to discard changes in working directory) +# +# modified: readme.txt +# +修改readme.txt文件后,通过git status命令告诉我们,readme.txt被修改过了,但还没有准备提交的修改。 + +用未暂存的文件对比已暂存的文件,查看尚未暂存的文件更新了哪些部分 +git diff +[root@localhost gittest]# git diff +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. +对比具体修改了什么内容,通过输出可以看到,我们在第一行添加了一个“distributed”单词。 +用已暂存的文件对比已提交的文件,查看尚未提交的文件更新了哪些部分 +git diff --cached 1.6.1及更高版本支持git diff --staged +用工作区的文件对比已提交的文件 +git diff HEAD -- readme.txt +[root@localhost gittest]# git diff HEAD -- readme.txt +diff --git a/readme.txt b/readme.txt +index 76d770f..a9c5755 100644 +--- a/readme.txt ++++ b/readme.txt +@@ -1,4 +1,4 @@ + Git is a distributed version control system. + Git is free software distributed under the GPL. + Git has a mutable index called stage. +-Git tracks changes. ++Git tracks changes of files. +修改过后进行修改提交,提交修改的步骤跟提交新文件是一样的两步,第一步是git add,之后使用git status显示将要被提交的修改包括readme.txt,# Changes to be committed: +# (use "git reset HEAD ..." to unstage) +# +# modified: readme.txt +最后进行提交git commit -m "add distributed",之后使用git status显示# On branch master +nothing to commit (working directory clean) +告诉我们当前没有需要提交的修改,而且,工作目录是干净(working directory clean)的 + +查看文件历史记录 +git log +[root@localhost gittest]# git log readme.txt +commit fe8ca89f6dd27ec80eb3cca5bf03b2f0aafd9cc6 +Author: Mark +Date: Sun Feb 28 18:51:50 2016 +0800 + + append GPL + +commit 3d03f68a17cb3505bc32cd064ebfab5b33b525dd +Author: Mark +Date: Sun Feb 28 18:37:29 2016 +0800 + + add distributed + +commit 1ba1490c1bf097d1a99ab2ecc535267c6e7a4afa +Author: Mark +Date: Sun Feb 28 18:02:26 2016 +0800 + + wrote a readme file +显示从最近到最远的提交日志,我们可以看到3次提交,最近的一次是append GPL,上一次是add distributed,最早的一次是worte a readme file。如果觉得输出信息太多,可以使用--pretty=oneline参数[root@localhost gittest]# git log --pretty=oneline readme.txt +fe8ca89f6dd27ec80eb3cca5bf03b2f0aafd9cc6 append GPL +3d03f68a17cb3505bc32cd064ebfab5b33b525dd add distributed +1ba1490c1bf097d1a99ab2ecc535267c6e7a4afa wrote a readme file +commit id是一大串fe8ca89...9cc6。这是通过SHA1计算出来的数字,用十六进制表示。 + +版本回退 +git reset +[root@localhost gittest]# git reset --hard HEAD^ +HEAD is now at fe8ca89 append GPL +在git当中HEAD表示当前版本,也就是最新的提交fe8ca89...9cc6,上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100。 +git reset到旧版本上以后,新版本在git log中就会消失,只能通过commit id来指定回到该版本。如果已经遗忘commit id的话可以通过git reflog来查看历史记录。[root@localhost gittest]# git reflog +fe8ca89 HEAD@{0}: fe8ca89: updating HEAD +58a0f48 HEAD@{1}: HEAD~1: updating HEAD +fe8ca89 HEAD@{2}: HEAD^: updating HEAD +2232bfd HEAD@{3}: commit: add git is +fe8ca89 HEAD@{4}: commit: append GPL +58a0f48 HEAD@{5}: commit: add 4-9 +3d03f68 HEAD@{6}: commit: add distributed +5ea43d8 HEAD@{7}: commit: add 3 files +1ba1490 HEAD@{8}: commit (initial): wrote a readme file + +撤销修改: +git checkout -- readme.txt +如果文件还未暂存,还原文件到和版本库中一模一样的状态。 +如果文件已被暂存后再次修改,还原文件到添加到暂存区后的状态。 +如果要删除已暂存的修改,需要先用git reset HEAD files命令把暂存区的修改撤销掉(unstage),重新放回工作区:[root@localhost gittest]# git reset HEAD readme.txt +Unstaged changes after reset: +M readme.txt +然后再用git checkout -- files来丢弃工作区的修改 + +删除文件: + 如果需要删除一个已经提交到版本库中的文件或目录,先使用rm命令进行删除,接着git status查看状态[root@localhost gittest]# git status +# On branch master +# Changed but not updated: +# (use "git add/rm ..." to update what will be committed) +# (use "git checkout -- ..." to discard changes in working directory) +# +# deleted: test.txt +# +no changes added to commit (use "git add" and/or "git commit -a") +如果是误删除,那么可以使用git checkout -- files来进行还原,如果确定删除那么使用git rm命令来确认删除,并再删除后进行提交git commit。 + +远程库 +查看远程库信息 +git remote +或者用git remote -v 显示更加详细的信息 +关联本地版本库与git仓库 +git remote add origin git@github.com:shaochen206/git.git,添加后,远程库的名字就是origin,这是Git默认的叫法。 +把本地库的内容推送到远程库上 +git push -u origin master,把本地库的内容推送到远程,用git push命令,实际上是把本地分支master推送到远程。 +由于远程库是空的,我们第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送到远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。从现在起,只要本地作了提交,就可以通过命令:git push origin master,把本地master分支的最新修改推送至GitHub。 +origin就是指向远程库的链接,master是本地的master分支。git push origin master的意思就是通过origin这个指向链接上传本地的master分支。 +如果推送的版本在远程库上有更新的版本,进行提交就会出错,为了防止你丢失数据会禁止你推送,只有在你抓取远程库最新的版本后在本地合并,解决冲突之后再推送。git push origin dev失败,远程库版本较新,git pull,(如果git pull提示“no tracking information”,则说明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream branch-name origin/branch-name)抓取远程库最新版本并在本地合并,修改文件解决冲突,git add,git commit -m,git push origin dev, + +克隆现有的git仓库 +git clone +克隆有两种方式,ssh和https +git clone git@github.com:shaochen206/gitskills.git +git clone https://github.com/shaochen206/gitskills.git +克隆git仓库的时候默认只会看到master分支,如果需要在别的分支上进行开发,就必须创建远程origin的dev分支到本地,于是可以使用命令git checkout -b dev origin/dev创建本地dev分支并与远程origin关联 + +创建与合并分支 +创建并切换分支 +git checkout -b dev。[root@localhost gittest]# git checkout -b dev +Switched to a new branch 'dev' +-b参数表示创建并切换,相当于以下两条命令: +git branch dev +git checkout dev +查看当前分支 +git branch +切换分支 +git checkout master +合并分支 +git merge dev,合并指定的dev分支到当前分支。[root@localhost gittest]# git merge dev +Updating a56ebf4..45ad618 +Fast-forward + readme.txt | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) +注意Git提示的Fast-forward信息,这是告诉我们,这次合并时快进模式,也就是直接把master指向dev的当前提交,所以合并速度非常快。 +删除分支(可以删除已合并的分支,但如果该分支功能被取消不进行合并就删除分支的话,就需要使用git branch -D 来进行删除) +git branch -d dev,[root@localhost gittest]# git branch -d dev +Deleted branch dev (was 45ad618). +分支冲突 +master分支和dev分支都提交了新的版本,无法直接快速合并,只能试图把各自的修改合并起来,但这种合并就可能会有冲突[root@localhost gittest]# git merge dev +Auto-merging readme.txt +CONFLICT (content): Merge conflict in readme.txt +Automatic merge failed; fix conflicts and then commit the result.可以使用git status查看冲突的文件[root@localhost gittest]# git status +# On branch master +# Your branch is ahead of 'origin/master' by 1 commit. +# +# Unmerged paths: +# (use "git add/rm ..." as appropriate to mark resolution) +# +# both modified: readme.txt +# +no changes added to commit (use "git add" and/or "git commit -a") +直接查看文件可以看到[root@localhost gittest]# cat readme.txt +Git is a distributed version control system. +Git is free software distributed under the GPL. +Git has a mutable index called stage. +Git tracks changes. +<<<<<<< HEAD +Creating a new branch is quick & simple. +======= +Creating a new branch is quick AND simple. +>>>>>>> feature1 +需要手动修改后再提交。提交后可以使用带参数的git log查看分支合并情况[root@localhost gittest]# git log --graph --pretty=oneline --abbrev-commit +* b241fc9 conflict fixed +|\ +| * 77d1081 AND simple +* | 094b12f & simple +|/ +* 45ad618 branch test +* a56ebf4 delete test.txt +* 2006e69 add test.txt +* 91a96dc git tracks changes +* 4137f4d understand how stage works +* fe8ca89 append GPL +* 58a0f48 add 4-9 +* 3d03f68 add distributed +* 5ea43d8 add 3 files +* 1ba1490 wrote a readme file +最后再删除分支。 +通常,合并分支时,如果可能,Git会用fast-forward模式,但这种模式下,删除分支后,会丢掉分支信息。 +如果要强制禁用fast-forward模式,Git就会在merge时生成一个新的commit,这样,从分支历史上就可以看出分支信息。 +可以使用--no-ff的git merge来禁止使用fast-forward模式 +ff模式与no-ff模式的区别: +no-ff模式* 896d46a master +* 3290a67 Merge branch 'dev' +|\ +| * 39cfdce dev +|/ +* c30d089 add readme + +ff模式* 5658847 master +* e416261 dev +* 3c5690d add readme + +如果切换分支之后master也有了修改,合并就成了这样 + +BUG分支 +如果你在dev分支上进行工作,但master分支出现了BUG需要进行修复,但你dev分支的工作还未完成,无法进行提交。可以先使用git stash把现场储存起来,然后切换到出现BUG的master分支上进行修复,创建issus-101分支进行BUG修复,修复完成之后切换回master分支进行合并,合并完成后删除issus-101分支,再切换回dev分支,查看储存区的列表使用git stash list,使用git stash apply恢复,但stash内容并不会被删除,需要使用git stash drop删除,或者直接使用git stash pop来恢复并且删除。 + +标签 +创建标签 +git tag * 在当前分支的最新提交的commit上打上标签* +git tag * commit id 指定commit id(SHA1计算的十六进制数)打上*标签 +git tag -a v0.1 -m "version 0.1 released" commit id 指定commit id打上v0.1的标签并添加"version 0.1 released"标签描述和打标签的时间 +显示标签 +git show 默认显示最新的一次tag或者加上*参数显示指定标签 +加密标签会报错http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/001376951758572072ce1dc172b4178b910d31bc7521ee4000?t=1456906687459#comments + +删除追踪文件或删除暂存区文件 +rm * 删除文件 +删除文件后使用git status,可看到该文件会出现在"Changes not staged for commit"部分,标记为deleted: +git rm * 从git追踪中和暂存区中删除该文件 +删除追踪文件后使用git status,可看到该文件会出现在"Changes to be committed"部分,标记为deleted:,如果删除缓存区文件,需要添加-f选项强制删除 +删除追踪和暂存区文件但不删除源文件 +git rm --cached * 在忘记添加.gitignore文件的时候,对不需要追踪的文件进行追踪之后使用 +移动文件或更改名称 +git mv file_form file_to +相当于展开为 +mv file_form file_to +git rm file_form +git add file_to +查看提交历史 +git log 按提交时间列出所有更新,最近更新的排在最上面。这个命令会列出每隔提交的SHA-1校验和、作者的名字和电子邮件地址、提交时间以及提交说明 +git log -p -2 -p可以显示每次提交的内容差异,-2显示最近2次提交 +git log --stat 显示每次提交的简略的统计信息 +git log --pretty 指定显示提交历史的格式,oneline显示在一行中,short显示作者,full显示作者和提交者,fuller显示作者、提交者、作者修订时间、提交时间,format可以自行指定要显示的格式,git log --pretty=format:"%h - %an : %s" +作者指的是实际作出修改的人,提交者指的是最后将此工作提交到仓库的人 +git log --pretty=format 常用的选项 +选项 说明 +%H + +提交对象(commit)的完整哈希字串 + +%h + +提交对象的简短哈希字串 + +%T + +树对象(tree)的完整哈希字串 + +%t + +树对象的简短哈希字串 + +%P + +父对象(parent)的完整哈希字串 + +%p + +父对象的简短哈希字串 + +%an + +作者(author)的名字 + +%ae + +作者的电子邮件地址 + +%ad + +作者修订日期(可以用 --date= 选项定制格式) + +%ar + +作者修订日期,按多久以前的方式显示 + +%cn + +提交者(committer)的名字 + +%ce + +提交者的电子邮件地址 + +%cd + +提交日期 + +%cr + +提交日期,按多久以前的方式显示 + +%s + +提交说明 + + +来源: http://git-scm.com/book/zh/v2/Git-%E5%9F%BA%E7%A1%80-%E6%9F%A5%E7%9C%8B%E6%8F%90%E4%BA%A4%E5%8E%86%E5%8F%B2 +git log 的常用选项 +选项 说明 +-p + +按补丁格式显示每个更新之间的差异。 + +--stat + +显示每次更新的文件修改统计信息。 + +--shortstat + +只显示 --stat 中最后的行数修改添加移除统计。 + +--name-only + +仅在提交信息后显示已修改的文件清单。 + +--name-status + +显示新增、修改、删除的文件清单。 + +--abbrev-commit + +仅显示 SHA-1 的前几个字符,而非所有的 40 个字符。 + +--relative-date + +使用较短的相对时间显示(比如,“2 weeks ago”)。 + +--graph + +显示 ASCII 图形表示的分支合并历史。 + +--pretty + +使用其他格式显示历史提交信息。可用的选项包括 oneline,short,full,fuller 和 format(后跟指定格式)。 + +限制 git log 输出的选项 +选项 说明 +-(n) + +仅显示最近的 n 条提交 + +--since, --after + +仅显示指定时间之后的提交。 + +--until, --before + +仅显示指定时间之前的提交。 + +--author + +仅显示指定作者相关的提交。 + +--committer + +仅显示指定提交者相关的提交。 + +--grep + +仅显示含指定关键字的提交 + +-S + +仅显示添加或移除了某个关键字的提交 + + + + +托管文件属性分为未追踪、已追踪、已修改、已暂存、已提交 +Untracked files 未追踪,新添加的文件或目录,未git add进行追踪 +Changes to be committed 已暂存,使用git add对未追踪的文件或目录进行追踪并缓存,如果文件或目录被修改后再次运行git add后将被再次缓存 +Changed but not updated 已修改,但未放入缓存,文件在缓存后被修改 + + +git status -s +状态 +?? 未追踪 +A 新添加的缓存区文件 +M 修改过的缓存区文件 + M 已修改,但未放入缓存区 +AM 新添加的缓存区文件,但被修改后还未缓存 +MM 修改过的缓存区文件,但被修改后还未缓存 +D 源文件被删除,追踪和暂存区也被删除 + D 源文件被删除,但追踪和暂存区未删除 +忽略文件列表 +.gitignore 文件会被自动追踪 +文件 .gitignore 的格式规范如下: + +所有空行或者以 # 开头的行都会被 Git 忽略。 + +可以使用标准的 glob 模式匹配。 + +匹配模式可以以(/)开头防止递归。 + +匹配模式可以以(/)结尾指定目录。 + +要忽略指定模式以外的文件或目录,可以在模式前加上惊叹号(!)取反。 diff --git a/791684719@qq.com.txt b/791684719@qq.com.txt new file mode 100755 index 0000000000..15cb7a3948 --- /dev/null +++ b/791684719@qq.com.txt @@ -0,0 +1 @@ +谢谢老师! diff --git a/824909419@qq.com b/824909419@qq.com new file mode 100755 index 0000000000..c53ce11d96 --- /dev/null +++ b/824909419@qq.com @@ -0,0 +1,2 @@ +谢谢廖老师,看了您的教程真的是收获很多。 + diff --git a/844323746@qq.com.txt b/844323746@qq.com.txt new file mode 100755 index 0000000000..b57a2b4380 --- /dev/null +++ b/844323746@qq.com.txt @@ -0,0 +1 @@ +Text the puul request \ No newline at end of file diff --git a/892157149@qq.com.txt b/892157149@qq.com.txt new file mode 100644 index 0000000000..ddcc4abd7d --- /dev/null +++ b/892157149@qq.com.txt @@ -0,0 +1 @@ +很感谢廖老师的教程,浅显易懂,受益匪浅,特此测试Pull requests 希望老师让过一下。 diff --git a/917359669@qq.com.txt b/917359669@qq.com.txt new file mode 100755 index 0000000000..78cb80dd3a --- /dev/null +++ b/917359669@qq.com.txt @@ -0,0 +1 @@ +leanrn git pull request,thank you teacher liao diff --git "a/937303399@\345\273\226\351\233\252\345\263\260Git\346\225\231\347\250\213\345\255\246\344\271\240\350\256\260\345\275\225.txt" "b/937303399@\345\273\226\351\233\252\345\263\260Git\346\225\231\347\250\213\345\255\246\344\271\240\350\256\260\345\275\225.txt" new file mode 100755 index 0000000000..1f33370b7b --- /dev/null +++ "b/937303399@\345\273\226\351\233\252\345\263\260Git\346\225\231\347\250\213\345\255\246\344\271\240\350\256\260\345\275\225.txt" @@ -0,0 +1,71 @@ +廖雪峰 Git 教程学习记录 + +mkdir learngit +cd learngit +git init #初始化Git仓库 +** create readme.txt ** echo "line 1 ">> readme.txt +git add readme.txt #添加到暂存空间 +git commit -m "first commit , 'line1'" #提交加备注 +** echo "error line 2" >> readme.txt +git add readme.txt +git status #查看状态 +** have a change. +git reset HEAD readme.txt #将暂存空间内容撤销 +git checkout readme.txt #使用版本库里的内容覆盖工作空间内容,同时达到撤销工作空间内容的目的 +** echo "line2" >> readme.txt +git add readme.txt +git commit -m "commit line 2 " +git rest --hard HEAD^ #回退为上个版本 +git rest --hard (gitID) #回退为指定版本 +git log #查看当前版本及之前版本的id +--pretty=oneline简化显示 +git ref log #查看所有版本的id + + +远程仓库: +github.com 注册 +打开Git bash +$ ssh-keygen -t rsa -C "937203399@qq.com" #创建本机的key +打开github.com 登陆,添加SSH KEYS +切换到本地库 +$ git remote add origin git@github.com:ooran/learngit.git #关联远程仓库 +$ git push -u origin master #将本地库push到远程仓库 ,第一次加-u 关联 之后可以不加 + +克隆: +$ git clone git@github.com:ooran/gitkills.git + +分支: 未提交的内容在工作区,所有分支都可以看到,commit后的内容在对应的分支内,切换只能在对应的分支内看到. +git branch #查看分支 *为当前分支 +git branch #创建分支 +git checkout #切换分支 +git checnout -b #创建并切换分支 +git merge #合并某分支到当前分支 +git branch -d #删除分支 +git branch -D #强行删除分支 + + +分支冲突:合并时显示分支冲突先merge 后修改<<<<分支1 <<<<分支2 之间的冲突内容,然后在提交. 当前分支会比被合并的分支多commit一次 +git log --graph --pretty=oneline --abbrev-commit #查看分支情况 +git merge --no-ff #禁用Fast forward,不删除分支,合并后保留分支 + + + +BUG分支:正在dev分支工作,需要修改bug并提交,应该先把dev当前工作区stash储藏起来.修改完bug提交后在使用 git stash pop恢复dev的内容到工作区. +git stash #储藏当前工作区 +git stash list #查看 +git stash apply #恢复指定内容到工作区,不在stash内删除..stashid通过git stash list查询 +git stash drop #删除 +git stash pop #恢复stash的内容到工作区,并在stash内删除 + + +标签: +git tag #新建标签,默认为HEAD,也可以指定一个commit id. +git tag -a -m "blablablabla" #指定标签信息 +git tag -s -m "blablablabla" #使用PGP签名标签 +git tag #查看所有标签 +git show #查看指定tag的详细内容 +git tag -d #删除tag +git push origin #推送指定标签到远程 +git push origin --tags #推送所有标签到远程 +git tag -d +git push origin :refs/tags/ #从远程删除标签 + diff --git a/96chuck.txt b/96chuck.txt new file mode 100755 index 0000000000..a00a762a1a --- /dev/null +++ b/96chuck.txt @@ -0,0 +1,2 @@ +I learn a lot of about git, and now I want to use it for my projects. +Thank you a lot! pull resquet \ No newline at end of file diff --git a/==apache.md b/==apache.md new file mode 100755 index 0000000000..e67ecb1cae --- /dev/null +++ b/==apache.md @@ -0,0 +1,2 @@ +please input a number +12345 \ No newline at end of file diff --git a/AAAAAAAA.md b/AAAAAAAA.md new file mode 100755 index 0000000000..e69de29bb2 diff --git a/AboutGitignore.txt b/AboutGitignore.txt new file mode 100755 index 0000000000..c7224fcf1f --- /dev/null +++ b/AboutGitignore.txt @@ -0,0 +1,6 @@ +Git的忽略文件.gitignore在win资源管理器下是建立不了的,win会提示必须输入文件名。解决方法很简单,先建立一个文本文档,名字随意,这里以gitignore.txt为例,打开编辑输入想要忽略的文件名或目录名,保存关闭。按住shift键,在当前文件夹空白处右键鼠标,选择在此处打开命令行,输入rename gitignore.txt .gitignore重命名文件即可。 + 还有一个问题值得注意,如上当你已经将文件加入了.gitignore后发现文件变更后还是会提示时,解决方法及原因如下: +因为你已经把改文件加到tracked file里了 用 +git rm --cached filename.suffix(filename.suffix为你的文件名) +把他移除 .gitignore这个文件是用于 untracked 文件的忽略列表 +你用add将文件标记为 tracked 状态 .gitignore就对其无效了 diff --git a/Ahkari.js b/Ahkari.js new file mode 100755 index 0000000000..a503f47809 --- /dev/null +++ b/Ahkari.js @@ -0,0 +1,58 @@ +//喜欢的妹子是web测试 +function girl(){ + this.job = 'webTester' ; + this.name = 'lily' ; +} +//所以从测试转为web前端 +function boy(){ + this.job = 'webDeveloper' ; + this.name = 'ahkari' ; +} +//努力的学着一切 +ahkari.proptype = { + seajs : function(){ + + }, + jquery : function(){ + + }, + javascript : function(){ + + } +} +//也证明了自己, 转岗后几个月就跳槽了, 在二线城市拿着相对不错的薪资 +var Ahkari = new boy() ; +Ahkari.company = a_game_company ; +//现在的公司用的是git版本管理 +function intenetCompany(){ + +} +var a_game_company = new intenetCompany() ; +a_game_company.resourse_control = 'git' ; +//于是我重拾几个月前开始但还没看完的本教程 +Ahkari.prototype.git = function(){ + +} +//我一步步敲出了所有命令, 现在终于完全弄懂了git, 甚至之前半知半解的svn也豁然开朗 +Ahkari.prototype.svn = function(){ + +} +//谢谢, 现在虽然和妹子没什么机会了..... +var Lily = new girl() ; +/* +Lily.boyfriend = 'Ahkari' ; +*/ +//但是还是感谢她能让我找到自己的路. +Ahkari.career_planning = 'javascript Developer' ; +//谢谢你, 芹. +Ahkari.prototype.sayThanks = function(){ + // console.log('Thank you, Qin') ; + alert('Thank you ! Qin') ; +} +//如果最后不能和你在一起, 还是感谢你所给我的无心插柳的一切. +if ( !!Lily.boyfriend && Lily.boyfriend!=='Ahkari' ){ + alert('Thank you for everythings you give me') ; +}else{ + console.log('I will love you until end.') ; + console.log('Thank you my dear.') ; +} \ No newline at end of file diff --git a/Akelio-zhang.txt b/Akelio-zhang.txt new file mode 100755 index 0000000000..2b7a65d433 --- /dev/null +++ b/Akelio-zhang.txt @@ -0,0 +1 @@ +感谢老师教程,Git非常有用! \ No newline at end of file diff --git a/Albert.txt b/Albert.txt new file mode 100755 index 0000000000..f35c6a21f1 --- /dev/null +++ b/Albert.txt @@ -0,0 +1 @@ +最近发现git真是强大,学习了一下关于分支的概念,这个或许就是这个分布式模式与svn的集中式模式很大的不同,感谢老师给这样一个机会可以测试一下pull Request! \ No newline at end of file diff --git a/AllSun.txt b/AllSun.txt new file mode 100755 index 0000000000..0b1e39a09a --- /dev/null +++ b/AllSun.txt @@ -0,0 +1 @@ +廖老师真帅,听说这样能接受pull request. diff --git a/Aloklok.txt b/Aloklok.txt new file mode 100755 index 0000000000..ffe0185acb --- /dev/null +++ b/Aloklok.txt @@ -0,0 +1,2 @@ +Thanks a lot. +Worth purchasing the app! \ No newline at end of file diff --git a/AndyRon.md b/AndyRon.md new file mode 100644 index 0000000000..4af4e1db5b --- /dev/null +++ b/AndyRon.md @@ -0,0 +1,180 @@ +[AndyRon](https://github.com/andyRon)学习git笔记 +----------------------- +[图解Git](http://marklodato.github.io/visual-git-guide/index-zh-cn.html) + +## [git简易教程](http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000) +### 简介 +- 诞生 + + 在2002年以前,世界各地的志愿者把源代码文件通过diff的方式发给Linus,然后由Linus本人通过手工方式合并代码! + + Linus坚定地反对CVS和SVN + + 2002年,BitMover公司授权Linux社区免费使用商业的版本控制系统BitKeeper + + 2005年,开发Samba的Andrew试图破解BitKeeper的协议(这么干的其实也不只他一个),被BitMover公司发现了 + + Linus花了两周时间自己用C写了一个分布式版本控制系统,这就是Git!一个月之内,Linux系统的源码已经由Git管理了! + + Github +- 集中式vs分布式 + +### 安装Git +- 安装配置 + + ``` + git config --global user.name "Your Name" + git config --global user.email "email@example.com" + ``` + +### 创建版本库 +- 版本库(repository):一个目录里面的所有文件都可以被Git管理起来,每个文件的修改、删除,Git都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻可以“还原”。 +- 基本操作 +``` +mkdir learngit +cd learngit +git init +git add readme.txt +git commit -m "wrote a readme file" +``` + +### 时光机穿梭 +- 版本回退 + + `git status` 仓库当前的状态 + + `git diff readme.txt ` + + `git commit`就像文件修改到一定程度的时候保存的一个快照,一旦你把文件改乱了,或者误删了文件,还可以从最近的一个commit恢复 + + `git log` 显示从最近到最远的提交日志, `git log --pretty=oneline`查看简洁版。 前一段长字符是**commit id**(版本号,SHA1) + + 回到上一个版本。Git中,**HEAD**表示当前版本,**HEAD^**是上一个版本,**HEAD^^**是上上一个版本,**HEAD~100**是往上一个版本。 + `git reset --hard HEAD^` + + `git reset --hard 38bb72e5a6d0` 回到某个特定版本(不管是未来的还是过去), 版本号不一定完整的 + + `git reflog` 记录每一次命令,可用来查看版本号 +- 工作区和暂存区 + + 工作区(Working Directory):除了隐藏目录.git + + 版本库(Repository):隐藏目录.git + * 暂存区:stage(或者叫index),`git add`添加的暂存区 + * 分支:第一次自动创建一个`mater`分支,以及指向master的一个指针叫HEAD。`git commit`就提交到分支 + ![](http://www.liaoxuefeng.com/files/attachments/001384907702917346729e9afbf4127b6dfbae9207af016000/0) +- 管理修改 + + Git优秀之处:Git跟踪并管理的是修改,而非文件。 + + 什么是修改?比如你新增了一行,这就是一个修改,删除了一行,也是一个修改,更改了某些字符,也是一个修改,删了一些又加了一些,也是一个修改,甚至创建一个新文件,也算一个修改。 + + `git diff HEAD -- readme.txt` 查看工作区和版本库里面最新版本的区别 + + 每次修改,如果不add到暂存区,那就不会加入到commit中。 +- 撤销修改 + + `git checkout -- readme.txt`,把readme.txt文件在工作区的修改全部撤销(让这个文件回到最近一次git commit或git add时的状态),根据readme.txt的是否提交到暂存区分两种情况: + * 一种是readme.txt自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态; + * 一种是readme.txt已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。 + + `git reset HEAD file` 可以把暂存区的修改撤销掉(unstage),重新放回工作区 + * `git reset`命令既可以回退版本,也可以把暂存区的修改回退到工作区。 +- 删除文件 + + `git rm file` 有点类似把文件添加到暂存区,然后 `git commit` + + `git checkout -- test.txt` : 没有commit之前用checkout撤销删除 + + `git checkout`其实是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”。 + +### 远程库 +- 添加远程库 + + 在github上创建远程库`learngit` + + `git remote add origin git@github.com:andyRon/learngit.git` 关联本地库与远程库,`origin`是默认的远程库名 + + `git push -u origin master` 把本地库推送到远程库 + * 由于远程库是空的,我们第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。 + + 分布式版本系统的最大好处之一是在本地工作完全不需要考虑远程库的存在,也就是有没有联网都可以正常工作,而SVN在没有联网的时候是拒绝干活的!当有网络的时候,再把本地提交推送一下就完成了同步,真是太方便了! +- 从远程库克隆 + + `git clone git@github.com:andyRon/gitskills.git` + + `git clone https://github.com/andyRon/gitskills.git` + + Git支持多种协议,包括https,但通过ssh支持的原生git协议速度最快。 + +### 分支管理 +- 在分支干活,干完合并到原来的分支。git的分支很快 +- 创建与合并分支 + + `git checkout -b dev` checkeout加`-b`表示创建分支并切换到此分支,相当于两个命令: + ``` + git branch dev + git checkout dev + ``` + + `git branch` 查看分支,`*`表示当前分支 + + 在dev中修改readme.txt文件并提交 + ``` + git add readme.txt + git commit -m "branch test" + ``` + + `git checkout master` 切换到master分支,刚才的修改消失 + + `git merge dev` 把dev分支合并到当前分支master + + `git branch -d dev` 删除分支 +- 解决冲突 + + `git checkout -b feature1` 建立新分支 + + 修改readme.txt最后一行: `Creating a new branch is quick AND simple.` + + `git add readme.txt ` `git commit -m "AND simple"` + + `git checkout master` + + 修改readme.txt最后一行: `Creating a new branch is quick & simple.` + + `git add readme.txt ` `git commit -m "& simple"` + + `git merge feature1` 合并冲突 + ``` + Auto-merging readme.txt + CONFLICT (content): Merge conflict in readme.txt + Automatic merge failed; fix conflicts and then commit the result. + ``` + + 修改readme.txt: `Creating a new branch is quick and simple.` + + `git add readme.txt ` `git commit -m "conflict fixed"` + + `git log --graph --pretty=oneline --abbrev-commit`, 查看分支合并情况 +- 分支管理策略 + + 普通分支合并是`Fast forward`模式,不生成新的commit,删除分支后,会丢掉分支信息。 + + 强制禁用`Fast forward`模式,Git就会在merge时生成一个新的commit,这样,从分支历史上就可以看出分支信息。 + + `git checkout -b dev` + + 修改readme.txt, `git add readme.txt `, `git commit -m "add merge"`, `git checkout master` + + `git merge --no-ff -m "merge with no-ff" dev` : 合并分支dev到master, `--no-ff`表示禁用`Fast forward`,由于是commit, -m表示commit描述 + + `git log --graph --pretty=oneline --abbrev-commit` 查看分支历史 + + 分支策略(实际开发中原则) + * master分支应该是非常稳定的,也就是仅用来发布新版本,平时不能在上面干活 + * 小伙伴们每个人都在dev分支上干活,每个人都有自己的分支,时不时地往dev分支上合并就可以了 + ![](http://www.liaoxuefeng.com/files/attachments/001384909239390d355eb07d9d64305b6322aaf4edac1e3000/0) + +- Bug分支 + + `git stash` 临时修改其他bug时,把工作目录储存起来 + + 回到`master`分支,并创建修bug的临时分支: `git checkout master`, `git checkout -b issue-101` + + 修改bug后提交, `git add readme.txt`, `git commit -m "fix bug 101"` + + 切换到master分支,并完成合并,最后删除issue-101分支: + ``` + git checkout master + git merge --no-ff -m "merged bug fix 101" issue-101 + git branch -d issue-101 + ``` + + + `git checkout dev` + + `git stash list` 查看所有stash + + `git stash pop` (相当于`git stash apply`+`git stash drop`) : 恢复最新一条stash。当有很多stash,可以通过`git stash apply`加stash的id来恢复指定的stash + +- Feature分支:用于开发新功能 + + `git checkout -b feature-vulcan` + + 开发新功能 `git add vulcan.py`, `git commit -m "add feature vulcan"` + + `git branch -D ` 强制删除分支 + +- 多人协作 + + `git remote` `git remote -v` 查看远程库 + + 推送分支 + * `git push origin master` 把本地master库推送到远程origin库 + * 推送与否: + - master分支是主分支,因此要时刻与远程同步; + - dev分支是开发分支,团队所有成员都需要在上面工作,所以也需要与远程同步; + - bug分支只用于在本地修复bug,就没必要推到远程了,除非老板要看看你每周到底修复了几个bug; + - feature分支是否推到远程,取决于你是否和你的小伙伴合作在上面开发。 + + 抓取分支 + * `git checkout -b dev origin/dev` 创建本地dev分支并关联远程dev分支 + +### 标签管理 +- tag就是一个让人容易记住的有意义的名字,用来替代commit号,它跟某个commit绑在一起 +- 创建标签 + + `git tag ` 打一个新标签,默认标签是打在最新提交的commit上 + + `git tag` 查看所有标签(标签不是按时间顺序列出,而是按字母排序的) + + `git tag ` 对指定commit打标签(`git log --pretty=oneline --abbrev-commit`) + + `git show ` 查看标签信息 + + `git tag -a -m "blablabla..."` 可以指定标签说明 + + `git tag -s -m "blablabla..."` 可以用PGP签名标签 +- 操作标签 + + `git tag -d v0.1` 删除 + + `git push origin v1.0` 推送某个标签到远程 + + `git push origin --tags` 推送所有标签到远程 + + 删除远程标签 + * `git tag -d v0.9` + * `git push origin :refs/tags/v0.9` + +### 自定义Git +- 忽略特殊文件 + + https://github.com/github/gitignore +- 配置别名 + + + + diff --git a/AndyZhang89.txt b/AndyZhang89.txt new file mode 100755 index 0000000000..68dbe387a6 --- /dev/null +++ b/AndyZhang89.txt @@ -0,0 +1 @@ +写的非常好,让我很好的入了门,没想到还体贴的支持PR,爱死,感谢廖雪峰大大!!! \ No newline at end of file diff --git a/Anikacyp.txt b/Anikacyp.txt new file mode 100755 index 0000000000..e0a61a25f0 --- /dev/null +++ b/Anikacyp.txt @@ -0,0 +1,3 @@ +Dear XueFeng: + Thank you very much for your work on your open tutorials! + hope you have a good day! diff --git a/Annabel.txt b/Annabel.txt new file mode 100755 index 0000000000..472ecb0eaf --- /dev/null +++ b/Annabel.txt @@ -0,0 +1 @@ +晴天好心情!Thank you! diff --git a/Annzmy.txt b/Annzmy.txt new file mode 100644 index 0000000000..fcad1f4a5c --- /dev/null +++ b/Annzmy.txt @@ -0,0 +1,2 @@ +http://www.jianshu.com/p/4b3d5ae717ca +真的很有用呢,老师讲的也很幽默风趣,谢谢啦! \ No newline at end of file diff --git a/Antsecvic b/Antsecvic new file mode 100755 index 0000000000..c7d4a7e83e --- /dev/null +++ b/Antsecvic @@ -0,0 +1,4 @@ +很好很强大 +刚开始学 +必须得掌握的技能 +谢谢分享的教程 diff --git a/Aragron.txt b/Aragron.txt new file mode 100755 index 0000000000..c0a5b40722 --- /dev/null +++ b/Aragron.txt @@ -0,0 +1,4 @@ +I am really excited! +I can see soo high quality material in Internet! +Really Thankyou , liao! +It is amazing!!! \ No newline at end of file diff --git a/ArielWorld_github.txt b/ArielWorld_github.txt new file mode 100755 index 0000000000..c457ad54ba --- /dev/null +++ b/ArielWorld_github.txt @@ -0,0 +1 @@ +I still don't know how to pull request. \ No newline at end of file diff --git a/AshanJiangGitNote.md b/AshanJiangGitNote.md new file mode 100755 index 0000000000..36db5197e4 --- /dev/null +++ b/AshanJiangGitNote.md @@ -0,0 +1,66 @@ +1. 创建 + + 从现有仓库克隆 + + `git clone ssh://user@domain.com/repo.git` + + 创建一个新的本地仓库 + + `git init` +2. 本地修改 + + 查看工作目录中文件改动 + + `git status` + + 查看已经追踪的文件的改动 + + `git diff` + + 添加所有改动到下一次提交中 + + `git add .` + + 将一些__file__添加到下一次提交中 + + `git add -p ` + + 对所有追踪的文件进行提交 + + `git commit -a` + + 将缓存区的改动提交 + + `git commit` + + 改变最后一次提交 + + `git commit --amend` + +3. 提交历史 + + 从新到旧显示提交历史 + + `git log` + + 针对某个文件,显示所有的提交改动 + + `git log -p ` + + 显示是谁对文件进行了改动 + + `git blame ` + +4. 分支和标签 + + 显示所有分支 + + `git branch -av` + + 切换到__branch__分支 + + `git checkout branch` + + 创建新分支 + + `git branch ` diff --git a/Asiakala.txt b/Asiakala.txt new file mode 100755 index 0000000000..2b47089329 --- /dev/null +++ b/Asiakala.txt @@ -0,0 +1,6 @@ +Dear JunFeng Liao: + Thanks for you contribution.I find that i have loved you through your website. + You are so kind. + Although i am a boy,but i still love you. + Asiakala + 2016.5.16 diff --git a/AyoCross_ForTry b/AyoCross_ForTry new file mode 100755 index 0000000000..bd8793a10b --- /dev/null +++ b/AyoCross_ForTry @@ -0,0 +1,2 @@ +//hi, Mr Liao +//非常感谢您的辛苦付出,使我们这些JS、Python初学者能够更快速的入门 diff --git a/AyumuAkira.txt b/AyumuAkira.txt new file mode 100755 index 0000000000..5814c2498a --- /dev/null +++ b/AyumuAkira.txt @@ -0,0 +1 @@ +Thanks for sharing very much. \ No newline at end of file diff --git a/BLUE-V.txt b/BLUE-V.txt new file mode 100755 index 0000000000..49cd706aa1 --- /dev/null +++ b/BLUE-V.txt @@ -0,0 +1,2 @@ +thank you liao + - from 白兰度 diff --git a/BaikalYoung.js b/BaikalYoung.js new file mode 100755 index 0000000000..25035373db --- /dev/null +++ b/BaikalYoung.js @@ -0,0 +1,2 @@ +看过的最好、最简洁明了的Git教程,没有之一! +PS:会继续关注廖老师的Python教程。 \ No newline at end of file diff --git a/Best.txt b/Best.txt new file mode 100755 index 0000000000..6d5b02179a --- /dev/null +++ b/Best.txt @@ -0,0 +1,3 @@ +"Helo, word" + + thank you!!! diff --git a/BlueIceQ.txt b/BlueIceQ.txt new file mode 100755 index 0000000000..16165e28b6 --- /dev/null +++ b/BlueIceQ.txt @@ -0,0 +1,2 @@ +廖大大的教程很接地气,很实用,简单易学,容易上手. +希望关于java1.8的教程也快快能够看到. diff --git a/CCHHUANG.txt b/CCHHUANG.txt new file mode 100755 index 0000000000..3721c91f4e --- /dev/null +++ b/CCHHUANG.txt @@ -0,0 +1,60 @@ +廖雪峰官网学习笔记~ + +工作区 -> git add -> 暂存区 -> git commit -> 版本库 -> git push -> 远程仓库 + +版本库HEAD表示当前版本,上一个版本HEAD^,上上一个版本HEAD^^....... + +配置本机git +git config --global user.name "abcd" +git config --global user.email abcd@efgh.com + +git连接自己的github +第一步:创建SSH_key: ssh-keygen -t rsa -C "aaadega@gmail.com", + 创建成功后.ssh文件下的id_rsa是私钥,id_rsa.pub是公钥 +第二步:登陆GitHub,打开“Account settings”,“SSH Keys”页面 +第三步:添加SSH key,用公钥 + +一切从版本库同步到远程的git都有uname和pword操作push +其他都是从本地直接切换操作 + +一定要从自己的账号下clone仓库,这样你才能推送修改。先fork再clone + +git init 初始化此文件夹为版本库 +git add readme.txt 将文件从工作区添加到暂存区 +git checkout -- readme.txt 撤销工作区文件的修改 +git commit -m "this is commit" 将文件从暂存区提交到版本库 +git reset HEAD 从暂存区回退到工作区 +git diff 查看工作区文件修改前后的差异 +git status 查看工作区与暂存区的文件修改状态 +git log 查看提交日志 +git log --pretty=oneline +git reset --hard HEAD^ 回退到上一版本 +git reflog 查看命令历史 +git remote add origin url 为远程Git更名为origin +git push -u origin master 首次推送此次修改 +git push origin master 然后可以不加-u +git clone url 克隆一个远程库到本地 +git branch page 创建新分支 +git checkout page 选择新分支 +git checkout -b page 相当于上面两条一起 +git branch 查看分支 +git merge page 合并分支page到master,checkout到master分支 +git merge page --no-ff -m "plain" 禁用Fast forward +git branch -d[D] page 删除分支page,删除前先切换到master分支[D强行删除] +git push origin :page 删除远程分支page +cat read.txt 查看文件内容(冲突) +git log --graph 查看分支合并情况 +git log --graph --pretty=oneline --abbrev-commit 查看最近分支合并情况 +git stash 隐藏当前工作区 +git stath list 查看隐藏的工作区 +git stash apply stash{0} 恢复隐藏的工作区,不会删除stash +git stash drop 删除stash +git stash pop stash{0} 恢复隐藏的工作区,一并删除stash +git remote -v 查看远程库信息 +git pull 拉取最新分支 +git branch --set-upstream branchName origin/branchName 指定本地与远程之间的链接 +git tag 可以打一个新标签 +git tag 查看所有标签 +git tag name id 打标签 +-a指定标签名,-m指定说明文字 +git show 可以看到说明文字 \ No newline at end of file diff --git a/CHENJuntong.txt b/CHENJuntong.txt new file mode 100755 index 0000000000..040abbe5e9 --- /dev/null +++ b/CHENJuntong.txt @@ -0,0 +1,3 @@ +Dear XueFeng: + Thank you very much for your work on your open tutorials! + hope you have a good day! \ No newline at end of file diff --git a/CHNLiPeng.txt b/CHNLiPeng.txt new file mode 100755 index 0000000000..8cc6840e81 --- /dev/null +++ b/CHNLiPeng.txt @@ -0,0 +1 @@ +add a file diff --git a/CHNLiPeng2.txt b/CHNLiPeng2.txt new file mode 100755 index 0000000000..b9c9acca5f --- /dev/null +++ b/CHNLiPeng2.txt @@ -0,0 +1,2 @@ +another test file + diff --git a/CTextBox.cs b/CTextBox.cs new file mode 100755 index 0000000000..2f4da125fd --- /dev/null +++ b/CTextBox.cs @@ -0,0 +1,135 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Drawing; +using System.Data; +using System.Linq; +using System.Text; +using System.Windows.Forms; +using System.Linq.Expressions; +using Zwj.TEMS.Common; + + +namespace TEMS.Controls +{ + /// + /// 文本框 + /// Author:Wheeky + /// Url:www.zuowenjun.cn + /// + public partial class CTextBox : UserControl,IZwjDefControl + { + [Description("当点击按钮时触发该事件")] + public event EventHandler OnOpen; + + [Description("当值改变时触发该事件")] + public event EventHandler OnValueChange; + + public CTextBox() + { + InitializeComponent(); + this.DispalyOpenButton = false; + textBox1.TextChanged += delegate { RaiseValueChange(); }; + } + + private void RaiseValueChange() + { + if (this.OnValueChange!=null) + { + this.OnValueChange(this, null); + } + } + + [Browsable(true)] + [Description("设置文本框的值")] + public string Value + { + get + { + return textBox1.Text; + } + set + { + textBox1.Text = value; + } + } + + [Browsable(true)] + [Description("设置标签的值")] + public string Label + { + get + { + return label1.Text; + } + set + { + label1.Text = value; + } + } + + [Browsable(true)] + [Description("设置是否显示打开按钮")] + public bool DispalyOpenButton + { + get + { + return button1.Visible; + } + set + { + button1.Visible = value; + textBox1.ReadOnly = button1.Visible; + } + } + + [Browsable(true)] + [Description("设置是否允许多行")] + public bool AllowMultiline + { + get + { + return textBox1.Multiline; + } + set + { + textBox1.Multiline = value; + if (textBox1.Multiline) + { + textBox1.ScrollBars = ScrollBars.Vertical; + } + } + } + + [Browsable(true)] + [Description("设置屏蔽密码的字符")] + public char PasswordChar + { + get + { + return textBox1.PasswordChar; + } + set + { + textBox1.PasswordChar=value; + } + } + + public void ValueFor(Expression> selectField, string fieldValue, bool displayBtn = false, bool allowMultiline=false) where TEntity : class + { + var fieldInfo = General.GetPropertyInfo(selectField); + this.Label = General.GetDisplayName(fieldInfo); + this.Value = fieldValue; + this.DispalyOpenButton = displayBtn; + this.AllowMultiline = allowMultiline; + } + + private void button1_Click(object sender, EventArgs e) + { + if (this.OnOpen != null) + { + this.OnOpen(this, null); + } + } + } +} diff --git a/Can You Readme b/Can You Readme new file mode 100755 index 0000000000..d4a99a2d8a --- /dev/null +++ b/Can You Readme @@ -0,0 +1 @@ +git has get! diff --git a/CandlerDing.txt b/CandlerDing.txt new file mode 100644 index 0000000000..a3e3c6e538 --- /dev/null +++ b/CandlerDing.txt @@ -0,0 +1,95 @@ +1. +$ git config --global user.name "Your Name" +$ git config --global user.email "email@example.com" +mkdir 版本库名字 ——创建版本库(repository) +git init ——把这个目录变成Git可以管理的仓库 +ls –ah ——查看当前版本库隐藏文件 +git add 文件名 ——把文件添加到仓库 +git commit –m “本次提交说明” ——把文件提交到仓库 +git status ——查看仓库当前状态 +git diff ——查看与上次修改的不同 +git log ——显示从最近到最远的提交日志 +git log –pretty=oneline ——显示提交日志简介版 +git reset –hard HEAD^ ——回退到上一个版本 +git reset –hard 想回到的版本的版本号 +git reflog ——查看命令历史,确定回到未来哪个版本 +git diff HEAD -- readme.txt ——查看工作区和版本库里最新版本的区别 +git checkout -- readme.txt ——把readme.txt文件在工作区的修改全部撤销 +一种是readme.txt自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态; +一种是readme.txt已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。 +总之,就是让这个文件回到最近一次git commit或git add时的状态。 +git reset HEAD file ——可以把暂存区的修改撤销掉(unstage),重新放回工作区 + +git rm ——删除一个文件,如果一个文件已经被提交到版本库,那么你永远不用担心误删,但是要小心,你只能恢复文件到最新版本,你会丢失最近一次提交后你修改的内容。 +2.远程仓库 +$ ssh-keygen -t rsa -C youremail@example.com ——创建SSH Key +$git remote add origin git@server-name:path/repo-name.git ——关联一个远程库 +$ git push -u origin master ——第一次推送master分支的所有内容 +$ git push origin master ——推送最新修改 +$ git clone git@github.com:CandlerDing/repo-name.git ——从远程库克隆 +3.分支管理 +git branch ——查看分支 +git branch ——创建分支 +git checkout ——切换分支 +git checkout -b ——创建+切换分支 +git merge ——合并某分支到当前分支 +git branch -d ——删除分支 + + + + +合并分支时,加上--no-ff参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并,而fast forward合并就看不出来曾经做过合并。 + +修复bug时,我们会通过创建新的bug分支进行修复,然后合并,最后删除; +当手头工作没有完成时,先把工作现场git stash一下,然后去修复bug,修复后,再git stash pop,回到工作现场。 + +$ git stash ——有bug后,可以把当前工作现场“储藏”起来,等以后恢复现场后继续工作 +$ git stash list ——工作区是干净的,刚才的工作现场存到哪去了?用git stash list命令看看 +git stash apply ——恢复工作现场,stash内容并不删除 +git stash drop ——删除stash内容 +git stash pop ——恢复现场同时删除stash内容 + +git checkout -b feature ——实验性质,例如添加新功能的分支 +git branch -D ——要丢弃一个没有被合并过的分支,强行删除 +git remote ——查看远程库的信息 +git remote -v ——查看远程库的详细信息 +$ git push origin master ——推送分支,就是把该分支上的所有本地提交推送到远程库。推送时,要指定本地分支,这样,Git就会把该分支推送到远程库对应的远程分支上 +$ git push origin dev ——推送其他分支 + + +因此,多人协作的工作模式通常是这样: + 首先,可以试图用git push origin branch-name推送自己的修改; + 如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并; + 如果合并有冲突,则解决冲突,并在本地提交; + 没有冲突或者解决掉冲突后,再用git push origin branch-name推送就能成功! +如果git pull提示“no tracking information”,则说明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream branch-name origin/branch-name。 +这就是多人协作的工作模式,一旦熟悉了,就非常简单。 + + +4.标签管理 +tag就是一个让人容易记住的有意义的名字,它跟某个commit绑在一起 +git tag ——用于新建一个标签,默认为HEAD,也可以指定一个commit id +git tag -a -m "blablabla..." ——可以指定标签信息 +git tag -s -m "blablabla..." ——可以用PGP签名标签 +git tag ——可以查看所有标签 + +git push origin ——推送一个本地标签 +git push origin –tags ——推送全部未推送过的本地标签 +git tag -d ——删除一个本地标签 +git push origin :refs/tags/ ——删除一个远程标签 + + + + + + + + + + + + + + + + diff --git a/CaptainJe b/CaptainJe new file mode 100755 index 0000000000..6afc056691 --- /dev/null +++ b/CaptainJe @@ -0,0 +1,16 @@ +I'm a new soul +I came to this strange world +Hoping I could learn a bit about how to give and take +But since I came here +I felt the joy and fear +Finding myself making every possible mistakes +Lalalala lalalalalala + +See I'm a young soul in this very strange world +Hoping I could learn a bit about what is true and fake +But why all this hate +Try to communicate +Finding trust and love is not always easy to make +Lalalala lalalalalala + +Wakeup every morning with hope and love for life -- CaptainJe diff --git a/Carl.txt b/Carl.txt new file mode 100755 index 0000000000..71240d3158 --- /dev/null +++ b/Carl.txt @@ -0,0 +1 @@ +My name is Carl. diff --git a/ChanShuYi.txt b/ChanShuYi.txt new file mode 100755 index 0000000000..17f5d64f55 --- /dev/null +++ b/ChanShuYi.txt @@ -0,0 +1,6 @@ +Thanks for your asesome Git Lesson. It help us open the eyes to the open source project world. I use two day's time to learn how to use git through your leasson. I really like your word of your Git Lesson and it's so easy to understand. + +All in all, I hope you have a better life and write more useful and high-qualified lesson. + +Thank you again. +Thank you again. diff --git a/CharlesZqikai.txt b/CharlesZqikai.txt new file mode 100755 index 0000000000..7b45b456fa --- /dev/null +++ b/CharlesZqikai.txt @@ -0,0 +1 @@ +3q Its very good lesson \ No newline at end of file diff --git a/ChenhaoLu b/ChenhaoLu new file mode 100644 index 0000000000..14bf68e458 --- /dev/null +++ b/ChenhaoLu @@ -0,0 +1 @@ +Thank you so much for the fabulous tutorial you provided! I really appreciate it! diff --git a/ChloeQYZ.txt b/ChloeQYZ.txt new file mode 100755 index 0000000000..a15c29a82b --- /dev/null +++ b/ChloeQYZ.txt @@ -0,0 +1,2 @@ +Thank you very much. +Try pull request. \ No newline at end of file diff --git a/Chulvtest.txt b/Chulvtest.txt new file mode 100755 index 0000000000..7adcf97267 --- /dev/null +++ b/Chulvtest.txt @@ -0,0 +1 @@ +ChulvTest \ No newline at end of file diff --git a/ChunleiGuo_pull_request.txt b/ChunleiGuo_pull_request.txt new file mode 100755 index 0000000000..8fc2d66b1f --- /dev/null +++ b/ChunleiGuo_pull_request.txt @@ -0,0 +1,3 @@ +This is a 'pull_request' test from ChunleiGuo, +and I have learnt a lot about Git from Mr Liao. +Thank you! \ No newline at end of file diff --git a/ColinPullTest.txt b/ColinPullTest.txt new file mode 100755 index 0000000000..bc74dab9c8 --- /dev/null +++ b/ColinPullTest.txt @@ -0,0 +1,2 @@ +This is Colin's Txt +This is my code! diff --git a/ContinueCoding.txt b/ContinueCoding.txt new file mode 100755 index 0000000000..c30ac7edb2 --- /dev/null +++ b/ContinueCoding.txt @@ -0,0 +1,5 @@ +GitHub Fork测试! +Git学习心得 + 暂时跟着廖雪峰大神的Git教程学习,虽然是用Git Bash敲命令行, +但没有想象的枯燥,教程浅显易懂,循序渐进,非常有收获!希望在接 +下来的学习中对Git的强大有更好的体会,Fighting!!! \ No newline at end of file diff --git a/CruiseSun.txt b/CruiseSun.txt new file mode 100755 index 0000000000..68ca815c02 --- /dev/null +++ b/CruiseSun.txt @@ -0,0 +1,11 @@ +#感谢: +特别感谢廖雪峰前辈的无私分享! +第一次看到这么走心的教程!喜欢前辈的风格! + +#收获: +这份git教程浅显易懂特别适合入门,看完以后对git的框架和使用方法有了一个基本的了解, +让我可以更清楚地认识到git对我学习的用处,也让我了解到了一个神奇的开源工具与社区 +(骨子里真得爱死了开(gong)源(xiang),知识在共享后会焕发出巨大的价值之光)。 + +#PS: +等我工作后有经济来源,一定要大大赞助以更好地帮助其他同学后续有更好的教程!接力传递! \ No newline at end of file diff --git a/DQB.txt b/DQB.txt new file mode 100755 index 0000000000..e84e147890 --- /dev/null +++ b/DQB.txt @@ -0,0 +1 @@ +非常感谢廖老师~我会好好学习您网站里面的js,python以及git教程,不会辜负您对我们的期望。 \ No newline at end of file diff --git a/DaidongStudio.txt b/DaidongStudio.txt new file mode 100755 index 0000000000..306ac5ae9b --- /dev/null +++ b/DaidongStudio.txt @@ -0,0 +1 @@ +谢谢廖老师! \ No newline at end of file diff --git a/Daniel b/Daniel new file mode 100755 index 0000000000..3722c62071 --- /dev/null +++ b/Daniel @@ -0,0 +1 @@ +Thanks for the amazing git tutorial pages. Wish you all good! diff --git a/DarrencenZ.txt b/DarrencenZ.txt new file mode 100755 index 0000000000..b41c1e7f06 --- /dev/null +++ b/DarrencenZ.txt @@ -0,0 +1,2 @@ +谢谢您的GIT教程,很实用。 +只不过公司目前做代码管理还是基于SVN,由于刚开始实习,还未感受到SVN的不便之处,但是内心认为GIT是趋势,谢谢您的教程. diff --git a/Davidshaw.txt b/Davidshaw.txt new file mode 100755 index 0000000000..1af0fcc3e3 --- /dev/null +++ b/Davidshaw.txt @@ -0,0 +1,2 @@ +Thank you Mr.Liao , I like your Python and Git tutorials. +thank you diff --git a/Demo233.md b/Demo233.md new file mode 100644 index 0000000000..44aeb7a608 --- /dev/null +++ b/Demo233.md @@ -0,0 +1 @@ +感谢老师!很不错的教程! diff --git a/DentistXu.txt b/DentistXu.txt new file mode 100755 index 0000000000..e366eada6a --- /dev/null +++ b/DentistXu.txt @@ -0,0 +1,7 @@ +Very Cool tutorials. Easy to read. Leaned a lot. + +Above is added in master branch. + +Bellow is added in a new branch dev, just for a test. + +michaelliao is a nice person and a very good mentor. diff --git a/Dingshijie.txt b/Dingshijie.txt new file mode 100755 index 0000000000..01bda02be4 --- /dev/null +++ b/Dingshijie.txt @@ -0,0 +1,2 @@ +Thank you for sharing. And i will recommend the web site to others. +Best wishes! diff --git a/Dmicc b/Dmicc new file mode 100755 index 0000000000..710deb8fa4 --- /dev/null +++ b/Dmicc @@ -0,0 +1 @@ +Thanks a lot. diff --git a/Dracula-36.txt b/Dracula-36.txt new file mode 100755 index 0000000000..85a78dd46f --- /dev/null +++ b/Dracula-36.txt @@ -0,0 +1 @@ +It's the second time I've studied the git via your tutor. Thanks very much. diff --git a/DreamChaser.txt b/DreamChaser.txt new file mode 100755 index 0000000000..cabc8de9f9 --- /dev/null +++ b/DreamChaser.txt @@ -0,0 +1,2 @@ +Thank you very much. +From DreamChaserMXF \ No newline at end of file diff --git a/Dreamroute b/Dreamroute new file mode 100755 index 0000000000..3125916331 --- /dev/null +++ b/Dreamroute @@ -0,0 +1,2 @@ +test fork and pull a request +update the test file diff --git a/DwyaneTalk.txt b/DwyaneTalk.txt new file mode 100755 index 0000000000..00d452ce86 --- /dev/null +++ b/DwyaneTalk.txt @@ -0,0 +1,4 @@ +非常感谢老师,通过您这份教程,我对Git有了更加全面的认识,相信这份教程一定会帮助很多人的,支持老师 +PS:刚刚陷入文字编码的坑,原来在bash里新建文件之后,使用vi打开编辑,会以ANSI格式编码…… + +haha diff --git a/Eminvoker.txt b/Eminvoker.txt new file mode 100755 index 0000000000..05f862566d --- /dev/null +++ b/Eminvoker.txt @@ -0,0 +1,3 @@ +不知道用命令行创建的txt符不符合UTF-8编码什么的。 +以前一直觉得Git难学,毕竟英语不好,去看Git官方不容易,不过今天在偶然间发现了廖大神的这把Git教程,努力看了一天,感觉受益匪浅,虽然还在初学阶段,不过感觉通俗易懂(都是老师教程写的好),默默拷贝了一下重点到了本地。 +clone了几次终于成功了,老师,我要pull request!!! diff --git a/Empty.txt b/Empty.txt new file mode 100755 index 0000000000..e69de29bb2 diff --git a/Engineering-Course.txt b/Engineering-Course.txt new file mode 100755 index 0000000000..9f9e5a99aa --- /dev/null +++ b/Engineering-Course.txt @@ -0,0 +1,5 @@ +I'm surprised to find such a good tutorial. +I knew nothing about git before I read it. +But now, I can't wait to work with git. +The turorial is easy to understand. +Thank you very much. \ No newline at end of file diff --git a/ExcaliburZhouPullRequestTest.txt b/ExcaliburZhouPullRequestTest.txt new file mode 100755 index 0000000000..9daeafb986 --- /dev/null +++ b/ExcaliburZhouPullRequestTest.txt @@ -0,0 +1 @@ +test diff --git a/FanCooking.txt b/FanCooking.txt new file mode 100644 index 0000000000..2567cc7af4 --- /dev/null +++ b/FanCooking.txt @@ -0,0 +1,3 @@ +Thanks for Mr.Liao giving us a good chance to study Git. +2016/12/22 +FanCooking. diff --git a/Farb.txt b/Farb.txt new file mode 100755 index 0000000000..ec3ca3890e --- /dev/null +++ b/Farb.txt @@ -0,0 +1,12 @@ +***************Git学习心得******************** + 你好,Michael,很高兴认识你这位大牛!我是一名大四学生, +广州读的大学,现在在杭州实习,来到杭州也是为了追求自己心爱的女孩。 +今天是星期日,不算很冷吧,但我依然坐在床上看着你的Git教程。之前对VCS一点都不了解, +只知道只是个版本控制系统的英文单词,具体怎么用真的找不到入门的好资料,几天在coding.net这个 +网站【类似于中国版的GitHub】的帮助说明中看到了他们推荐了你的教程,这才无意认识了你这个教我Git入门的师傅。 +从早上一直看到现在,还没看完,还差一点点了,但是明天还要早起来上班,所以今晚就写完这个心得就洗洗睡了。 +感觉学到了很多,而且不知道是因为动了脑子还是怎地,今晚胃口大开,吃了好多,一碗面加一盘鸡腿套餐,哈哈! +现在在公司,主管让我用的TortoiseSVN,感觉已经上手了,今天再来学习你的Git感觉还不算很难,也可能是你讲的浅显易懂吧! +好吧,听你的忠告,以后就要Git了,明天就劝主管让他改用Git,还能剩下租用阿里云服务器的费用哈哈!晚安!我给你 +发的pullrequest 你一定要接受哦! +***************Git学习心得******************** \ No newline at end of file diff --git a/Feng.js b/Feng.js new file mode 100755 index 0000000000..60bb6a7d10 --- /dev/null +++ b/Feng.js @@ -0,0 +1 @@ +console.log("重新学了下git基础,感谢"); \ No newline at end of file diff --git a/FollowWang.txt b/FollowWang.txt new file mode 100755 index 0000000000..c71e032b4f --- /dev/null +++ b/FollowWang.txt @@ -0,0 +1 @@ +Thanks for your teaching. diff --git a/Forec.txt b/Forec.txt new file mode 100755 index 0000000000..a9c1b493a2 --- /dev/null +++ b/Forec.txt @@ -0,0 +1,3 @@ +Thank you very much, Mr Liao! +What you wrote in your blog has solved the problems which confused me for a long time. The articles related to Python and Git really gave me a big hand! Best wishes. +马如龙 diff --git a/Fox-Valentin.txt b/Fox-Valentin.txt new file mode 100755 index 0000000000..ea2367088c --- /dev/null +++ b/Fox-Valentin.txt @@ -0,0 +1 @@ +谢谢 廖老师 好人一生平安哈哈 \ No newline at end of file diff --git a/FrankChe.txt b/FrankChe.txt new file mode 100755 index 0000000000..e3f87ccd75 --- /dev/null +++ b/FrankChe.txt @@ -0,0 +1 @@ +Git很有趣,你的教程很棒,尤其是图画的很形象,不看文字光看图就会了。 diff --git a/Frisco22.txt b/Frisco22.txt new file mode 100755 index 0000000000..1c0da959cf --- /dev/null +++ b/Frisco22.txt @@ -0,0 +1 @@ +多谢老师指点哈哈哈哈哈哈 diff --git a/GG-Boy.txt b/GG-Boy.txt new file mode 100755 index 0000000000..000c457ab2 --- /dev/null +++ b/GG-Boy.txt @@ -0,0 +1,5 @@ +花费了两天时间,将这个教程从头看到尾, +跟着动手,不懂得地方多次揣摩学习 +不得不说,好多之前使用git时遇到的不懂得地方在这里都得到了解惑 +真的非常感谢廖老师的教程。谢谢! + diff --git "a/GIT\345\255\246\344\271\240\345\277\203\345\276\227" "b/GIT\345\255\246\344\271\240\345\277\203\345\276\227" new file mode 100644 index 0000000000..88fabe7fe8 --- /dev/null +++ "b/GIT\345\255\246\344\271\240\345\277\203\345\276\227" @@ -0,0 +1 @@ +不知道git关联远程仓库github的时候,可不可以git本地的一个仓库关联多个远程仓库 diff --git a/GakiHo.txt b/GakiHo.txt new file mode 100755 index 0000000000..d0bb609539 --- /dev/null +++ b/GakiHo.txt @@ -0,0 +1 @@ +言简意赅,谢谢! diff --git a/Git learnging b/Git learnging new file mode 100755 index 0000000000..954052f7b4 --- /dev/null +++ b/Git learnging @@ -0,0 +1 @@ +I have already read most the context of the Git,thank Mr Liao very much! diff --git "a/Git \346\200\273\347\273\223" "b/Git \346\200\273\347\273\223" new file mode 100644 index 0000000000..f4c871be2d --- /dev/null +++ "b/Git \346\200\273\347\273\223" @@ -0,0 +1,2 @@ +非常感谢廖老师的Git教程,清晰易懂! +git教程还在整理,后期补充上来,请老师接收我的pull request diff --git a/Git-Hexin.txt b/Git-Hexin.txt new file mode 100755 index 0000000000..9a89f19da4 --- /dev/null +++ b/Git-Hexin.txt @@ -0,0 +1,2 @@ +Test the pull request. +Thanks for your git course. \ No newline at end of file diff --git a/Git.docx b/Git.docx new file mode 100755 index 0000000000..5b1bbff5cb Binary files /dev/null and b/Git.docx differ diff --git a/GitBrochure-from-syy19930112@aliyun.com.txt b/GitBrochure-from-syy19930112@aliyun.com.txt new file mode 100755 index 0000000000..dcec48b3be --- /dev/null +++ b/GitBrochure-from-syy19930112@aliyun.com.txt @@ -0,0 +1,93 @@ +t push origin branch-name推送自己的修改; +2、如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并; +3、如果合并有冲突,则解决冲突,并在本地提交; +4、没有冲突或者解决掉冲突后,再用git push origin branch-name推送就能成功! +5、如果git pull提示“no tracking information”,则说明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream branch-name origin/branch-name。 + + +基本操作 +1、初始化仓库 + git init +2、提交文件到版本库中 + git add filename.txt #添加filename.txt到暂存区 + git commit -m "" #将暂存区的文件提交到仓库中 +3、查看工作区的状态 + git status +4、查看具体修改的内容 + git diff filename.txt +5、查看提交历史,以便确定要回退到哪个版本(--pretty=online参数表示一行显示) + git log <--pretty=oneline> +6、回退版本(在git中HEAD表示当前的版本,如果要回退到上一个版本使用HEAD^;回退到上上版本使用HEAD^^;如果药回退到100个版本之前使用HEAD~100比较方便) + git reset --hard HEAD^ #回退到上一个版本 + git reset --hard HEAD^^ #回退到上上个版本 + git reset --hard HEAD~100 #回退到第一百个版本 + git reset --hard commitid #回退到指定的版本 + git reset --hard filename.txt #将暂存区的修改撤销 +7、看命令历史,以便确定要回到未来的哪个版本 + git reflog +8、查看工作区和版本库里面最新版本的区别 + git diff HEAD -- filename.txt +9、丢弃工作区的修改( + 两种情况: + 第一种是你还没有将修改添加到暂存区,现在撤销修改就会恢复到和版本库一致; + 第二种是你已经将修改提交到暂存区,然后又进行了修改,这时你撤销修改会恢复到最近一次添加到暂存区的状态 + 总之就是使工作区的文件恢复到最近一次commit、add时的状态。 + 暂存区的) + git checkout -- filename.txt #git checkout -- filename.txt 其实是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”。 +10、删除版本库中文件 + git rm filename.txt --> git commint -m "delete filename.txt" +#------------添加远程库---------------- +11、要关联一个远程库 + git remote add origin git@github.com:zhouyuntao/learngit.git +12、第一次推送master分支的所有内容 + git push -u origin master #把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令 +13、本地修改提交至远程 + git push origin master#把本地master分支的最新修改推送至GitHub +#-------------添加远程库---------------- +#-------------从远程库克隆--------------- +14、克隆一个本地库 + git clone git@github.com:zhouyuntao/gitskills.git + #Git支持多种协议,包括https,但通过ssh支持的原生git协议速度最快。 +#-------------从远程库克隆--------------- +#-------------分支---------------------- +15、创建dev分支并切换到dev分支 + git checkout -b dev #git checkout 命令上加上-b参数表示创建并切换,相当于一下两个命令 + git branch dev #创建dev分支 + git checkout dev #切换只dev分支 +16、查看分支 + git branch #git branch 会列出所有的分支,当前分支前面会标一个*号 +17、合并分支 + git merge dev #git merge 默认时Fast forward模式。这种模式下,删除分支后,会丢掉分支信息。 + git merge --no-ff dev -m "" #普通模式合并,会产生commit记录,推荐。 +18、删除分支 + git branch -d dev +19、查看分支合并情况 + git log --graph --pretty=oneline --abbrev-commit +#-------------分支---------------------- +#-------------bug分支-------------- +20、git stash #把当前工作现场“储藏”起来,等以后恢复现场后继续工作 +21、git stash list #列出存储的工作现场 +22、恢复工作现场 + git stash apply#恢复现场,但stash内容并没有删除需要通过 + git stash drop#删除stash内容。当然,你可以使用 + git stash pop#恢复的同时把stash内容也删了,一步到位 + git stash apply stash@{0}#恢复指定的stash +22、删除未合并的分支 + git branch -D feature-001 +22、clone远程库时,默认本地只有master主分支的,如果需要在dev分支上继续修改那么在clone完成后使用 + git checkout -b dev origin/dev#dev分支拉取到本地继续开发 +23、git pull origin dev#拉取dev分支的修改数据 +24、本地分支与远程分支的链接(如果git pull提示“no tracking information”) + git branch --set-upstream branch-name origin/branch-name +25、打标签 + git tag #打标签,默认时打在罪行提交的commit上的 + git tag #将标签打在指定的地方 + git tag -m "" #给标签添加注解 + git tag -a -m "" commitid -s #用私钥签名一个标签 +26、删除标签 + git tag -d +27、git push origin #可以推送一个本地标签; +28、git push origin --tags#可以推送全部未推送过的本地标签; +29、git tag -d 可#以删除一个本地标签; +30、git push origin :refs/tags/#可以删除一个远程标签。 + diff --git a/GitHub-monsterxiao.txt b/GitHub-monsterxiao.txt new file mode 100755 index 0000000000..d774edbaca --- /dev/null +++ b/GitHub-monsterxiao.txt @@ -0,0 +1,2 @@ +thank you very much! +it's an exellent tutorial. \ No newline at end of file diff --git a/GitLearnNote.md b/GitLearnNote.md new file mode 100755 index 0000000000..f746198f8a --- /dev/null +++ b/GitLearnNote.md @@ -0,0 +1,109 @@ +## Note for learn git tool + +> 2016/12/2 +> Chuck + +### 远程仓库 +- 创建SSH key `$ ssh-keygen -t rsa -C "youremail@example.com"` +- 要关联一个远程库,使用命令 `git remote add origin git@server-name:path/repo-name.git` + 1. 关联后,使用命令 `git push -u origin master` 第一次推送 `master` 分支的所有内容 + 2. 此后,每次本地提交后,只要有必要,就可以使用命令 `git push origin master` 推送最新修改 + +### 分支管理 +- 创建并切换分支 + ``` + $ git checkout -b dev + ``` + 等同于以下两行命令 + ``` + $ git branch dev + $ git checkout dev + ``` +- 在dev branch上提交 + ```git + $ git add readme.txt + $ git commit -m "branch test" + ``` +- 现在,dev分支的工作完成,我们就可以切换回master分支: + ``` + $ git checkout master + ``` +- 切换到`master`分支后,合并`dev`分支到`master`分支 + ``` + $ git merge dev + ``` +- 合并完成后,就可以放心地删除dev分支了: + ``` + $ git branch -d dev + ``` + +### 解决冲突 +- 合并不同分支可能会产生冲突,比如修改了同一行内容 + +### 分支策略 +- 首先,仍然创建并切换dev分支: + ``` + $ git checkout -b dev + Switched to a new branch 'dev' + ``` +- 修改readme.txt文件,并提交一个新的commit: + ``` + $ git add readme.txt + $ git commit -m "add merge" + [dev 6224937] add merge + 1 file changed, 1 insertion(+) + ``` +- 现在,我们切换回master: + ``` + $ git checkout master + Switched to branch 'master' + ``` +- 准备合并dev分支,请注意--no-ff参数,表示禁用Fast forward: + ``` + $ git merge --no-ff -m "merge with no-ff" dev + Merge made by the 'recursive' strategy. + readme.txt | 1 + + 1 file changed, 1 insertion(+) + ``` + > 因为本次合并要创建一个新的commit,所以加上-m参数,把commit描述写进去。 +- 合并后,我们用git log看看分支历史: + ``` + $ git log --graph --pretty=oneline --abbrev-commit + * 7825a50 merge with no-ff + |\ + | * 6224937 add merge + |/ + * 59bc1cb conflict fixed + ... + ``` + +### BUG分支 +- Git还提供了一个stash功能,可以把当前工作现场“储藏”起来,等以后恢复现场后继续工作: + ``` + $ git stash + Saved working directory and index state WIP on dev: 6224937 add merge + HEAD is now at 6224937 add merge + ``` +- stash之后,可以checkout到其他分支处理bug,处理完bug切到当前分支,`git stash pop`回到工作现场 + +### 删除未经合并的分支 +- 删除未经合并的分支,会提示删除失败 + ``` + $ git branch -d feature-v + error: The branch 'feature-v' is not fully merged. + If you are sure you want to delete it, run 'git branch -D feature-v'. + ``` + 此时需要使用`git branch -D feature-v`来强制删除 + +### 多人协作 +- 多人协作的工作模式通常是这样: + + - 首先,可以试图用 `git push origin branch-name` 推送自己的修改; + + - 如果推送失败,则因为远程分支比你的本地更新,需要先用 `git pull` 试图合并; + + - 如果合并有冲突,则解决冲突,并在本地提交; + + - 没有冲突或者解决掉冲突后,再用 `git push origin branch-name` 推送就能成功! + + - 如果 `git pull` 提示“no tracking information”,则说明本地分支和远程分支的链接关系没有创建,用命令 `git branch --set-upstream branch-name origin/branch-name` 。 \ No newline at end of file diff --git a/GitNote_01.html b/GitNote_01.html new file mode 100755 index 0000000000..b1f2035ccf --- /dev/null +++ b/GitNote_01.html @@ -0,0 +1,147 @@ + + +Git 01 +
查看是否有安装git
+
在命令行里直接输入 git
+

+
安装Git
+
brew install git
+

+
创建版本库
+
版本库又名仓库,英文名repository,你可以简单理解成一个目录,这个目录里面的所有文件都可以被Git管理起来,而所谓的管理,其实只是跟踪文本文件的改动,比如txt文件,网页,程序代码等(而图片、视频和Microsoft的word文件这些二进制文件只能告诉你大小改变了,不能告诉你发生了哪些变动)。
+
找一个合适的目录,并在终端cd进入,输入指令
+
+
$ git init
+
+
往后文件都在该目录下(或其它子目录下)进行git操作
+

+
第一步:把文件添加到仓库(暂存)
+
+
+
$ git add <file>
+
+
+

+
第二步:把文件提交到仓库
+
+
+
$ git commit -m "wrote a readme file"
+
+
+
-m 后面输入的是本次提交的改动说明,命令执行成功以后会告诉你文件有哪些变动。commit一次可以提交多个文件,所以可以预先add不同的文件。
+

+
查看仓库当前状态
+
+
+
git status
+
+
+
如果文件有变动,会提示什么文件有被修改过(但没有提交),没有执行git add的会显示红色,执行后会显示绿色。
+

+
对比修改前后的文件
+
+
+
$ git diff <file>
+
+
+
若不加后面的文件名,则会对仓库所有文件进行diff对比
+

+

+
+
+

+

+
查看提交记录(以便回退)
+
+
$ git log
+
+
+
+
git log --pretty=oneline
+
+
+
返回的有commit id, author和date,以及commit时附加的说明
+

+

+
版本回退
+
+
+
$ git reset --hard HEAD^
+
+
+
在Git中,Head表示当前版本,上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100。
+

+

+
回退后在返回较新的版本(重返未来)
+
+
+
$ git reset --hard <commit id>
+
+
+
版本号不用写全,前几位就可以了,Git会自动去找,如果忘了commit id的话,可以通过git reflog来查看每一次命令。
+

+

+
+
+

+

+
工作区(Working Directory):就是电脑里看得到的git目录
+
版本库(Repository):隐藏的.git目录,里面存放了称为stage(或者叫index)的暂存区,还有git为我们自动创建的第一个分支master,以及指向master的一个指针,叫head。
+

+
第一步的git add是把文件添加到暂存区
+
第二步的git commit是把暂存区的所有内容提交到当前分支
+

+

+
+
+

+

+
工作区撤销修改
+
+
+
git checkout — <file>
+
+
+
场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout -- file。
+

+

+
暂存区撤销修改
+
+
+
$ git reset HEAD <file>
+
+
+
场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD file,就回到了场景1,第二步按场景1操作。
+

+

+
提交后撤回
+
+
+
$ git reset --hard HEAD^
+
+
+
场景3:已经提交了不合适的修改到版本库时,想要撤销本次提交,可以进行版本回退。(不需要重新commit)
+

+

+
+
+

+
删除文件(工作区)
+
+
rm test.txt
+
+

+

+
要想在版本库里也删除
+
+
$ git rm test.txt
+
+

+

+
(工作区)误删恢复的方法
+
+
git checkout -- test.txt
+
+
如果一个文件已经被提交到版本库,那么你永远不用担心误删,但是要小心,你只能恢复文件到最新版本,你会丢失最近一次提交后你修改的内容。
+

+ \ No newline at end of file diff --git a/GitNote_02.html b/GitNote_02.html new file mode 100755 index 0000000000..0a8856e5d9 --- /dev/null +++ b/GitNote_02.html @@ -0,0 +1,170 @@ + + +Git 02 +
让本地已有仓库关联github的仓库
+
+
+
+
git remote add origin git@github.com:alohac/learngit.git
+
+
+
远程库的名字就是origin,是git默认的叫法。
+
若提示 fatal: remote origin already exists
+
    +
  • 先输入:$ git remote rm origin
  • +
  • 再输入:$ gir remote add origin git@github.com:alohac/learngit.git
  • +
+
+

+

+
+
把本地库内容推送到远程
+
+
+
git push origin master
+
$ git push -u origin master 第一次推送
+
+
+
用git push命令,实际上是把当前分支master推送到远程
+
+

+

+
+
把远程仓库克隆到本地
+
+
+
git clone git@github.com:alohac/gitskills.git
+
+
+
如果多人协作开发,那么每个人各自从远程克隆一份就可以了。
+
+

+

+
+
git命令下载github分支代码
+
+
- github默认提供的clone链接是下载master分支的,要想下载其中一个分支的代码,可以输入「git clone -b branch_name http://github...」
+

+

+
+
+

+

+
分支
+
每个人创建属于自己的分支,独立开发,最后一起合并。每次commit,Git都把这些commit串成一条时间线,这条时间线就是一个分支。
+

+
项目一般会有一个主分支,即master分支,进行开发的时候会新建一个dev分支(创建新的分支的时候,工作区的文件没有改变,只是HEAD的指向改变了)。然后每个开发人员再往dev分支上新建属于自己的分支。
+

+

+
查看所有分支
+
$ git branch
+

+

+
创建分支
+
$ git checkout -b dev
+
git checkout加上-b参数表示创建并切换,相当于以下两条命令:
+
    +
  • $ git branch dev(创建分支)
  • +
  • $ git checkout dev(切换分支)
  • +
+

+

+
合并分支(需先切换至master分支)
+
$ git merge dev
+
用于合并指定分支到当前分支
+

+

+
合并完成后,可以删除分支
+
$ git branch -d dev
+
Git鼓励大家使用分支完成某个任务,合并后再删掉分支。
+

+

+
解决冲突
+
如果master分支和新创建分支同时修改文件,并且修改的内容不一样,则会出现合并冲突,需手动修改解决冲突再提交。
+

+

+
--no-ff
+
通常情况下,合并分支会采用Fast forward模式,但这种模式下,删除分支后,会丢掉分支信息。如果强制禁用Fast forward模式,Git会在merge时生成一个新的commit,这样从分支历史上就可以看出分支信息了。
+
$ git merge —no-ff -m”merge with no-ff” dev
+

+

+
分支策略
+
    +
  • master分支是非常稳定的,仅用于发布新版本,平时不能在上面干活
  • +
  • 干活都在dev分支上,到某个时候,比如2.0版本发布时,再把dev分支合并到master上,在master分支发布2.0版本
  • +
  • 协作人员都在dev分支上干活,每个人都有自己的分支,时不时往dev分支上合并就可以了
  • +
+

+

+
+
+

+

+
Bug分支
+
假如现在有一个需要紧急修复的bug,但dev上的工作还没有提交,需要暂时搁置dev上的工作,转而修复bug
+

+
Git提供了stash功能,能将当前工作现场储存起来,等以后恢复现场后继续工作
+
+
git stash
+
+

+
修复bug的时候,先确定在哪个分支出现,然后切换(checkout)到该分支,再从该分支创建临时的分支
+
+
git checkout -b issue-101
+
+

+
把bug修复后(即修改了文件),需要进行add和commit的操作
+
+
git add readme.txt 
+git commit -m "fix bug 101"
+
+

+
然后切换回出问题的分支上(checkout),进行merge操作并把分支删除
+
+
+
git checkout master
+
git merge --no-ff -m "merged bug fix 101" issue-101
+
git branch -d issue-101
+
+
+

+
再切换回原先进行工作的分支(checkout),用来下面的命令查看之前使用过stash的工作现场
+
+
+
git stash list
+
+
+

+
再对指定的stash进行恢复(恢复的同时把stash内容也删掉)
+
+
+
git stash pop
+
or
+
$ git stash apply stash@{0}
+
+
+

+

+

+
+
+

+

+
Feature分支
+
添加一些实验性质的代码,最好新建一个feature分支
+

+
在dev分支下新建一个分支,比如:
+
+
git checkout -b feature-vulcan
+
+

+
add和commit之后,切换回dev分支(checkout),进行merge操作,并删除feature分支。
+

+
测试过,觉得该feature分支不适合在现阶段上,就先不merge,保留着。
+

+
要强行删除分支
+
+
git branch -D feature-vulcan
+
+

+ \ No newline at end of file diff --git a/GitOfHalu126.txt b/GitOfHalu126.txt new file mode 100755 index 0000000000..27529c78d7 --- /dev/null +++ b/GitOfHalu126.txt @@ -0,0 +1,77 @@ +1、git init:初始化一个Git仓库。 +2、添加文件到Git仓库,分两步: + 第一步,使用命令git add ,注意,可反复多次使用,添加多个文件; + 第二部,使用命令git commit -m "提交说明",完成。 +3、git status:打印整个工作区的状态。 +4、git diff :查看修改内容。 +5、git log:查看系统中的历史commit提交记录 + 如:git log 或git log --pretty=oneline + 其中pretty指定打印提交记录内容的格式,可选的值有:oneline,short,medium,full,fuller,email,raw和一些自定义的字符格式。 + 补充: + --graph可以看到分支合并图。 + --abbrev-commit打印简短commit-id。 +6、git reset --hard :将head的值设定为指定的commit_id, + HEAD表示当前版本id, + HEAD^表示上一个版本id, + HEAD^^表示上上一个版本id, + HEAD~100表示上上100个版本id, + 版本id也可以在git log命令中查看,commit就是。 +7、git reflog:记录你的每一次有关head的历史命令记录 +8、工作区(Working Directory):就是当前的工作目录。 + 版本库(Repository):工作区下的隐藏目录.git。 + 暂存区(stage):版本库中的index(或者是stage)文件。 + git add命令就是把文件修改添加到暂存区(stage)中; + git commit命令就是把暂存区的所有内容提交到当前分支中。(如下图) + +9、git checkout -- :把工作区中对filename文件的修改撤销掉 + 这里有两种情况: + 一种是修改后还没放到暂存区(即:还没有使用git add命令),现在撤销修改就是回到和版本库一模一样的状态; + 一种是已经添加到暂存区后,又作了修改,现在撤销修改就是回到添加到暂存区后的状态。 + 总之,就是让这个文件回到最近一次git commit或git add时的状态 + 补充: + git checkout :切换到相应的分支上。 +10、git reset HEAD :把暂存区中对filename的修改撤销掉(此步是把修改从暂存区撤销到工作区,要想撤销工作区的修改,要进一步的使用git checkout -- 命令) + 如果修改已经提交到版本库中了,在没有把本地版本推送到远程的情况下可以使用git reset --hard 命令进行版本回退了。 +11、git rm :在暂存区记录下要删除文件filename,使用git commit命令提交删除申请,从版本库中删除文件。 +12、ssh-keygen -t rsa -C "youremail@example.com":使用自己的邮件在用户主目录下生成SSH key。(要在主目录下运行此命令) + -t 指定加密方式,可以值有:rsa、dsa,默认为:dsa + -C是添加注解comment,可以不是自己的邮件,也可以不要此项。 +13、git remote add origin git@github.com:/<仓库名>.git 将本地仓库与github上的仓库关联起来。 + origin为远程库的名字。 +14、git push -u origin master:将本地库的所有内容推送到远程库上。(只有第一次推送的时候才加上-u) +15、git config --global user.name "用户名":配置缺省的用户名。 +16、git config --global user.email "":配置缺省的email,最好和注册时使用一样的email。 +17、git clone git@github.com:<用户名>/<仓库名>.git:从远程库中克隆版本库到本地。 +18、git branch:查看分支。 + 补充: + git branch --set-upstream branch-name origin/branch-name:创建本机分支与远程分支的链接关系。 +19、git branch :创建分支name。 +20、git checkout :切换到分支name。 +21、git checkout -b :创建并切换到分支name。 +22、git merge :合并name分支到当前分支中。 + 如果合并的时候产生了冲突,git会告诉我们在哪个文件上产生了冲突(git status也会告诉我们冲突的文件),必须手动解决冲突后在提交。 + 补充: + --no-ff参数表示禁止使用Fast forward模式合并,应为本次合并要创建一个新的commit,所以要加入-m,将commit描写写进去。 +23、git branch -d :删除分支name。 + 补充: + git branch -D :强行删除那么分支。 +24、git stash:把当前工作现场储藏到工作栈中(入栈操作)。 +25、git stash list:查看储藏工作现场的栈里的内容。 +26、git stash apply stash@{n}:将工作栈中的第n个工作现场回复出来。 +27、git stash drop:删除工作栈中第一个工作现场。 +28、git stash pop:回复工作现场的同时把相应的内容从工作栈中删除。(出栈操作)。 +29、git remote:查看远程库信息。 + -v:查看远程库详细信息,其中fetch是抓取地址;push是推送地址。 +30、git pull:把别人最新的提交从远程上抓取下来。 +31、git tag [commit-id]:在commit-id处创建一个标签,commit-id默认为HEAD。 + -a tagname -m "blablabla...":指定标签信息。 + -s tagname -m "blablabla..." :可以使用PGP签名标签。 +32、git tag:查看所有标签。 +33、git show :查看标签详细信息。 +34、git tag -d :删除本地标签。 +35、git push origin :refs/tags/tagname:删除一个远程标签。 +36、git push origin origin tagname:推送标签到远程。 +37、git push origin --tags:推送全部标签到远程。 +38、.gitignore文件:忽略特殊文件,https://github.com/github/gitignore。 + +大家辛苦了,comment里面欣赏下美女吧! diff --git a/Git_Commands@pengloo53.md b/Git_Commands@pengloo53.md new file mode 100755 index 0000000000..847adcb3ee --- /dev/null +++ b/Git_Commands@pengloo53.md @@ -0,0 +1,98 @@ +--- + +layout: post +title: "Git 常用命令" + +--- +###学会这些命令,你就可以熟练的使用Git工具了,什么?想精通,那是不可能的。 +####基本上,Git就是以下面的命令顺序学习的。文中笔记是从廖雪峰老师的[Git教程](http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000)中总结出来的,方面查阅命令。详细原理请看[Git教程](http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000) +####1、基础 +- `git config --global user.name "Your Name"`设置你的仓库用户名(用于标识提交者) +- `git config --global user.email "email@example.com"`设置你的仓库邮箱(用于标识提交者) +- `git init` 初始化一个git仓库 +- `git add --all` 添加所有更改的文件 +- `git add filename1` 当然可以指定添加filename1 +- `git commit -m "commit message"` 添加更改的信息,必须要有,不然报错,不建议不加。 +- `git status` 查看git当前状态 +- `git diff filename1` 查看filename1到底修改了哪些内容 +- `git log` 查看最近的提交日志 +- `git log --pretty=oneline` 单行显示提交日志 +- `git reset --hard commitID` 利用`git log`得到的commitID返回版本 +- `git reset --hard HEAD^`回到上一个版本 +- `git reflog` 查看命令的历史,可以找到`git log`看不到的commitID,因为`git log`只显示当前的提交日志,如果你提交了一次,退回版本后又后悔了,就能查看上次提交的commitID +- `git checkout -- filename1` 利用版本库中的版本替换工作区中的文件。功能有2: + - 撤销文件修改,分两种情况: + - 撤销工作区中的修改(没有使用`git add`命令添加到暂存区) + - 撤销暂存区中的修改(添加到了暂存区又做了修改) + - 找回删除的文件 + - 工作区中文件误删了,可以通过此命令从版本库中找回 +- `git reset HEAD filename1` 撤销add,回到工作区 +- `git rm filename1` 删除文件 +- `git remote add origin https://github.com/pengloo53/learngit.git` 将本地库关联到github远程库上 +- `git push -u origin master` 第一次推送的时候要加上`-u`参数,可以将本地库的master分支与远程库的master分支关联起来;下次提交就不需要加`-u`了。 +- `git clone https://github.com/pengloo53/learngit.git` 克隆远程库到本地 + +####2、分支管理 +- `git checkout -b dev`创建dev分支并切换到dev。相当于`git branch dev`、`git checkout dev`两条命令。 +- `git branch`查看当前分支 +- `git merge dev`合并指定分支到当前分支,如,你现在master分支,那么执行命令就将dev分支合并到了master分支上。 +- `git branch -d dev`删除dev分支 +- `git log --graph --pretty=oneline --abbrev-commit`查看分支合并图 +- `git merge --no-ff -m "merge with no-ff" dev`禁用「Fast forward」,也就是保留分支的相关信息。 +- `git stash` 将工作区现场储藏起来,等以后恢复后继续工作。通常用于处理更为着急的任务时,例如:bug。 +- `git stash list` 查看保存的工作现场 +- `git stash apply`恢复工作现场 +- `git stash drop` 删除stash内容 +- `git stash pop` 恢复的同时直接删除stash内容 +- `git stash apply stash@{0}` 恢复指定的工作现场,当你保存了不只一份工作现场时。 +- `git branch -D feature-vulcan` 强行删除分支。用于不需要合并,就地删除的情况。 +- `git remote` 查看远程库的信息,一般返回origin。 +- `git remote -v` 查看远程库的详细信息。 +- `git push origin master` 将本地master分支推送到远程master分支。 + - master分支为主分支,因此要时刻与远程同步; + - dev分支为开发分支,团队成员都需要在上面工作,所以也需要与远程同步; + - bug分支只用于在本地修复bug,没有必要推送到远程; + - feature新功能分支是否推送到远程,取决于你是否和其他人合作在上面开发。 +- `git clone https://github.com/pengloo53/learngit.git` 将远程库克隆到本地,默认只能看到master分支。 +- `git checkout -b dev origin/dev` 创建远程dev分支到本地 +- `git pull` 将远程分支的最新内容抓取下来。 +- `git branch --set-upstream dev origin/dev`将本地dev分支与远程dev分支之间建立链接。 + +#####_多人协作工作模式_ +1. 首先,可以试图用`git push origin branch-name`推送自己的修改; +2. 如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并(如果git pull提示“no tracking information”,则说明本地分支和远程分支的链接关系没有创建,用命令`git branch --set-upstream branch-name origin/branch-name`); +3. 如果合并有冲突,则解决冲突,并在本地提交; +4. 没有冲突或者解决掉冲突后,再用`git push origin branch-name`推送就能成功! + +####3、标签管理 +- `git tag v1.0` 给当前分支打上标签 +- `git tag` 查看所有的标签,按时间顺序列出。 +- `git log --pretty=oneline --abbrev-commit`缩略commitID并单行显示提交信息 +- `git tag v0.9 commitID`通过上一条命令查看commitID,然后打上标签。用于忘记打标签的情况,因为标签其实就是只想某个commitID的指针,默认情况下,标签打在最新的提交上。 +- `git show v0.9` 查看标签信息。 +- `git tag -a v0.1 -m "version 0.1 released" commitID`创建带有说明的标签,`-a`指定标签名,`-m`指定说明文字。 +- `git tag -d v0.1` 删除标签v0.1 +- `git push origin v1.0` 推送标签1.0到远程 +- `git push origin --tags` 推送所有的标签到远程 +- `git push origin :refs/tags/v0.9` 删除远程标签,但是前提是要先在本地删除对应标签。 + +####4、自定义GitHub +- `git config --global color.ui true` 让Git显示颜色 +- `.gitignore`在这个文件里编辑你要忽略的文件,并提交到Git中,就可以忽略特殊文件的检查。如将`*.db`写入`.gitignore`文件中,将忽略所有db文件。可以参考[github收集的所有.gitignore](https://github.com/github/gitignore) +- `git config --global alias.st status`将status的别名设置成st,那么`git st`=`git status`。 +- `git config --global alias.unstage 'reset HEAD'` 那么`git reset HEAD filename`=`git unstage filename` +- `git config --global alias.last 'log -1'` 敲`git last`就显示最后一次提交了。 + +####5、搭建Git服务器 +1. `sudo apt-get install git` 安装Git; +2. `sudo adduser git` 添加Git用户; +3. `sudo git init --bare sample.git` 初始化git仓库; +4. `sudo chown -R git:git sample.git`修改仓库的所属用户为git; +5. 将git用户的信息`git:x:1001:1001:,,,:/home/git:/bin/bash`改成`git:x:1001:1001:,,,:/home/git:/bin/git-shell`,为了禁用shell登录。 +6. `git clone git@server:/director/sample.git` 克隆Git服务器上的仓库 + +_PS. 想方便管理公钥,用[Gitosis](https://github.com/res0nat0r/gitosis);想控制权限,用[Gitolite](https://github.com/sitaramc/gitolite)。_ + + + + diff --git a/Git_lesson1.log b/Git_lesson1.log new file mode 100755 index 0000000000..5b5c57d301 --- /dev/null +++ b/Git_lesson1.log @@ -0,0 +1,49 @@ + +1. 初始化一个Git仓库 +**.git init :初始化repository, 新建一个folder-->进入--> git init. + +2. 添加文件到Git仓库 +**.git add : 可以多次使用,添加多个文件 +**.git commit : 将文件提交到仓库 -m 可以对本次提交做说明,例如: git commit -m "add 1 file". + +3.git status 掌握仓库当前的状态 +例如: + +$ git status +On branch master +Changes not staged for commit: + (use "git add ..." to update what will be committed) + (use "git checkout -- ..." to discard changes in working directory) + + modified: readme.txt + +no changes added to commit (use "git add" and/or "git commit -a") + +4.git diff 查看上次修改的情况 +例如: + +$ git diff readme.txt +diff --git a/readme.txt b/readme.txt +index 0065b6f..5367626 100644 +--- a/readme.txt ++++ b/readme.txt +@@ -1,2 +1,2 @@ +-Git is a version control system. +-Git is a free software. +\ No newline at end of file ++Git is a distributed version control system. ++Git is a free software. + + +5.git log 查看提交日志, 加上 --pretty=oneline 参数,可以让格式更加简单 + ** git log --pretty=oneline + +6.git reset --hard HEAD^ 退回到上一个版本,若是上上一个版本就是 HEAD^^ + ** 如果版本太多,可以写成 HEAD~100 + +7.git rm + **git rm用于删除一个文件 + +8. $ git checkout -- + ** git checkout其实是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”。 + diff --git a/Git_note.txt b/Git_note.txt new file mode 100755 index 0000000000..b5d3296eb3 --- /dev/null +++ b/Git_note.txt @@ -0,0 +1,230 @@ + +初始化一个Git仓库,使用git init命令。 +添加文件到Git仓库,分两步: +第一步,使用命令git add ,注意,可反复多次使用,添加多个文件; +第二步,使用命令git commit,完成。 + +git status命令可以让我们时刻掌握仓库当前的状态 +git diff顾名思义就是查看difference,显示的格式正是Unix通用的diff格式 +提交修改和提交新文件是一样的两步,第一步是git add,第二步是执行git commit,完成。 + +要随时掌握工作区的状态,使用git status命令。 +如果git status告诉你有文件被修改过,用git diff可以查看修改内容。 + +git log命令显示从最近到最远的提交日志 +如果嫌输出信息太多,看得眼花缭乱的,可以试试加上--pretty=oneline参数: git log --pretty=oneline +需要友情提示的是,你看到的一大串类似3628164...882e1e0的是commit id(版本号) + +好了,现在我们启动时光穿梭机,回退到上一个版本,怎么做呢? +首先,Git必须知道当前版本是哪个版本,在Git中,用HEAD表示当前版本,也就是最新的提交版本,上一个版本就是HEAD^, +上上一个版本就是HEAD^^,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100。 + +HEAD指向的版本就是当前版本,因此,Git允许我们在版本的历史之间穿梭,使用命令git reset --hard commit_id。 +穿梭前,用git log可以查看提交历史,以便确定要回退到哪个版本。 +要重返未来,用git reflog查看命令历史,以便确定要回到未来的哪个版本。 + +因为Git跟踪并管理的是修改,而非文件,每次修改,如果不add到暂存区,那就不会加入到commit中 + +如何撤销修改 +场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout -- file。 +场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD file,就回到了场景1,第二步按场景1操作。 +场景3:已经提交了不合适的修改到版本库时,想要撤销本次提交,参考版本回退一节,不过前提是没有推送到远程库。 + +删除文件 +一般情况下,你通常直接在文件管理器中把没用的文件删了,或者用rm命令删了: rm filename +这个时候,Git知道你删除了文件,因此,工作区和版本库就不一致了,git status命令会立刻告诉你哪些文件被删除了 +现在你有两个选择,一是确实要从版本库中删除该文件,那就用命令git rm删掉,并且git commit。 +另一种情况是删错了,因为版本库里还有呢,所以可以很轻松地把误删的文件恢复到最新版本: +git checkout其实是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”。 + +Git的杀手级功能之一:远程仓库 +GItHub 远程仓库 +第1步:创建SSH Key。在用户主目录下,看看有没有.ssh目录,如果有,再看看这个目录下有没有id_rsa和id_rsa.pub这两个文件, +如果已经有了,可直接跳到下一步。如果没有,打开Shell(Windows下打开Git Bash),创建SSH Key: +$ ssh-keygen -t rsa -C "youremail@example.com" +然后一路回车,使用默认值即可 +可以在用户主目录里找到.ssh目录,里面有id_rsa和id_rsa.pub两个文件, +这两个就是SSH Key的秘钥对,id_rsa是私钥,不能泄露出去,id_rsa.pub是公钥,可以放心地告诉任何人。 + +第2步:登陆GitHub,打开“Account settings”,“SSH Keys”页面: +然后,点“Add SSH Key”,填上任意Title,在Key文本框里粘贴id_rsa.pub文件的内容: +点“Add Key”,你就应该看到已经添加的Key +当然,GitHub允许你添加多个Key。假定你有若干电脑,你一会儿在公司提交,一会儿在家里提交 +只要把每台电脑的Key都添加到GitHub,就可以在每台电脑上往GitHub推送了。 + +添加远程仓库: +首先,登陆GitHub,创建一个新的仓库 +关联一个远程库,在本地使用命令git remote add origin git@server-name:path/repo-name.git;//$ git remote add origin git@github.com:LiRongbupt/仓库名.git +关联后,使用命令git push -u origin master第一次推送master分支的所有内容; +此后,每次本地提交后,只要有必要,就可以使用命令git push origin master推送最新修改 + +用远程库克隆: +首先,登陆GitHub,创建一个新的仓库gitskills +我们勾选Initialize this repository with a README,这样GitHub会自动为我们创建一个README.md文件。创建完毕后,可以看到README.md文件 +现在,远程库已经准备好了,下一步是用命令git clone克隆一个本地库: +$ git clone git@github.com:LiRongbupt/gitskills.git +GitHub给出的地址不止一个,还可以用https://github.com/LiRongbupt/gitskills.git这样的地址。实际上,Git支持多种协议,默认的git://使用ssh,但也可以使用https等其他协议。 +使用https除了速度慢以外,还有个最大的麻烦是每次推送都必须输入口令,但是在某些只开放http端口的公司内部就无法使用ssh协议而只能用https。 + +分支管理 +每次提交,Git都把它们串成一条时间线,这条时间线就是一个分支。 +在Git里,主分支,即master分支。HEAD严格来说不是指向提交,而是指向master, +master才是指向提交的,所以,HEAD指向的就是当前分支。 +一开始的时候,master分支是一条线,Git用master指向最新的提交,再用HEAD指向master,就能确定当前分支,以及当前分支的提交点 +每次提交,master分支都会向前移动一步,这样,随着你不断提交,master分支的线也越来越长 +当我们创建新的分支,例如dev时,Git新建了一个指针叫dev,指向master相同的提交,再把HEAD指向dev,就表示当前分支在dev上 +Git创建一个分支很快,因为除了增加一个dev指针,改改HEAD的指向,工作区的文件都没有任何变化! +不过,从现在开始,对工作区的修改和提交就是针对dev分支了,比如新提交一次后,dev指针往前移动一步,而master指针不变 +假如我们在dev上的工作完成了,就可以把dev合并到master上。Git怎么合并呢?最简单的方法,就是直接把master指向dev的当前提交,就完成了合并. +所以Git合并分支也很快!就改改指针,工作区内容也不变! +合并完分支后,甚至可以删除dev分支。删除dev分支就是把dev指针给删掉,删掉后,我们就剩下了一条master分支 + +具体操作: +首先,我们创建dev分支,然后切换到dev分支:$ git checkout -b dev +git checkout命令加上-b参数表示创建并切换,相当于以下两条命令:$ git branch dev $ git checkout dev +用git branch命令查看当前分支:* dev + master +git branch命令会列出所有分支,当前分支前面会标一个*号 +然后,我们就可以在dev分支上正常提交,比如对readme.txt做个修改,加上一行,然后提交: +$ git add readme.txt +$ git commit -m "branch test" +现在,dev分支的工作完成,我们就可以切换回master分支: +$ git checkout master +切换回master分支后,再查看一个readme.txt文件,刚才添加的内容不见了!因为那个提交是在dev分支上,而master分支此刻的提交点并没有变 +现在,我们把dev分支的工作成果合并到master分支上: +$ git merge dev +合并完成后,就可以放心地删除dev分支了: +$ git branch -d dev +因为创建、合并和删除分支非常快,所以Git鼓励你使用分支完成某个任务,合并后再删掉分支,这和直接在master分支上工作效果是一样的,但过程更安全。 +小结: + 查看分支:git branch + 创建分支:git branch + 切换分支:git checkout + 创建+切换分支:git checkout -b + 合并某分支到当前分支:git merge + 删除分支:git branch -d + +解决分支合并过程中的冲突问题: +当在分支和主支上分别对一个文件进行修改后并且都提交,然后进行合并时会发生冲突,这时需要手动解决问题, +此时直接查看文件中的内容,Git用<<<<<<<,=======,>>>>>>>标记出不同分支的内容, +然后手动修改文件中的内容后再次提交,用一下命令查看分支的合并情况 +$ git log --graph --pretty=oneline --abbrev-commit +最后删除分支 + + +分支管理策略: +通常,合并分支时,如果可能,Git会用Fast forward模式,但这种模式下,删除分支后,会丢掉分支信息。 +如果要强制禁用Fast forward模式,Git就会在merge时生成一个新的commit,这样,从分支历史上就可以看出分支信息 +$ git merge --no-ff -m "Information" branch_name +--no-ff参数,表示禁用Fast forward,合并要创建一个新的commit,所以加上-m参数,把commit描述写进去 +在实际开发中,我们应该按照几个基本原则进行分支管理: +首先,master分支应该是非常稳定的,也就是仅用来发布新版本,平时不能在上面干活; +那在哪干活呢?干活都在分支上,也就是说,分支是不稳定的,到某个时候,比如1.0版本发布时,再把分支合并到master上,在master分支发布1.0版本; +你和你的小伙伴们每个人都在分支上干活,每个人都有自己的分支,时不时地往分支上合并就可以了。 +合并分支时,加上--no-ff参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并 + + +bug分支 +修复bug时,我们会通过创建新的bug分支进行修复,然后合并,最后删除; +当手头工作没有完成时,先把工作现场git stash一下,然后去修复bug,修复后,再git stash pop,回到工作现场。 + + +开发一个新功能,最好新建一个分支; +如果要丢弃一个没有被合并过的分支,可以通过git branch -D 强行删除。 + + + +多人协作开发 +多人协作的工作模式通常是这样: +首先,可以试图用git push origin branch-name推送自己的修改; +如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并; +如果合并有冲突,则解决冲突,并在本地提交; +没有冲突或者解决掉冲突后,再用git push origin branch-name推送就能成功! +如果git pull提示“no tracking information”,则说明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream branch-name origin/branch-name。 +这就是多人协作的工作模式,一旦熟悉了,就非常简单。 +小结 +查看远程库信息,使用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的标签虽然是版本库的快照,但其实它就是指向某个commit的指针(跟分支很像对不对?但是分支可以移动,标签不能移动) +所以,创建和删除标签都是瞬间完成的。tag标签就是一个让人容易记住的有意义的名字,它跟某个commit绑在一起。 + +在Git中打标签非常简单,首先,切换到需要打标签的分支上 +git tag 就可以打一个新标签,可以用命令git tag查看所有标签 +默认标签是打在最新提交的commit上的。有时候,如果忘了打标签 +找到历史提交的commit id,然后$ git tag 版本号 commit_id 打上标签 +标签不是按时间顺序列出,而是按字母排序的。可以用git show 查看标签信息 +还可以创建带有说明的标签,用-a指定标签名,-m指定说明文字 +git tag -a 版本号 -m "" id + + +标签的删除操作: +命令git push origin 可以推送一个本地标签; +命令git push origin --tags可以推送全部未推送过的本地标签; +命令git tag -d 可以删除一个本地标签; +命令git push origin :refs/tags/可以删除一个远程标签。 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Git_note_1114.txt b/Git_note_1114.txt new file mode 100755 index 0000000000..78c363c11e --- /dev/null +++ b/Git_note_1114.txt @@ -0,0 +1,2 @@ +多谢廖老师的教程! +Thank you! \ No newline at end of file diff --git a/Githuberzhang.txt b/Githuberzhang.txt new file mode 100755 index 0000000000..b3fb2c95d8 --- /dev/null +++ b/Githuberzhang.txt @@ -0,0 +1,2 @@ +我是HUST计算机专业的学生,学了您的git教程和python3教程,觉得受益匪浅,也 +推荐给身边的同学学了,非常感谢廖老师! diff --git a/GitofMrHamer.txt b/GitofMrHamer.txt new file mode 100755 index 0000000000..c38a69469e --- /dev/null +++ b/GitofMrHamer.txt @@ -0,0 +1,4 @@ +First of all, thank you Mr Liao for this amazing document about git. +I learned git many times, but those document and my stupid always let me down. +But this time, I really understand Git and GitHub, also, Python and JavaScript document also gave me great help. +All in all, thank you! diff --git "a/Git\345\255\246\344\271\240\345\277\203\345\276\227" "b/Git\345\255\246\344\271\240\345\277\203\345\276\227" new file mode 100644 index 0000000000..014885255f --- /dev/null +++ "b/Git\345\255\246\344\271\240\345\277\203\345\276\227" @@ -0,0 +1 @@ +文章浅显易懂,特别适合我们初学者,非常感谢 diff --git "a/Git\345\255\246\344\271\240\346\226\207\346\241\243\344\277\256\346\224\271\345\273\272\350\256\256/your-github-zlccn.md" "b/Git\345\255\246\344\271\240\346\226\207\346\241\243\344\277\256\346\224\271\345\273\272\350\256\256/your-github-zlccn.md" new file mode 100755 index 0000000000..fe671bb4f8 --- /dev/null +++ "b/Git\345\255\246\344\271\240\346\226\207\346\241\243\344\277\256\346\224\271\345\273\272\350\256\256/your-github-zlccn.md" @@ -0,0 +1,55 @@ +# Git教程文档问题修改建议 + +你好,本文为测试文件,并提交一下Git文档建议;拜读大神写的Git教程,引为至今为止看见过的Git圣经,学习过程中发现两个小问题,如果大神能够看见,望采纳修改; + + + + +* * * + +(以下依照原文名词解释,做出的我自己的见解,大神可以看心情是否复制粘贴) + +### 1.使用 checkout 版本回退问题 + +在 [时光机穿梭-删除文件](http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/0013758392816224cafd33c44b4451887cc941e6716805c000) 一章中,若依照原文顺序学习,从 `另一种情况是删错了,因为版本库里还有呢,所以可以很轻松地把误删的文件恢复到最新版本:` 节点开始,执行就会报错; + +在修改提交了版本库之后,是无法直接使用 `checkout` 进行还原,就回退工作区这一问题来讲,不考虑实际用途,是需要分两步来做: + + * 使用 `git reset --hard 版本号` 将版本,从 `版本库` 退回到 `暂存区`; + + * 在使用 `git checkout -- ` 才能将修改从 `暂存区` 退回到 `工作目录`; + + + +在我的理解,整个流程,分三个区域(依照原文名词解释): + +`工作目录`、`暂存区`、`版本库`; + +

提交

+ +从 `工作目录` 提交到 `暂存区` 用 `reset`;从 `暂存区` 提交到 `版本库` 用 `commit`; + +

回退

+ +从 `版本库` 回退覆盖 `暂存区` 用 `reset`;从 `暂存区` 回退覆盖 `工作目录` 用 `checkout -- ` + + +我仔细查看了原文,发现大神并不是写错,而是思维出现跳跃,没有按照顺序操作,直接讲解其他情况的解决办法,以至于读者学习时,如果依照顺序就会报错,照成不必要的误解,望改正; + + + + +* * * + +### 2.分支抓取远程远程库数据问题 + +在 [分支管理-多人协作](http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/0013760174128707b935b0be6fc4fc6ace66c4f15618f8d000) 一章中,若依照原文学习,使用 `git pull` 抓取失败后(原文:`git pull也失败了,原因是没有指定本地dev分支与远程origin/dev分支的链接,根据提示,设置dev和origin/dev的链接:`处),使用 `git branch --set-upstream dev origin/dev` 会报错; + + * 一是 `--set-upstream` 现在 git 已经不推荐,需使用 `--set-upstream-to` (时间:2016.9.22); + + * 二是 `git branch --set-upstream dev origin/dev` 中,添加 `dev` 这个分支有问题没有讲解清楚,如果当前工作区已经在 `dev` 这个分区时,不需要添加,直接执行 `git branch --set-upstream-to origin/dev` 即可,如果当前工作区不在 `dev` 下,则添加;不过 Git 官方文档中有句话 `在切换分区时,尽量保持分支是干净的`,个人觉得不推荐抓取非当前工作区下的文件; + + +* * * + +最后,希望大神能够多多发布一下新的文章,提供我们学习,再次感谢大神能够分享这么棒的教程! diff --git "a/Git\345\255\246\344\271\240\347\254\224\350\256\260-Selphia/Git-Logo-2Color.png" "b/Git\345\255\246\344\271\240\347\254\224\350\256\260-Selphia/Git-Logo-2Color.png" new file mode 100644 index 0000000000..18c5b29d78 Binary files /dev/null and "b/Git\345\255\246\344\271\240\347\254\224\350\256\260-Selphia/Git-Logo-2Color.png" differ diff --git "a/Git\345\255\246\344\271\240\347\254\224\350\256\260-Selphia/GitHub" "b/Git\345\255\246\344\271\240\347\254\224\350\256\260-Selphia/GitHub" new file mode 100644 index 0000000000..ea210ebca1 --- /dev/null +++ "b/Git\345\255\246\344\271\240\347\254\224\350\256\260-Selphia/GitHub" @@ -0,0 +1,56 @@ +创建SSH Key +$ ssh-keygen -t rsa -C "youremail@example.com" + +id_rsa 私钥,不可泄漏 +id_rsa.pub 公钥 + +将 id_rsa.pub 复制到 https://github.com/settings/keys + +关联一个远程库 +$ git remote add +$ git remote add origin git@server-name:path/repo-name.git + origin 默认的远程库的名字,可以修改 + server-name github.com + path/repo-name github的用户名/项目名 + +从远程仓库中抓取与拉取 +$ git fetch [remote-name] + 访问远程仓库,从中拉取所有还没有的数据 + 会拥有那个远程仓库中所有分支 + +推送更新 +$ git push origin master + origin 远程仓库的默认名称 + master 需要推送的分支名称 + + -u 把本地的master分支内容推送的远程新的master分支 + 并把本地的master分支和远程的master分支关联 + 首次推送可以加-u + +从远程库克隆到本地 +$ git clone + +查看远程仓库 +$ git remote + -v (--verbose),显示对应的克隆地址 + + $ git remote show [remote-name] + 列出远程仓库的 URL 与跟踪分支的信息 + +抓取分支 +$ git pull + +在本地创建和远程分支对应的分支 +$ git checkout -b branch-name origin/branch-name + +关联本地分支和远程分支 +$ git branch --set-upstream branch-name origin/branch-name + 如果git pull提示“no tracking information”,进行本操作 + branch-name 分支名称 + origin/branch-name 远程分支名称 + +远程仓库的重命名 +$ git remote rename + +移除远程仓库 +$ git remote rm diff --git "a/Git\345\255\246\344\271\240\347\254\224\350\256\260-Selphia/README" "b/Git\345\255\246\344\271\240\347\254\224\350\256\260-Selphia/README" new file mode 100644 index 0000000000..8524decd03 --- /dev/null +++ "b/Git\345\255\246\344\271\240\347\254\224\350\256\260-Selphia/README" @@ -0,0 +1,13 @@ +在学习 Git 过程中记录的笔记 + +内容请查阅目录文件:list + +感谢 Linus torvalds 创造了 Git 这个分布式版本控制系统 + +感谢官网的说明文档:https://git-scm.com/book/zh/v1 +虽然看的一脸蒙逼,不是很懂。 +但在对 Git 有一定了解以后,官方文档还是提供了很大帮助 + +感谢廖雪峰老师:http://www.liaoxuefeng.com/ +在没看懂官网说明文档的情况下,廖老师的教程给我提供了很大的帮助 +这份笔记已经 pull request 到廖老师的 GitHub 上 diff --git "a/Git\345\255\246\344\271\240\347\254\224\350\256\260-Selphia/add-keys.py" "b/Git\345\255\246\344\271\240\347\254\224\350\256\260-Selphia/add-keys.py" new file mode 100755 index 0000000000..c3f4cf3cf6 --- /dev/null +++ "b/Git\345\255\246\344\271\240\347\254\224\350\256\260-Selphia/add-keys.py" @@ -0,0 +1,36 @@ +#!/usr/bin/env python3 +# 文件名: add-keys.py +# 描述: 将当前目录内所有密钥文件(*.pub)添加到 authorized_keys 文件中 +# 版本: 1.0 +# 创建时间: 2016年12月22日 +# 修订: None +# 作者: Selphia (sp), admin@factory.moe + +import os +import re +list = os.listdir() + +# 密钥默认名为 id_rsa.pub ,请将 id_rsa 改为 ,避免重复 + +# 确定 *.pub 文件 +def id_rsa(s): + return re.match(".*\.pub",s) != None + +# 读取文件 +def open_id_rsa(file): + f = open(file,'r') + ras = f.read() + global ras + f.close() + +# 写入文件 +def write_id_rsa(line,file='authorized_keys') + f = open(file,'a') + f.write(line) + +for i in list: + if id_rsa(i): + open_id_rsa(i) + write_id_rsa(ras,file='authorized_keys') +# 退出 +exit() diff --git "a/Git\345\255\246\344\271\240\347\254\224\350\256\260-Selphia/add-keys.sh" "b/Git\345\255\246\344\271\240\347\254\224\350\256\260-Selphia/add-keys.sh" new file mode 100755 index 0000000000..97a7f58fbd --- /dev/null +++ "b/Git\345\255\246\344\271\240\347\254\224\350\256\260-Selphia/add-keys.sh" @@ -0,0 +1,28 @@ +#!/bin/bash +# 文件名: add-keys.sh +# 描述: 输入密钥并添加到 authorized_keys 文件中 +# 版本: 1.0 +# 创建时间: 2016年12月22日 +# 修订: None +# 作者: Selphia (sp), admin@factory.moe + +# 检测用户是否为Root +if [ $UID != "0" ] +then + echo "请使用root帐户来执行此程序" + exit 0 +fi + +# 输入密钥 +echo "请输入要添加的密钥 (您的 id_rsa.pub 文件内容) :" +read id_rsa + +echo -e "$id_rsa\n" >> /home/git/.ssh/authorized_keys +if [ $? == '0' ] +then + echo "添加密钥成功" +else + echo "添加密钥失败,请尝试手动添加" +fi + +exit 0 diff --git "a/Git\345\255\246\344\271\240\347\254\224\350\256\260-Selphia/branch" "b/Git\345\255\246\344\271\240\347\254\224\350\256\260-Selphia/branch" new file mode 100644 index 0000000000..68ea47e356 --- /dev/null +++ "b/Git\345\255\246\344\271\240\347\254\224\350\256\260-Selphia/branch" @@ -0,0 +1,35 @@ +分支管理 + +主分支: master + +创建分支 +$ git checkout -b + -b 创建并切换分支等于一下两条命令 + $ git branch 创建分支 + $ git checkout 切换到分支 + +查看分支 +$ git branch + +合并指定分支到当前分支 +$ git merge + --no-ff 用普通模式合并,产生一个新的 merge commit. + 默认使用 Fast forward 模式没有 merge commit. + +删除分支 +$ git branch -d + -d 删除合并后的分支 + -D 强制删除分支 + +暂存当前正在进行的工作 +$ git stash + +查看已暂存的工作 +$ git stash list + +恢复暂存的工作同时把暂存内容删除 +$ git stash pop + 恢复暂存的工作 + $ git stash apply stash@{0} + 将暂存内容删除 + $ git stash drop stash@{0} diff --git "a/Git\345\255\246\344\271\240\347\254\224\350\256\260-Selphia/git-repository.sh" "b/Git\345\255\246\344\271\240\347\254\224\350\256\260-Selphia/git-repository.sh" new file mode 100755 index 0000000000..deff541a2a --- /dev/null +++ "b/Git\345\255\246\344\271\240\347\254\224\350\256\260-Selphia/git-repository.sh" @@ -0,0 +1,31 @@ +#!/bin/bash +# 文件名: git-Repository.sh +# 描述: 用于 Git 创建仓库 +# 版本: 1.0 +# 创建时间: 2016年12月21日 +# 修订: None +# 作者: Selphia (sp), admin@factory.moe + +# 检测用户是否为Root +if [ $UID != "0" ] +then + echo "请使用root帐户来执行此程序" + exit 0 + fi + +# 检测 git 安装 +git --version + +if [ $? != '0' ] +then + bash git-server.sh +fi + +# 仓库名称 +echo '请输入要建立的仓库名称' +read Repository +mkdir /home/git/$Repository.git +chown -R git:git /home/git/$Repository.git +git init --bare --shared /home/git/$Repository.git + +exit 0 diff --git "a/Git\345\255\246\344\271\240\347\254\224\350\256\260-Selphia/git-server.sh" "b/Git\345\255\246\344\271\240\347\254\224\350\256\260-Selphia/git-server.sh" new file mode 100755 index 0000000000..24b2a3ffc6 --- /dev/null +++ "b/Git\345\255\246\344\271\240\347\254\224\350\256\260-Selphia/git-server.sh" @@ -0,0 +1,30 @@ +#!/bin/bash +# 文件名: git-server.sh +# 描述: 用于 CentOS 7 系统安装 Git 服务器 +# 版本: 1.0 +# 创建时间: 2016年12月21日 +# 修订: None +# 作者: Selphia (sp), admin@factory.moe + +# 检测用户是否为Root +if [ $UID != "0" ] +then + echo "请使用root帐户来执行此程序" + exit 0 + fi + +# 安装 git +yum install git -y + +# 创建用户 +groupadd -r git +useradd git -g git -r -m -s /usr/bin/git-shell + +# 创建证书登录 +# 收集所有需要登录的用户的公钥,就是他们的id_rsa.pub文件 +# 将所有公钥导入到/home/git/.ssh/authorized_keys文件里,一行一个 +mkdir /home/git/.ssh +touch /home/git/.ssh/authorized_keys +chown -R git:git /home/git + +exit 0 diff --git "a/Git\345\255\246\344\271\240\347\254\224\350\256\260-Selphia/install" "b/Git\345\255\246\344\271\240\347\254\224\350\256\260-Selphia/install" new file mode 100644 index 0000000000..d76b932756 --- /dev/null +++ "b/Git\345\255\246\344\271\240\347\254\224\350\256\260-Selphia/install" @@ -0,0 +1,41 @@ + + +It is easiest to install Git on Linux using the preferred package manager of your Linux distribution. + +Debian/Ubuntu +$ apt-get install git + +Fedora +$ yum install git (up to Fedora 21) +$ dnf install git (Fedora 22 and later) + +Gentoo +$ emerge --ask --verbose dev-vcs/git + +Arch Linux +$ pacman -S git + +openSUSE +$ zypper install git + +FreeBSD +$ cd /usr/ports/devel/git +$ make install + +Solaris 9/10/11 (OpenCSW) +$ pkgutil -i git + +Solaris 11 Express +$ pkg install developer/versioning/git + +OpenBSD +$ pkg_add git + +Alpine +$ apk add git + +Mac OS X +https://git-scm.com/download/mac + +Windows +https://git-scm.com/download/win diff --git "a/Git\345\255\246\344\271\240\347\254\224\350\256\260-Selphia/list" "b/Git\345\255\246\344\271\240\347\254\224\350\256\260-Selphia/list" new file mode 100644 index 0000000000..205cee2874 --- /dev/null +++ "b/Git\345\255\246\344\271\240\347\254\224\350\256\260-Selphia/list" @@ -0,0 +1,17 @@ +# 文档及图片 +README 说明文件 +list 目录 +istall 安装 +set 安装完成后设置 +repository 仓库 +principle 原理 +GitHub GitHub 使用 / 远程仓库 +branch 分支 +tag 标签 +Git-Logo-2Color.png GitHub 的 logo + +# 脚本 +git-server.sh 安装并配置 git 服务端 +git-repository.sh 在 git 服务器上创立一个仓库 +add-Keys.py 读取当前目录内所有文件,并添加到 authorized_keys +add-keys.sh 输入密钥,并添加到 authorized_keys diff --git "a/Git\345\255\246\344\271\240\347\254\224\350\256\260-Selphia/principle" "b/Git\345\255\246\344\271\240\347\254\224\350\256\260-Selphia/principle" new file mode 100644 index 0000000000..476fb16a34 --- /dev/null +++ "b/Git\345\255\246\344\271\240\347\254\224\350\256\260-Selphia/principle" @@ -0,0 +1,21 @@ +Git 原理 + +######################################## +# # # +# 工作区 # 仓库 ( 暂存区 | 分支 ) # +# # # +######################################## + + $ git init + 创建一个仓库,所在目录即为工作区 + + $ git add + 将文件从工作区提交到暂存区 + + $ git commit + 将文件从暂存区提交到当前分支 + + $ git commit -a + 跳过暂存区,自动把所有已经跟踪过的文件暂存起来一并提交到当前分支 + + master:主分支 diff --git "a/Git\345\255\246\344\271\240\347\254\224\350\256\260-Selphia/repository" "b/Git\345\255\246\344\271\240\347\254\224\350\256\260-Selphia/repository" new file mode 100644 index 0000000000..4455a27452 --- /dev/null +++ "b/Git\345\255\246\344\271\240\347\254\224\350\256\260-Selphia/repository" @@ -0,0 +1,77 @@ +创建仓库 +$ git init + +对文件进行跟踪 +$ git add + +忽略文件 +创建一个名为 .gitignore 的文件 +列出要忽略的文件模式,例: +*.[oa] # 忽略所有以 .o 或 .a 结尾的文件 +*~ # 所有以波浪符(~)结尾的文件 +GitHub汇总多语言.gitignore文件,地址: https://github.com/github/gitignore + +提交更新 +$ git commit + -m "" 添加更新说明 + -a 跳过使用暂存区域,自动把所有已经跟踪过的文件暂存起来一并提交 + -–amend 修改最后一次的提交 + +检查当前文件状态 +$ git status + -s -s表示short + +查看工作目录中当前文件和暂存区域快照之间的差异(difference) +$ git diff + --staged 或 --cached 已经暂存起来的文件和上次提交时的快照之间的差异 + +查看提交历史 +$ git log + --graph 查看分支合并图(建议使用时加--oneline) + -p 显示每次提交的内容差异 + -–word-diff 可以从单词层面对比,用于书籍、论文等 + --oneline --pretty=oneline --abbrev-commit 的简化用法 + --stat 显示每次更新的文件修改统计信息 + --shortstat 只显示 --stat 中最后的行数修改添加移除统计 + --name-only 仅在提交信息后显示已修改的文件清单。 + --name-status 显示新增、修改、删除的文件清单。 + --abbrev-commit 仅显示 SHA-1 的前几个字符,而非所有的 40 个字符 + -(n) 仅显示最近的 n 条提交 (例:-2) + --since, --after 仅显示指定时间之后的提交 + --until, --before 仅显示指定时间之前的提交 + --author 仅显示指定作者相关的提交 + --committer 仅显示指定提交者相关的提交 + +查看某次历史修改内容 +$ git show + 查看某次commit的修改内容 +$ git show + 查看某标签修改的内容 + +回退到上一个版本 +$ git reset --hard HEAD^ + git reset --hard 回退到某个版本,在 git log 中查看 + +查看命令历史 (确定要回到未来的哪个版本) +$ git reflog + +取消工作区的修改 +$ git checkout -- + +把暂存区的修改回退到工作区 / 取消已经暂存的文件 +$ git reset HEAD + +删除仓库中的文件 +$ git rm + 删除后需要执行 git commit 将删除文件操作更新到仓库中 + + -f 删除之前修改过并且已经放到暂存区域的文件,则必须要用强制删除选项 + + $git rm --cached + 把文件从 Git 仓库中删除(亦即从暂存区域移除) + 但仍然希望保留在当前工作目录中 + +移动文件 +$ git mv + Git 并不显式跟踪文件移动操作 + * 这条命令可以用于文件的改名 diff --git "a/Git\345\255\246\344\271\240\347\254\224\350\256\260-Selphia/set" "b/Git\345\255\246\344\271\240\347\254\224\350\256\260-Selphia/set" new file mode 100644 index 0000000000..b8a5acdccf --- /dev/null +++ "b/Git\345\255\246\344\271\240\347\254\224\350\256\260-Selphia/set" @@ -0,0 +1,13 @@ +安装完成后进行如下设置 + +设置姓名 +$ git config --global user.name "Your Name" + +设置邮箱 +$ git config --global user.email "email@example.com" + +执行 git push 没有指定分支时,只有当前分支会被 push 到你使用 git pull 获取的代码 +$ git config --global push.default simple + +让Git适当的显示颜色 +$ git config --global color.ui true diff --git "a/Git\345\255\246\344\271\240\347\254\224\350\256\260-Selphia/tag" "b/Git\345\255\246\344\271\240\347\254\224\350\256\260-Selphia/tag" new file mode 100644 index 0000000000..7b8b5bb69a --- /dev/null +++ "b/Git\345\255\246\344\271\240\347\254\224\350\256\260-Selphia/tag" @@ -0,0 +1,36 @@ +标签管理 + +创建标签 +$ git tag + + 为历史版本创建标签 + $ git tag + + $git tag -a -m "blablabla..." + -a 指定标签名 + -m 指定说明文字 + + $ git tag -s -m "blablabla..." + -s 使用PGP签名标签,PGP签名的标签是不可伪造 + + $ git tag -d + -d 删除标签 + +查看所有标签 +$ git tag + +推送一个标签到远程仓库 +$ git push origin + +推送全部标签到远程仓库 +$ git push origin --tags + +删除远程标签 +$ git tag -d # 先删除本地标签 +$ git push origin :refs/tags/ # 再删除远程标签 + +查看某次历史修改内容 +$ git show + 查看某次commit的修改内容 +$ git show + 查看某标签修改的内容 diff --git "a/Git\345\255\246\344\271\240\347\254\224\350\256\260-senpeng/.gitignore" "b/Git\345\255\246\344\271\240\347\254\224\350\256\260-senpeng/.gitignore" new file mode 100644 index 0000000000..bc8a670e02 --- /dev/null +++ "b/Git\345\255\246\344\271\240\347\254\224\350\256\260-senpeng/.gitignore" @@ -0,0 +1 @@ +.idea/* \ No newline at end of file diff --git "a/Git\345\255\246\344\271\240\347\254\224\350\256\260-senpeng/GitNote.md" "b/Git\345\255\246\344\271\240\347\254\224\350\256\260-senpeng/GitNote.md" new file mode 100644 index 0000000000..38223113d6 --- /dev/null +++ "b/Git\345\255\246\344\271\240\347\254\224\350\256\260-senpeng/GitNote.md" @@ -0,0 +1,251 @@ +# gitstudy +学习Git笔记 +原文教程:[git 廖雪峰](http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/) + +####安装Git + * msysgit是Windows版的Git,下载地址[https://git-for-windows.github.io/](https://git-for-windows.github.io/),网速慢的可以使用[国内镜像](https://pan.baidu.com/s/1kU5OCOB#list/path=%2Fpub%2Fgit)下载。 + * 安装成功后配置: + * `git config --global user.name "Your Name"` + * `git config --global user.email "email@example.com"` + * 注意`git config`命令的--global参数,用了这个参数,表示你这台机器上所有的Git仓库都会使用这个配置,当然也可以对某个仓库指定不同的用户名和Email地址。 + +####本地仓库 +#####创建版本库 + * `git init` // 初始化一个Git仓库 + * `git add -A` // 加入暂存区 + * `git commit -m "说明"` // 提交到历史版本 + * `git push origin master` // 再推送到远程 + +######小结: + * 初始化一个Git仓库,使用git init命令。 + * 添加文件到Git仓库,分两步: + * 第一步,使用命令git add ,注意,可反复多次使用,添加多个文件; + * 第二步,使用命令git commit,完成。 + * 每次修改,如果不add到暂存区,那就不会加入到commit中。 + +#####查看仓库当前状态 + * `git status` + +######小结: + * 要随时掌握工作区的状态,使用git status命令。 + +#####查看修改内容 + * `git diff ` //查看修改内容 + * `git diff HEAD --` //查看工作区与版本库里面最新版本的区别 + +######小结: + * 如果git status告诉你有文件被修改过,用git diff可以查看修改内容。 + +#####版本回退 + * `git log` //查看提交历史 + * `git reflog` //查看命令历史 + * `git reset --hard HEAD^` //回到上一个版本 + * `git reset --hard (版本号)` //回到指定版本 + * 上一个版本就是HEAD^,上上一个版本就是HEAD^^,往上100个版本 HEAD~100 + +######小结: + * HEAD指向的版本就是当前版本,因此,Git允许我们在版本的历史之间穿梭,使用命令git reset --hard commit_id。 + * 穿梭前,用git log可以查看提交历史,以便确定要回退到哪个版本。 + * 要重返未来,用git reflog查看命令历史,以便确定要回到未来的哪个版本。 + +#####工作区与暂存区 + * Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD。 + * 把文件往Git版本库里添加的时候,是分两步执行的: + * 第一步是用`git add`把文件添加进去,实际上就是把文件修改添加到暂存区; + * 第二步是用`git commit`提交更改,实际上就是把暂存区的所有内容提交到当前分支。 + * 因为我们创建Git版本库时,Git自动为我们创建了唯一一个master分支,所以,`git commit`就是往master分支上提交更改。 + * 可以简单理解为,需要提交的文件修改通通放到暂存区,然后,一次性提交暂存区的所有修改。 + +#####撤销修改 + * `git checkout -- ` //可以丢弃工作区的修改。 + * 命令`git checkout -- ` 意思就是,把file文件在工作区的修改全部撤销,这里有两种情况: + * 一种是file自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态; + * 一种是file已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。 + * 总之,就是让这个文件回到最近一次`git commit`或`git add`时的状态。 + * __`git checkout -- `命令中的--很重要,没有--,就变成了“切换到另一个分支”的命令__。 + * 如果修改完后`git add` 到暂存区,但是在`git commit`之前,可以用`git reset HEAD `把暂存区的修改撤销掉,重新放回工作区。 + * 用`git reset HEAD ` 后再用`git checkout -- ` 可以丢弃掉工作区的修改。 + * `git reset`命令既可以回退版本,也可以把暂存区的修改回退到工作区。当我们用HEAD时,表示最新的版本。 + * 当改错了东西,还从暂存区提交到了版本库时,可以用 *版本回退* 回退到上一个版本。前提是还没有把本地版本推送到远程。 + +######小结: + * 场景1:当改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout -- file。 + * 场景2:当不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD file, + 就回到了场景1,第二步按场景1操作。 + * 场景3:已经提交了不合适的修改到版本库时,想要撤销本次提交,用版本回退,不过前提是没有推送到远程库。 + +#####删除文件 + * 当在文件管理器中把没用的文件删了,或者用rm命令删了时,有两种情况: + * 一种是确实要从版本库中删除该文件,那就用命令 `git rm ` 删掉,并且 `git commit`; + * 一种情况是删错了,因为版本库里还有,所以可以用 `git checkout -- ` 把误删的文件恢复到最新版本。 + * `git checkout`其实是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”。 + +######小结: + * 命令git rm用于删除一个文件。如果一个文件已经被提交到版本库,那么就永远不用担心误删, + 但是要小心,只能恢复文件到最新版本,会丢失**最近一次提交后修改的内容** + +####远程仓库 + * 设置SS加密: + * 第1步:创建SSH Key。查看用户主目录下是否有.ssh目录,如果有,再看看该目录下有没有id_rsa和id_rsa.pub这两个文件,如果已经有了,可直接跳到下一步。 + 如果没有,打开Shell(Windows下打开Git Bash),创建SSH Key:`ssh-keygen -t rsa -C "youremail@example.com"`。id_rsa是私钥,不能泄露出去,id_rsa.pub是公钥,可以放心地告诉任何人。 + * 第2步:登陆GitHub,打开“Settings”,“SSH and GPG keys”页面:点“New SSH key”,填上任意Title,在Key文本框里粘贴id_rsa.pub文件的内容。最后点“Add SSH key”,此时应该就可以看到已经添加的Key了。 + +#####添加远程库(先有本地库,后有远程库) + * 关联远程库:`git remote add origin git@server-name:path/repo-name.git`。 + * 关联后,把本地库的内容推送到远程,用`git push`命令,实际上是把当前分支master推送到远程。 + * 第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支, + 还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。 + * 把本地master分支的最新修改推送至GitHub:`git push origin master`。 + +######小结: + * 要关联一个远程库,使用命令git remote add origin git@server-name:path/repo-name.git; + * 关联后,使用命令git push -u origin master第一次推送master分支的所有内容; + * 此后,每次本地提交后,只要有必要,就可以使用命令git push origin master推送最新修改。 + +#####从远程库克隆(先有远程库,后有本地库) + * 先在GitHub上创建一个新的仓库,然后使用 `git clone git@server-name:path/repo-name.git` 克隆一个本地库。 + * Git支持多种协议,默认的git://使用ssh,但也可以使用https等其他协议. + +######小结: + * 要克隆一个仓库,首先必须知道仓库的地址,然后使用git clone命令克隆。 + * Git支持多种协议,包括https,但通过ssh支持的原生git协议速度最快。 + +####分支管理 +#####创建与合并分支 + * 在Git里HEAD指向主分支master,而master指向提交,所以HEAD指向的就是当前分支。 + * master分支是一条线,Git用master指向最新的提交,再用HEAD指向master,就能确定当前分支,以及当前分支的提交点; + 每次提交,master分支都会向前移动一步,这样,随着不断提交,master分支的线也越来越长。 + * 当创建新的分支时,例如dev,Git新建了一个指针叫dev,指向master相同的提交,再把HEAD指向dev,就表示当前分支在dev上; + 从现在开始,对工作区的修改和提交就是针对dev分支了,比如新提交一次后,dev指针往前移动一步,而master指针不变。 + * Git分支合并最简单的方法,就是直接把master指向dev的当前提交,就完成了合并: + * 1)切换回master分支:`git checkout master`; + * 2)把dev分支的工作成果合并到master分支上:`git merge dev`。 + +######小结: + * 查看分支:git branch //git branch命令会列出所有分支,当前分支前面会标一个*号 + * 创建分支:git branch + * 切换分支:git checkout + * 创建+切换分支:git checkout -b + * 合并指定分支到当前分支:git merge + * 删除分支:git branch -d + +#####解决冲突 + * Git用<<<<<<<,=======,>>>>>>>标记出不同分支的内容。 + * `git log --graph --pretty=oneline --abbrev-commit` //查看分支的合并情况 + +######小结: + * 当Git无法自动合并分支时,就必须首先解决冲突。解决冲突后,再提交,合并完成。 + * 用git log --graph命令可以看到分支合并图。 + +#####分支管理策略 + * 通常,合并分支时,如果可能,Git会用Fast forward模式,但这种模式下,删除分支后,会丢掉分支信息。 + * 如果要强制禁用Fast forward模式,使用命名`git merge --no-ff -m “描述” ` ,Git就会在merge时生成一个新的commit,这样,从分支历史上就可以看出分支信息。 + * 分支管理基本原则: + * 首先,master分支应该是非常稳定的,也就是仅用来发布新版本,平时不能在上面干活; + * 干活都在dev分支上,也就是说,dev分支是不稳定的,到某个时候,比如1.0版本发布时,再把dev分支合并到master上,在master分支发布1.0版本; + * 每个人都在dev分支上干活,每个人都有自己的分支,时不时地往dev分支上合并就可以了。 + +######小结: + * 合并分支时,加上--no-ff参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并, + 而fast forward合并就看不出来曾经做过合并。 + +#####Bug分支 + * 软件开发中,bug就像家常便饭一样。在Git中,由于分支是如此的强大,所以,每个bug都可以通过一个新的临时分支来修复,修复后,合并分支,然后将临时分支删除。 + * 当需要修复bug而分支上的工作还没完成时,可以用`git stash`功能将当前的工作现场“储存”起来,等以后恢复现场后继续工作。 + * 用`git stash list`查看“储存”起来的工作现场列表。 + * 恢复工作现场有两种方法: + * 一时用`git stash apply`恢复,但是恢复后,stash内容并不删除; + * 另一种方式是用`git stash pop`,恢复的同时把stash内容也删了 + * 可以多次stash,恢复的时候,先用`git stash list`查看,然后用`git stash apply stash@{0}`恢复指定的stash + +######小结: + * 修复bug时,我们会通过创建新的bug分支进行修复,然后合并,最后删除; + * 当手头工作没有完成时,先把工作现场git stash一下,然后去修复bug,修复后,再git stash pop,回到工作现场。 + +#####Feature分支 + * 每添加一个新功能,最好新建一个feature分支,在上面开发,完成后,合并,最后,删除该feature分支。 + * `git branch -D ` // 强行删除没有合并过的分支。 + +######小结: + * 开发一个新feature,最好新建一个分支; + * 如果要丢弃一个没有被合并过的分支,可以通过git branch -D 强行删除。 + +#####多人协作 + * 多人协作的工作模式通常是这样: + * 1、首先,可以试图用`git push origin branch-name`推送自己的修改; + * 2、如果推送失败,则因为远程分支比你的本地更新,需要先用`git pull`试图合并; + * 3、如果合并有冲突,则解决冲突,并在本地提交; + * 4、没有冲突或者解决掉冲突后,再用`git push origin branch-name`推送就能成功! + * 如果`git pull`提示“no tracking information”,则说明本地分支和远程分支的链接关系没有创建,用命令`git branch --set-upstream branch-name origin/branch-name`。 + +######小结: + * 查看远程库信息,使用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,如果有冲突,要先处理冲突。 + +####标签管理 + * 发布一个版本时,我们通常先在版本库中打一个标签(tag),这样,就唯一确定了打标签时刻的版本。 + * 将来无论什么时候,取某个标签的版本,就是把那个打标签的时刻的历史版本取出来。所以,标签也是版本库的一个快照。 + * Git的标签虽然是版本库的快照,但其实它就是指向某个commit的指针。 + +#####创建标签 + * 在Git打标签时,需切换到需要打标签的分支上。 + * `git tag `; // 打一个新标签,默认标签是打在最新提交的commit上的。 + * `git tag ` // 给指定的版本打一个新标签。 + * `git tag` // 查看标签。 + * `git show ` // 查看标签信息。 + * `git tag -a -m "描述" ` // 创建带有说明的标签,用-a指定标签名,-m指定说明文字。 + * `git tag -s -m "描述" ` // 通过-s用私钥签名一个标签。签名采用PGP签名,因此,必须首先安装gpg(GnuPG),如果没有找到gpg,或者没有gpg密钥对,就会报错 + +######小结: + * 命令git tag 用于新建一个标签,默认为HEAD,也可以指定一个commit id; + * git tag -a -m "..." 可以指定标签信息; + * git tag -s -m "..." 可以用PGP签名标签; + * 命令git tag可以查看所有标签; + * 命令git show 可以查看标签信息。 + +#####操作标签 + * `git tag -d ` //删除标签,创建的标签都只存储在本地,不会自动推送到远程。所以,打错的标签可以在本地安全删除。 + * `git push origin ` //推送某个标签到远程。 + * `git push origin --tags` //一次性推送全部尚未推送到远程的本地标签。 + * 如果标签已经推送到远程,要删除远程标签,分两步: + * 1、先从本地删除:`git tag -d `; + * 2、从远程删除。删除命令也是push,格式:`git push origin :refs/tags/`。 + +######小结: + * 命令git push origin 可以推送一个本地标签; + * 命令git push origin --tags可以推送全部未推送过的本地标签; + * 命令git tag -d 可以删除一个本地标签; + * 命令git push origin :refs/tags/可以删除一个远程标签,需先删除本地标签。 + +####使用GitHub + * 在GitHub上,可以任意Fork开源仓库; + * 自己拥有Fork后的仓库的读写权限; + * 可以推送pull request给官方仓库来贡献代码。 + +####自定义Git +#####忽略特殊文件 + * 在Git工作区的根目录下创建一个特殊的.gitignore文件,然后把要忽略的文件名填进去,Git就会自动忽略这些文件。 + * GitHub已有的各种配置文件,只需要组合一下就可以使用了。在线浏览:[https://github.com/github/gitignore](https://github.com/github/gitignore)。 + * 忽略文件的原则是: + * 1.忽略操作系统自动生成的文件,比如缩略图等; + * 2.忽略编译生成的中间文件、可执行文件等,也就是如果一个文件是通过另一个文件自动生成的,那自动生成的文件就没必要放进版本库,比如Java编译产生的.class文件; + * 3.忽略你自己的带有敏感信息的配置文件,比如存放口令的配置文件。 + * 当想添加文件到Git,却被.gitignore忽略,添加不了时,可以用 `git add -f ` 强制添加。 + * `git check-ignore -v ` //查看.gitignore里那条规则过滤了该文件。 + +######小结: + * 忽略某些文件时,需要编写.gitignore; + * .gitignore文件本身要放到版本库里,并且可以对.gitignore做版本管理。 + +#####配置别名 + * `git config --global alias.<别名> <原操作>` //例:`git config --global alias.st status`配置完后,敲 `git st` 就相当于`git status`。 + * --global参数是全局参数,也就是这些命令在这台电脑的所有Git仓库下都有用。 + * 配置Git的时候,加上--global是针对当前用户起作用的,如果不加,那只针对当前的仓库起作用。 + * 每个仓库的Git配置文件都放在.git/config文件中;而当前用户的Git配置文件放在用户主目录下的一个隐藏文件.gitconfig中。 + +
+
\ No newline at end of file diff --git "a/Git\345\255\246\344\271\240\347\254\224\350\256\260-senpeng/README.md" "b/Git\345\255\246\344\271\240\347\254\224\350\256\260-senpeng/README.md" new file mode 100644 index 0000000000..ee5d3db5a5 --- /dev/null +++ "b/Git\345\255\246\344\271\240\347\254\224\350\256\260-senpeng/README.md" @@ -0,0 +1,2 @@ +##感谢廖大神的教程,让我系统的学了一遍Git,下面是我学习的一点笔记: +[学习笔记](https://github.com/senpeng/gitstudy/blob/master/README.md) \ No newline at end of file diff --git "a/Git\345\255\246\344\271\240\347\254\224\350\256\260/branch.png" "b/Git\345\255\246\344\271\240\347\254\224\350\256\260/branch.png" new file mode 100755 index 0000000000..aedf9af9bf Binary files /dev/null and "b/Git\345\255\246\344\271\240\347\254\224\350\256\260/branch.png" differ diff --git "a/Git\345\255\246\344\271\240\347\254\224\350\256\260/commitAtNewBranch.png" "b/Git\345\255\246\344\271\240\347\254\224\350\256\260/commitAtNewBranch.png" new file mode 100755 index 0000000000..0ede3462c2 Binary files /dev/null and "b/Git\345\255\246\344\271\240\347\254\224\350\256\260/commitAtNewBranch.png" differ diff --git "a/Git\345\255\246\344\271\240\347\254\224\350\256\260/git.jpeg" "b/Git\345\255\246\344\271\240\347\254\224\350\256\260/git.jpeg" new file mode 100755 index 0000000000..728e6118d9 Binary files /dev/null and "b/Git\345\255\246\344\271\240\347\254\224\350\256\260/git.jpeg" differ diff --git "a/Git\345\255\246\344\271\240\347\254\224\350\256\260/git\345\237\272\346\234\254\345\221\275\344\273\244\351\233\206\345\220\210" "b/Git\345\255\246\344\271\240\347\254\224\350\256\260/git\345\237\272\346\234\254\345\221\275\344\273\244\351\233\206\345\220\210" new file mode 100755 index 0000000000..ddb6c2a6ab --- /dev/null +++ "b/Git\345\255\246\344\271\240\347\254\224\350\256\260/git\345\237\272\346\234\254\345\221\275\344\273\244\351\233\206\345\220\210" @@ -0,0 +1,68 @@ +Mr. Michael's tutorial +linux 命令 +mkdir test (创建文件夹test) +cd test (切换到test目录) +touch a.md (新建a.md文件) + + +git命令 任何操作都需要以 git 命令为开头 +本地操作: +git init 初始化一个本地仓库 新建为 master主分支 +git status 查看当前分支状态 +git add <文件名> 将文件更改添加到分支状态中 相当于文件等待被提交 +git commit -m <"描述信息"> 提交并添加描述信息 +git branch 查看分支 前面带*号的为当前所在分支 +git branch <分支名称> 新建分支 +git checkout <分支名> 切换分支 +git checkout -b <分支名> 新建分支并切换到此分支 +git merge <分支名> 将指定分支名合并到当前分支 一般为切换到主分支使用此命令 +git merge --no-ff -m "提交描述" <分支名> 合并分支并提交 +git branch -d <分支名> 有新建分支,那肯定有删除分支,假如这个分支新建错了,或者a分支的代码已经顺利合并到 master 分支来了,那么a分支没用了,需要删除,这个时候执行 git branch -d a 就可以把a分支删除了 +git branch -D <分支名> 强制删除分支,不管分支是否有未提交合并的代码 + +git tag 查看所有标签 +git tag <标签名> 在当前状态下新建一个标签,可用来当作版本号使用 +git tag -a <标签名称> -m <"标签描述"> <提交id> 在指定的提交状态下新建一个标签 +git show <标签名称> 查看标签的详情 +git tag -d <标签名> 删除标签 +git push origin <标签名> 推送标签到远程仓库 +git push origin --tags 推送所有未推送的标签 +git push origin :refs/tags/<标签名> 删除远程标签,本地要先删除后才可以 + + +git checkout <标签名> 切换到标签名指定的状态 +git diff <文件名> 查看文件修改内容 + +git log 查看提交日志 --pretty=oneline 此参数减少输出信息 穿梭前,用git log可以查看提交历史,以便确定要回退到哪个版本。 +git reflog 要重返未来,用git reflog查看命令历史,以便确定要回到未来的哪个版本。 +git log --graph --pretty=oneline --abbrev-commit 查看分支合并图 +git reset --hard 穿梭到指定提交版本 +HEAD指向的版本就是当前版本,因此,Git允许我们在版本的历史之间穿梭,使用命令git reset --hard commit_id。 + +git checkout -- <文件名> 将指定的文件恢复到最近一次 commit或add操作时候的状态 +git reset HEAD <文件名> 将指定的文件从暂存区的修改撤销掉(unstage),重新放回工作区 +git rm <文件名> 删除指定的文件 + +git stash 把当前工作现场“储藏”起来,等以后恢复现场后继续工作 +git stash list 查看暂存状态 +git stash apply 恢复暂存状态 +git stash drop 删除暂存状态 +git stash pop 恢复并删除暂存状态 +git stash apply 恢复指定的暂存状态 + + +远程仓库操作: +git clone <远程地址> 从远征仓库拷贝过来代码,相当于建立本地分支 +git pull 将最新的提交从远程仓库抓取下来 +git push 将本地修改后的代码提交到远程仓库 +git push <远程仓库名,默认origin> <本地分支名> 将指定的分支推送到远程分支上 + +git remote -v 查看远程仓库 -v 为详细信息 + +git checkout -b <本地支分支名> <远程仓库名,默认origin>/<远程支分支名> 拉取远程主分支下的支分支。。。 +git branch --set-upstream <本地支分支名> <远程仓库名,默认origin>/<远程支分支名> 将本地分支与远程指定的分支关联起来 + +//以下为先有本地库,再建立远程库操作所用的命令 +git remote add origin 本地库与远征库关联 +git push -u origin master 关联后,使用命令第一次推送master分支的所有内容, -u参数为推送当前分支所有内容 + diff --git "a/Git\345\255\246\344\271\240\347\254\224\350\256\260/git\345\255\246\344\271\240\347\254\224\350\256\260.md" "b/Git\345\255\246\344\271\240\347\254\224\350\256\260/git\345\255\246\344\271\240\347\254\224\350\256\260.md" new file mode 100755 index 0000000000..445c12bbbb --- /dev/null +++ "b/Git\345\255\246\344\271\240\347\254\224\350\256\260/git\345\255\246\344\271\240\347\254\224\350\256\260.md" @@ -0,0 +1,294 @@ +#Git笔记 +--- +### 1. 工作区(Working Directory)和版本库(Repository) +
+ + + +**说明:** + + +* 工作区就是创建仓库的文件夹如(learngit文件夹就是一个工作区) +* 版本库就是工作区的隐藏目录`.git`,版本库中有暂存区(stage/index)和分支(master) +* git add 实际是把文件添加到暂存区, git commit 把暂存区的内容提交到当前分支 + + +### 2.创建版本库 + +1. 创建git仓库文件夹,名为:`learngit` + + $ mkdir learngit + +2. 进入leadngit文件夹 + + $ cd learngit +3. 初始化git仓库 + + $ git init + +### 3. 添加文件 +1. 在`leangit`下添加一个`readme.txt`文件,并编辑一些内容 + +2. 添加到仓库暂存区()在暂存区 文件会变绿 + + $ git add readme.txt +3. 提交readme.txt文件到当前分支, -m "提交说明"(只有进行 git add 后 go commit 命令才有效) + + $ git commit -m "add readme.txt" + +### 4. 修改文件 +#### 4.1 当文件在工作区时 +1. 查看readme.txt文件内容 + + $ cat readme.txt +2. 修改readme.txt文件内容 + +3. 查看仓库状态 + + $ git status + +4. 添加到仓库暂存区,并提交到分支 + + $ git add readme.txt + $ git commit -m "modify readme.txt" + +#### 4.2 当文件在暂存区时 +1. 修改文件内容 +2. 添加到仓库暂存区 + + $ git add readme.txt +3. 提交到分支 + + $ git commit -m "modify readme.txt at the stage" + + +### 5. 撤销修改文件(未提交到分支) +#### 5.1 当文件在工作区时 +1. 执行撤销命令 + + $ git checkout -- readme.txt + +#### 5.2 当文件在暂存区时 +1. 令文件回到工作区 + + $ git reset HEAD readme.txt +2. 执行撤销命令 + + $ git checkout -- readme.txt + +### 6. 版本控制(无限次后悔) + +说明:在Git中,`HEAD`表示当前版本,`HEAD^`表示上一版本 `HEAD^^`表示上上一个版本 + +1. 查看提交日志输出(完整版) + + $ git log + +2. 查看提交日志输出(精简版) + + $ git log --pretty=noline + +3. 回到上一版本 + + $ git reset --hard HEAD^ + +4. 回到指定版本(hard 后面添加版本号) + + $ git reset --hard ea34578 + +5. 查看命令历史 + + $ git reflog + + + +### 7. 远程仓库(github) +#### 7.1 添加到远程库 +1. 在github上创建一个名为`learngit`的空仓库 +2. 在本地`learngit`仓库下运行命令 + + $ git remote add origin git@github.com:iphone5solo/learngit.git +3. 把本地内容推送到github远程库上(第一次push 参数带 `-u` 关联远程仓库) + + $ git push -u origin master + +注意:如果在git push -u origin master时出现以下错误,证明电脑没有修改远程仓库的公钥, + + + Permission denied (publickey). + fatal: Could not read from remote repository. + + Please make sure you have the correct access rights + and the repository exists. + +解决方法: + +1. 在github上点击`Edit profile` --> `SSH and GPG keys` --> `new SSH key` 添加SHH公钥 +2. 打开`id_rsa.pub`文件(/Users/iphone5solo/.ssh/id.rsa.pub) +3. 将`id_rsa.pub`文件内容拷贝到key就可以了,title随便填。 + +#### 7.2 从远程库克隆 +1. 在github上创建一个名为`clonegit`的仓库 +2. 使用命令克隆仓库 + + $ git clone git@github.com:iphone5solo/clonegit + +#### 7.3 从远程仓库更新本地仓库(已关联) + + $ git pull origin master + +### 8. 分支管理 +**图文说明:** + +`master`分支是一条线,git用`master`指向最新的提交,在用`HEAD`指向`master`,以此才确定当前分支,和提交点。 + + + +
+**1. 创建分支** + +当我们创建新的分支,例如`newBranch`,git就会新建一个指针`newBranch`,指向`master`相同的提交,再把`HEAD`指向`newBranch`,就表示当前分支在`newBrach`上 + + + +
+**2. 新分支的修改和提交** + +现在对工作区的修改和提交就是针对`newBranch`分支了,比如新提交一次后,`newBranch`指针就向前移动一步,指向最新提交,而`master`指针指向不变。 + + + +
+**3. 分支的合并** + +把`newBranch`合并到`master`上,直接把`master`指向`newBranch`的当前提交,就完成了合并。 + + + +
+**4. 合并完成删除分支** + +删除分支`newBranch`,就剩下一个`master`分支 + + + +
+**5. 查看分支合并图解** + + + + +
+**关于分支的主要命令如下** + +* 查看分支 + + $ git branch +* 创建`newBranch`分支 + + $ git branch newBranch +* 切换`HEAD`指向`newBranch`分支 + + $ git checkout newBranch +* 创建+切换分支 + + $ git checkout -b newBranck +* 合并某分支到当前分支 + + $ git merge newBranch +* 普通删除`newBranch`分支 + + $ git branch -d newBranch + +* 强行删除`newBranch`分支 + + $ git branch -D newBranch + +* 查看分支合并状况 + + $ git log --graph --pretty=oneline --abbrev-commit + +### 9. 藏匿当前未提交的分支 + +如: 当前在修改自己的分支`dev`,突然项目经理要求修复一个bug-07 + +解决方法: + +1. 藏匿当前`dev`分支的工作状态 + + $ git stash +2. 新建一个`bug-07`分支 + + $ git branch -b bug-07 +3. 修复bug并提交,合并`bug-07`到`master`分支 + + $ git commit -m "fix the bug-07" + $ git checkout master + $ git merge --no-ff -m "merge bug-07" bug-07 + +4. 删除`bug-07`分支 + + $ git branch -d bug-07 +5. 查看当前`stash` + + $ git stash list +6. 恢复`dev`分支的工作状态,并删除stash内容 + + $ git stash pop + +### 10. 多人协作 + +* 查看远程库信息 + + $ git remote + + * 详细查看远程信息 + + $ git remote -v + + * 推送分支到远程库 + + $ git remote origin master + + * 抓取远程分支 + + $ git pull origin master + + +### 11. 标签管理 + + * 创建一个标签,默认为`HEAD`当前分支添加标签 + + $ git tag v1.0 + + * 为版本号为`e8b8ef6`添加`v2.0`标签 + + $ git tag v2.0 e8b8ef6 + + * 为版本号为`6cb5a9e`添加带有说明的标签,`-a`指定标签名,`-m`指定说明文字 + + $ git tag -a v3.0 -m "version 0.2 released" 6cb5a9e + + * 根据标签查看指定分支 + + $ git show v0.2 + * 查看所有标签 + + $ git tag + + * 删除`v1.0`标签 + + $ git tag -d v1.0 + + * 把`v0.9`标签推送到远程 + + $ git push origin v0.9 + + * 推送所有尚未推送到远程的本地标签 + + $ git push origin --tags + + * 删除远程标签, 先删除本地标签,再删除远程标签 + + $ git tag -d v0.9 + $ git push origin :refs/tags/v0.9 \ No newline at end of file diff --git "a/Git\345\255\246\344\271\240\347\254\224\350\256\260/master.png" "b/Git\345\255\246\344\271\240\347\254\224\350\256\260/master.png" new file mode 100755 index 0000000000..f4cb07bbef Binary files /dev/null and "b/Git\345\255\246\344\271\240\347\254\224\350\256\260/master.png" differ diff --git "a/Git\345\255\246\344\271\240\347\254\224\350\256\260/masterBranch.png" "b/Git\345\255\246\344\271\240\347\254\224\350\256\260/masterBranch.png" new file mode 100755 index 0000000000..a1c08a3848 Binary files /dev/null and "b/Git\345\255\246\344\271\240\347\254\224\350\256\260/masterBranch.png" differ diff --git "a/Git\345\255\246\344\271\240\347\254\224\350\256\260/merge.png" "b/Git\345\255\246\344\271\240\347\254\224\350\256\260/merge.png" new file mode 100755 index 0000000000..1a4e44f067 Binary files /dev/null and "b/Git\345\255\246\344\271\240\347\254\224\350\256\260/merge.png" differ diff --git "a/Git\345\255\246\344\271\240\347\254\224\350\256\260/newBranch.png" "b/Git\345\255\246\344\271\240\347\254\224\350\256\260/newBranch.png" new file mode 100755 index 0000000000..76b0df8827 Binary files /dev/null and "b/Git\345\255\246\344\271\240\347\254\224\350\256\260/newBranch.png" differ diff --git "a/Git\345\255\246\344\271\240\347\254\224\350\256\260/test.txt" "b/Git\345\255\246\344\271\240\347\254\224\350\256\260/test.txt" new file mode 100755 index 0000000000..eb8411a89f --- /dev/null +++ "b/Git\345\255\246\344\271\240\347\254\224\350\256\260/test.txt" @@ -0,0 +1 @@ +test pull requtest \ No newline at end of file diff --git "a/Git\345\255\246\344\271\240\347\254\224\350\256\260/zkq_git_note.php" "b/Git\345\255\246\344\271\240\347\254\224\350\256\260/zkq_git_note.php" new file mode 100755 index 0000000000..05c0de1a8b --- /dev/null +++ "b/Git\345\255\246\344\271\240\347\254\224\350\256\260/zkq_git_note.php" @@ -0,0 +1,99 @@ + +相关链接: +1.git速成 +http://stormzhang.com/github/2016/05/30/learn-github-fromzero3/ +2.解决身份问题不能提交的: +http://www.mamicode.com/info-detail-595153.html +3.廖雪峰Git教程 +http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000 + +一,搜索并下载git +https://git-for-windows.github.io/ 或百度 +国内镜像:http://pan.baidu.com/s/1skFLrMt#path=%252Fpub%252Fgit + +二,设置git +1,将git,??????/git/bin/路径加入系统环境变量 + +2,设置用户名和邮箱, + git config user.email "这个是邮箱" + git config user.name "你的名字" + $ git config --global user.name "Your Name" + $ git config --global user.email "email@example.com" + //--global 用了这个参数,表示你这台机器上所有的Git仓库都会使用这个配置,当然也可以对某个仓库指定不同的用户名和Email地址。 + +3,创建仓库目录,并进入 cd + +4,初始化git,查看文件夹状态 + git init + git status + +5,添加,删除,提交文件 + git add a.txt //将文件加入待提交缓存 + git rm a.txt //删除文件 + git commit -m '这是提交文件的注释' + +6,撤销修改 + git checkout -- 文件名称 //丢弃工作区的修改内容,让这个文件回到最近一次git commit或git add时的状态 + git reset HEAD 文件名称 //把暂存区的修改撤销掉(unstage),重新放回工作区,让这个文件回到最近一次git commit + +7,查看文件修改内容,提交信息,工作区和版本库区别 + git diff //查看被修改文件的内容 + git diff HEAD -- 文件名 //查看工作区和版本库里面最新版本的区别 + git log //查看提交信息 + git log --pretty=oneline //查看提交信息,简化版 + +8,版本回退 + git reset --hard HEAD^ //返回上个版本 + git reset --hard HEAD^^ //返回上上个版本 + git reset --hard HEAD~100 //返回前100个版本 + git reset --hard commit_id //返回commit_id版本,commit_id为commit的版本号,版本号可通过 git log 或 git reflog 查看 + git reflog //查看命令历史,可以找到各版本的版本号commit_id + +9,查看分支,添加分支,删除分支,合并分支,切换分支 + git branch //查看所有分支 + git branch a //创建分支a + git branch -d a //删除分支a,未合并时不会被删除 + git branch -D a //删除分支a,强制删除 + git checkout a //切换分支到a + git checkout -b a //创建并切换到分支a + git merge a //必须先切换到主分支,合并a分支到当前分支 + git log --graph //查看分支合并图 + +10.创建,切换标签 + git tag //查看已创建的标签 + git tag v1.0 //创建标签v1.0 + git tag v0.9 6224937 //创建版本id为,6224937,的版本标签为,v0.9 + git tag -a v0.1 -m "说明文字" 3628164 //用-a指定标签名,-m指定说明文字 + git tag -s v0.2 -m "说明文字" fec145a //通过-s用私钥签名一个标签,签名采用PGP签名,必须首先安装gpg(GnuPG) + git tag -d v0.1 //删除一个本地标签 + git push 库名 <标签名> //推送一个本地标签 + git push 库名 --tags //推送全部未推送过的本地标签 + git push 库名 :refs/tags/<标签名> //删除一个远程标签 + git checkout v1.0 //切换到标签v1.0 + git show 标签名称 //查看标签详情 + +11.远程仓库 + A,本地创建SSH Key:id_rsa是私钥,id_rsa.pub公钥 + $ ssh-keygen -t rsa -C "youremail@example.com" //在用户主目录里创建.ssh目录,里面有id_rsa和id_rsa.pub两个文件 + + B,GitHub添加ssh key + 打开“Account settings”,“SSH Keys”页面;然后点“Add SSH Key”,填上任意Title,在Key文本框里粘贴id_rsa.pub文件的内容: + + C,GitHub创建一个新仓库 + [new repository]->[Repository name]->[Description]->[cteate respository] + + D,把本地仓库的内容推送到GitHub仓库,与远程仓库建立关联,HTTPS/SSH为GitHub的远程仓库地址 + git remote add 远程仓库名称 HTTPS/SSH + //Example + //git remote add tips git@github.com:zhangfor14/tips.git //SSH:git@github.com:zhangfor14/tips.git + //git remote add helper https://github.com/zhangfor14/tips.git //HTTPS:https://github.com/zhangfor14/tips.git + + E,把本地库的内容推送到远程,用git push命令,实际上是把当前分支master推送到远程。 + git push 仓库名 master + git push -u 仓库名 master + //由于远程库是空的,我们第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。 + + F,从远程库克隆 + $ git clone git@github.com:zhangfor14/helper.git + + diff --git "a/Git\345\255\246\344\271\240\347\254\224\350\256\260/\345\255\246\344\271\240Git\347\232\204\345\277\203\345\276\227-W" "b/Git\345\255\246\344\271\240\347\254\224\350\256\260/\345\255\246\344\271\240Git\347\232\204\345\277\203\345\276\227-W" new file mode 100755 index 0000000000..3792099e74 --- /dev/null +++ "b/Git\345\255\246\344\271\240\347\254\224\350\256\260/\345\255\246\344\271\240Git\347\232\204\345\277\203\345\276\227-W" @@ -0,0 +1,3 @@ +#多谢廖老师的教程 +#温故而知新 +以前看过git的教程了,苦于后面工作也没用到,后面就基本忘记了... 现在跳着再看下,还是有些收获的。 diff --git "a/Git\345\255\246\344\271\240\347\254\224\350\256\260/\351\230\277\345\223\262.txt" "b/Git\345\255\246\344\271\240\347\254\224\350\256\260/\351\230\277\345\223\262.txt" new file mode 100644 index 0000000000..1d1983ae56 --- /dev/null +++ "b/Git\345\255\246\344\271\240\347\254\224\350\256\260/\351\230\277\345\223\262.txt" @@ -0,0 +1 @@ +学习到这里,快结束了,感谢廖大神给的教程,一步一步走来,提高很大,也很高兴能够有这么多志同道合的朋友一起学习。未来让我们一起创造!!! diff --git "a/Git\345\255\246\344\271\240\347\254\224\350\256\260\344\271\213\345\222\214HG\347\232\204\345\257\271\346\257\224/xiaofeiMophsic.txt" "b/Git\345\255\246\344\271\240\347\254\224\350\256\260\344\271\213\345\222\214HG\347\232\204\345\257\271\346\257\224/xiaofeiMophsic.txt" new file mode 100755 index 0000000000..bd3b9af484 --- /dev/null +++ "b/Git\345\255\246\344\271\240\347\254\224\350\256\260\344\271\213\345\222\214HG\347\232\204\345\257\271\346\257\224/xiaofeiMophsic.txt" @@ -0,0 +1 @@ +一直想花时间学习git,但是工作中使用的是hg。在学习廖老师的git文档中,也与hg进行比较。虽然两者都是分布式版本管理系统,但是还是存在诸多差异的。最大的一个感受就是git可以向远程服务器推送指定的分支,而hg则是一次推送本地所有分支。再次感谢廖老师这么详细的git说明文档! diff --git "a/Glendeo\345\210\260\346\255\244\344\270\200\346\270\270.txt" "b/Glendeo\345\210\260\346\255\244\344\270\200\346\270\270.txt" new file mode 100755 index 0000000000..3c99063016 --- /dev/null +++ "b/Glendeo\345\210\260\346\255\244\344\270\200\346\270\270.txt" @@ -0,0 +1 @@ +感谢出此教程! \ No newline at end of file diff --git a/GreenLim.txt b/GreenLim.txt new file mode 100755 index 0000000000..904ff23594 --- /dev/null +++ b/GreenLim.txt @@ -0,0 +1 @@ +thanks a lot for these wonderful feeds! \ No newline at end of file diff --git a/H992109898 b/H992109898 new file mode 100755 index 0000000000..b05f0fffb8 --- /dev/null +++ b/H992109898 @@ -0,0 +1 @@ +来让我试试Pull request diff --git "a/HRJLHY\345\210\260\346\255\244\344\270\200\346\270\270.txt" "b/HRJLHY\345\210\260\346\255\244\344\270\200\346\270\270.txt" new file mode 100644 index 0000000000..323292abcc --- /dev/null +++ "b/HRJLHY\345\210\260\346\255\244\344\270\200\346\270\270.txt" @@ -0,0 +1,2 @@ +谢谢廖老师的教程! +赞助了19元~ \ No newline at end of file diff --git "a/HauWong\347\232\204\345\255\246\344\271\240\347\254\224\350\256\260/README.md" "b/HauWong\347\232\204\345\255\246\344\271\240\347\254\224\350\256\260/README.md" new file mode 100644 index 0000000000..527b124416 --- /dev/null +++ "b/HauWong\347\232\204\345\255\246\344\271\240\347\254\224\350\256\260/README.md" @@ -0,0 +1,23 @@ +# LearnGit +Preserve notes of Git learning + +I am a beginner in git-learing. +I am a Chinese student, and my English is poor. +But I will try my best to discribe my points and ideas in English. +Because I want to imporve my English level in many ways including this, and I also +know that English sometimes can express somethings very well, and even better than +my mother language, Chinese. + +I am a Beginner in git-learning. And i am learning git from a web site named +"廖雪峰的官方网站", http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000 . +It is such a useful tutorial of git-learning to a beginner like me that I figured out +many difficulties thanks to it. + +Git is a version control system. Like SVN but better than SVN, git is a distributed +system, and is a convenient tool for everyone, especially most programmers and writers. +You can use branches easily by git, and you will never be worried about your lost +documents. What's more, you can clone other's respository from the origin repository +easily. So it allows many partners to collabroate one project and everyone will not +incluence other people. + +In one word, git is a very very convenient tools for us. Let's use it together. diff --git "a/HauWong\347\232\204\345\255\246\344\271\240\347\254\224\350\256\260/gitcommands.txt" "b/HauWong\347\232\204\345\255\246\344\271\240\347\254\224\350\256\260/gitcommands.txt" new file mode 100644 index 0000000000..9a67fdbf85 --- /dev/null +++ "b/HauWong\347\232\204\345\255\246\344\271\240\347\254\224\350\256\260/gitcommands.txt" @@ -0,0 +1,63 @@ +Some common commands +1.git init (Create a repository and default a branch called master) +2.git add (Add the operation created or changed to STAGE not repository) +3.git status (Show the current status of this working directory) +4.git commit -m "the description of your action" (Submit or merge the new operation from stage + to master branch of the repository) +5.git diff (Show differences between the current version and the last version) +6.git log (Show all the versions of this file) Add '--pretty=oneline' to simply the show result +7.git reset --hard HEAD^ (Back to the last version) +8.git reflog (Show your actions or commands history) +9.git reset --hard 'the version id' (Back the particular version) +10.rm (Romove a file, but this operation won't be submitted to stage) +11.git checkout -- (Back to the last change that you have not commit) + +a highlight on point 11: this operation can recover file that have not been submitted to stage, + if files were add to stage, they won't be recovered. + +12.git rm (Romove a file, and this operation will be submitted to stage, so you don't + need to add it) +13.git branch (Check the status of branch) +14.git branch (Create a new branch) +15.git checkout (Switch to a particular branch) +16.git checkout -b (Create a new branch and switch to it) +17.git merge (Merge this branch to a particular branch) +18.git branch -d (Delete a branch) + +a highlight on point 18: if you want to delete a branch while it have not merged to master branch, +you have to replace sentence "-d" by "-D" forcely. + +19.git remote add origin git@github.com:/.git (Connect your + local repository to the remote repository on your github) +20.git push -u origin master (Push the master branch to remote) + +a hightlight on point 20: Once you add '-u' at your command, you can use a simplied command -- +'git push origin master' -- to push your operation to remote origin repository after the first push. +If you want to push another branch, just replace the branch name after word "origin". + +21.git clone (Clone a repositiry from origin branch) +22.ls (List all files in current folder) +23.--graph (List in graph format) +24.--pretty-oneline (Simply each message to oneline) +25.--no-ff (Merge two branch with no-ff mode) +26.git stash (Pause and stash status of current work) +27.git stash list (Show your works preserved before) +28.git stash pop (Recover your work from stash) +29.git remote (Check out the name of remote repository) +30.git remote -v(Check out more imformation of remote repository) +31.git branch --set-upstream-to=origin/ (Connect the local branch +to a remote origin branch) +32.git pull (Pull content from remote repositiry) +33.git tag (Set a tag on current commit) +34.git tag (Show all tags) +35.git tag (Set a tag on a particular commit) +36.git tag -a -m "Description" (Set a tag with a description) +37.git tag -s -m "Description" (Set a tag with a description by PGP) +38.git tag -d ... (Delete tags) +39.git push origin (Push particular tag to remote branch) +40.git push origin --tags (Push all of local tags to remote branch) +41.git push origin :refs/tags/ (Delete a tag on remote branch) + +a highlight on point 41: Before delete tags on remote repositiry, you have to delete it on local +repository. + diff --git "a/HauWong\347\232\204\345\255\246\344\271\240\347\254\224\350\256\260/gitnotes.txt" "b/HauWong\347\232\204\345\255\246\344\271\240\347\254\224\350\256\260/gitnotes.txt" new file mode 100644 index 0000000000..0e91db7e3b --- /dev/null +++ "b/HauWong\347\232\204\345\255\246\344\271\240\347\254\224\350\256\260/gitnotes.txt" @@ -0,0 +1,57 @@ +This is a note about git konwledges. + +1.How to build a remote origin repository connected to your local repository? + (1)Create a new SSH key. Use a command -- "ssh-keygen -t rsa -C ''" + -- to create a new folder named ".ssh", if there is no .ssh folder in your local user floder. + And press ENTER at the next several steps. Then a id_rsa file and a id_rsa.pub file will + appear in the new folder named .ssh. + (2)Log in your GitHub account, and open the "Account setting", "SSH key" page. Then click the + "Add SSH key" or "New SSH" button, fill any words you want in "Title", and copy the content of + id_rsa.pub file in .ssh folder to "Key" textbox. + (3)Click the button "Add Key", and then you can see your key on the next page. + +2.How should I do if two branches are conflicted. + If you want to merge two branches, but they are conflicted, you have to remove the conflict + between them manually, and then you can merge them. + +3.What if the local repository is not the newest compared with remote repository. + If your local repository is not the newest one, you may not push your local commits to remote. + You can execute command -- "git pull master" -- to make the local + repository updated, and then push the local commits to remote repository. + +4.What is the diffrence between ff(Fast Forward) mode and no-ff mode? + (1)In fast forward mode, you will merge two branches without preserving merging operation. It means + once you delete the other branch, you will never know where the last change was from. + (2)And in the no-ff mode, git will create a commit that indicates your merging operation when you + merge two branches in one(master). Then you can figure out the branch from where some mistakes + originated. + +5.What if I find a new bug needed to be fixed currently, but I am busy completeing other work on +another branch? + Don't worry! Git supply a friendly system. + (1)If you are unable to commit the current task, never mind, you should preserve this task into + stash, by giving a command -- "git stash", in current branch. + (2)Then switch to master branch, create and switch to a new branch for fixing issue. + (3)Fix your bug in the new branch, commit it to your respository, then switch to master branch, + make a no-ff merging. + (4)If your bug has been fixed, you can switch back to your unfinished task branch. List your + stash through a command -- "git stash list", and you can see the unfinished task in the list. + Give a command -- "git stash pop" -- to recover the previous status, then you can continue your + work. + + a highlight on method 5: If your previous task is conflict with the file after repair, you have to + remove the conflict when you merge them. + +6.How to cooperate with other partners? + You and your partners will clone the same repository from remote server, but you will work alone + for diffrient features on diffrient branches(at your local pc). + And the remote repository has two branches including master and dev. The master is the main branch, + and the dev is development branch. + You will push your commit to remote branch. Once you find your version is after the remote one, you + have to pull the remote version to your local pc. If there are some conflicts between them, you + should remove conflicts firstly, and then merge them. + Finally, push the new version to the remote branch. + + a highlight on method 6: if your local branch has not gotten connection to the corresponding remote + branch, you have to connect them firstly. command, "--set-upstream-to=origin/ ". \ No newline at end of file diff --git a/HelloWorld b/HelloWorld new file mode 100755 index 0000000000..f4da9afa4b --- /dev/null +++ b/HelloWorld @@ -0,0 +1 @@ +print "Hello World!" diff --git a/Hevi-Ye.txt b/Hevi-Ye.txt new file mode 100755 index 0000000000..539f8da8d8 --- /dev/null +++ b/Hevi-Ye.txt @@ -0,0 +1,3 @@ +用Git的add只能一个一个add,太坑爹了 + +如果我一次性修改了100个文件,那么我要add一百次吗?有没有什么批量add的方法 \ No newline at end of file diff --git a/Hidden21.txt b/Hidden21.txt new file mode 100755 index 0000000000..75e95a435e --- /dev/null +++ b/Hidden21.txt @@ -0,0 +1,124 @@ +1 Git简介 +--1.1 Git的诞生 +--1.2 集中式vs分布式 +2 安装Git +3 创建版本库 + 初始化一个Git仓库,使用git init命令。 + 添加文件到Git仓库,分两步: + 第一步,使用命令git add ,注意,可反复多次使用,添加多个文件; + 第二步,使用命令git commit,完成。 +4 时光机穿梭 + 要随时掌握工作区的状态,使用git status命令。 + 如果git status告诉你有文件被修改过,用git diff可以查看修改内容。git diff HEAD -- readme.txt +--4.1 版本回退 + HEAD指向的版本就是当前版本,因此,Git允许我们在版本的历史之间穿梭,使用命令git reset --hard commit_id。(commit_id可以为HEAD^ 或 HEAD~100) + 穿梭前,用git log可以查看提交历史,以便确定要回退到哪个版本。(显示少量信息加上 --pretty=oneline参数) + 要重返未来,用git reflog查看命令历史,以便确定要回到未来的哪个版本。 +--4.2 工作区和暂存区 +--4.3 管理修改 +--4.4 撤销修改 + 场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout -- file。(命令中的--很重要,没有--,就变成了“切换到另一个分支”的命令) + 场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD file,就回到了场景1,第二步按场景1操作。 + 场景3:已经提交了不合适的修改到版本库时,想要撤销本次提交,参考版本回退一节,不过前提是没有推送到远程库。 +--4.5 删除文件 + 命令git rm用于删除一个文件 +5 远程仓库 + 本地Git仓库和GitHub仓库之间的传输是通过SSH加密的。 + 第1步:创建SSH Key。在用户主目录下,看看有没有.ssh目录,如果有,再看看这个目录下有没有id_rsa和id_rsa.pub这两个文件,如果已经有了,可直接跳到下一步。如果没有,打开Shell(Windows下打开Git Bash),创建SSH Key: + 在用户主目录里找到.ssh目录,里面有id_rsa和id_rsa.pub两个文件,这两个就是SSH Key的秘钥对,id_rsa是私钥,不能泄露出去,id_rsa.pub是公钥,可以放心地告诉任何人。 + ssh-keygen -t rsa -C "youremail@example.com" + 第2步:登陆GitHub,打开“Account settings”,“SSH Keys”页面 + 将id_rsa.pub的内容贴到github上 +--5.1 添加远程库 + 要关联一个远程库,使用命令git remote add origin git@server-name:path/repo-name.git; + 关联后,使用命令git push -u origin master第一次推送master分支的所有内容; + 此后,每次本地提交后,只要有必要,就可以使用命令git push origin master推送最新修改 + eg:同步 git remote add origin git@github.com:Hidden21/WebApp.git + https://github.com/Hidden21/WebApp.git +--5.1 从远程库克隆 +6 分支管理 +--6.1 创建与合并分支 + Git鼓励大量使用分支: + 查看分支:git branch + 创建分支:git branch + 切换分支:git checkout + 创建+切换分支:git checkout -b + 合并某分支到当前分支:git merge + 删除分支:git branch -d +--6.2 解决冲突 + 当Git无法自动合并分支时,就必须首先解决冲突。解决冲突后,再提交,合并完成。 + 用git log --graph命令可以看到分支合并图 +--6.3 分支管理策略 + 通常,合并分支时,如果可能,Git会用Fast forward模式,但这种模式下,删除分支后,会丢掉分支信息。 + 如果要强制禁用Fast forward模式,Git就会在merge时生成一个新的commit,这样,从分支历史上就可以看出分支信息。 + 准备合并dev分支,请注意--no-ff参数,表示禁用Fast forward: + $ git merge --no-ff -m "merge with no-ff" dev + git log --graph(分之合并图) --pretty=oneline(一行显示) --abbrev-commit(简写的CommitId) + 分支策略 + 首先,master分支应该是非常稳定的,也就是仅用来发布新版本,平时不能在上面干活; + 那在哪干活呢?干活都在dev分支上,也就是说,dev分支是不稳定的,到某个时候,比如1.0版本发布时,再把dev分支合并到master上,在master分支发布1.0版本; + 你和你的小伙伴们每个人都在dev分支上干活,每个人都有自己的分支,时不时地往dev分支上合并就可以了。 + Git分支十分强大,在团队开发中应该充分应用。 + 合并分支时,加上--no-ff参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并,而fast forward合并就看不出来曾经做过合并。 +--6.4 Bug分支 + 修复bug时,我们会通过创建新的bug分支进行修复,然后合并,最后删除; + 当手头工作没有完成时,先把工作现场git stash一下,然后去修复bug,修复后,再git stash pop,回到工作现场。 + git stash list查看 + git stash apply stash@{0}恢复到指定 + 一是用git stash apply恢复,但是恢复后,stash内容并不删除,你需要用git stash drop来删除; + 另一种方式是用git stash pop,恢复的同时把stash内容也删了 +--6.5 Feature分支 + 开发一个新feature,最好新建一个分支; + 如果要丢弃一个没有被合并过的分支,可以通过git branch -D 强行删除 +--6.6 多人协作 + 多人协作的工作模式通常是这样: + 首次关联后,使用命令git push -u origin master第一次推送master分支的所有内容 + 首先,可以试图用git push origin branch-name推送自己的修改; + 如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并; + 如果合并有冲突,则解决冲突,并在本地提交; + 没有冲突或者解决掉冲突后,再用git push origin branch-name推送就能成功! + 如果git pull提示“no tracking information”,则说明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream branch-name origin/branch-name + + 小结: + 查看远程库信息,使用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,如果有冲突,要先处理冲突。 +7 标签管理 +--7.1 创建标签 + 小结 + 命令git tag 用于新建一个标签,默认为HEAD,也可以指定一个commit id; + git tag -a -m "blablabla..."可以指定标签信息; + git tag -s -m "blablabla..."可以用PGP签名标签; + 命令git tag可以查看所有标签 +--7.2 操作标签 + 小结 + 命令git push origin 可以推送一个本地标签; + 命令git push origin --tags可以推送全部未推送过的本地标签; + 命令git tag -d 可以删除一个本地标签; + 命令git push origin :refs/tags/可以删除一个远程标签。 +8 使用GitHub +9 自定义Git + 配置颜色 git config --global color.ui true +--9.1 忽略特殊文件 + 在Git工作区的根目录下创建一个特殊的.gitignore文件,然后把要忽略的文件名填进去,Git就会自动忽略这些文件。 + 不需要从头写.gitignore文件,GitHub已经为我们准备了各种配置文件,只需要组合一下就可以使用了 +--9.2 配置别名 + eg:git config --global alias.st status + git config --global alias.unstage 'reset HEAD' + git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit" + 配置Git的时候,加上--global是针对当前用户起作用的,如果不加,那只针对当前的仓库起作用。 + 配置文件放哪了?每个仓库的Git配置文件都放在.git/config文件中: +--9.3 搭建Git服务器 + 搭建Git服务器非常简单,通常10分钟即可完成; + 要方便管理公钥,用Gitosis; + 要像SVN那样变态地控制权限,用Gitolite。 +10 期末总结 +已修复issue-101 +master 创建分支 +dev 创建分支 + +gittest我添加了一行 +git我添加了一行 diff --git a/Horve.txt b/Horve.txt new file mode 100755 index 0000000000..a7006d4ca6 --- /dev/null +++ b/Horve.txt @@ -0,0 +1,198 @@ +创建版本库 + +$ git init +把目录变成Git可以管理的仓库(Git仓库) + +$ git add file +把file文件添加到仓库 + +$ git commit -m ‘commit logic’ +将暂存区内的改动提交到仓库,并加上’commit logic’的提交日志 + +$ git status +仓库的状态,包括有无修改,是否已经完全提交到仓库 + +$ git diff file +暂存区和版本库中file文件的区别 + + +版本回退 + +$ git log +仓库内文件的修改日志 + +$ git reset --hard HEAD^ +回退到上一个版本 + +$ git reset --hard HEAD^^ +回退到倒数第二个版本 + +$ git reset --hard HEAD~100 +回退到倒数第100个版本 + +$ git reset --hard ‘commit_id’ +根据git log命令得到的结果中的commit_id,回退到对应版本(commit_id只写前几位就行) + +$ git reflog +记录每一次命令 + +注:Gti的版本回退速度非常快,因为Git在内部有个指向当前版本的HEAD指针,当你回退版本的时候,Git仅仅是把HEAD指针从原始版本指向当前版本。HEAD指向的版本始终是当前版本。 + +管理修改 + +$ git diff HEAD -- file +工作区和版本库里file文件最新版的区别 + +$ git checkout -- file +把file在工作区中的更改全部撤销。PS: “--”很重要,没有“—”就变成了一个创建新分支的命令。 + +$ git reset HEAD file +把file在暂存区中的修改全部撤销(unstage),重新放回工作区(就是回到git add命令之前)。 + +$ rm file +从工作区中删除文件,不能影响版本库 + +$ git rm file +从版本库中删除文件,并且要git commit提交改动 + +github + +$ git remote add origin ‘git-ssh-url’ +把一个本地仓库与GitHub仓库关联 + +$ git push -u origin master +第一次推送master分支的所有内容【把本地库的内容推送到远程库上】 + +$ git push origin master  +每次本地提交后,都能使用改名了推送到远程库 + +$ git clone ‘git-ssh-url’ +从远程库克隆一个本地库 + +PS:GitHub给出的地址不止一个,还可以用https://github.com/xxxxx/xxxx.git这样的地址。实际上,Git支持多种协议,默认的git://使用ssh,但也可以使用https等其他协议。 + +使用https除了速度慢以外,还有个最大的麻烦是每次推送都必须输入口令,但是在某些只开放http端口的公司内部就无法使用ssh协议而只能用https。 + +与远程版本库关联并同步文件的流程: +1,创建SSH Key并对GitHub进行配置; +2,在GitHub上创建远程库; +3,本地目录通过git init,git add, git commit等命令将本地目录配置成Git仓库,并提交更新; +4,git remote add origin ‘git-ssh-url’命令将本地库与远程库关联; +5,git push -u origin master命令将本地库所有的内容推送到远程库,第一次带-u,以后不用带。 + +创建与合并分支 + +$ git branch -b dev +创建并切换到分支dev + +$ git branch dev +创建分支dev + +$ git checkout dev +切换到分支dev + +$ git branch  +列出所有分支,并标示出当前分支 + +$ git merge dev +把dev分支的结果合并到当前分支 + +$ git branch -d dev +删除dev分支 + +$ git log --graph +查看分支合并图 + +$ git merge --no-ff -m “no-ff merge” dev +通过no-ff模式(非Fast forward模式)合并dev分支到当前分支 + +PS:通常,合并分支时,如果可能,Git会用Fast forward模式,但这种模式下,删除分支后,会丢掉分支信息 +如果要强制禁用Fast forward模式,Git就会在merge时生成一个新的commit,这样,从分支历史上就可以看出分支信息,也就是合并分支时,加上--no-ff参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并,而fast forward合并就看不出来曾经做过合并。 + +Bug分支 + +$ git stash  +存储当前工作现场,修复bug后恢复工作现场 + +$ git stash list +查看所有存储的工作现场 + +$ git stash apply +恢复所有的工作现场 + +$ git stash pop +删除所有的工作现场 + +$ git stash apply stash@{N}  +恢复指定的工作现场 + +$ git branch -D dev +强行删除没有被合并的分支dev + +多人协作 + +$ git remote +查看远程库信息 + +$ git remote -v +查看远程库更多信息,如: +origin git@github.com:Horve/ws-exam.git (fetch) +origin git@github.com:Horve/ws-exam.git (push) +PS:上面显示了可以抓取和推送的origin的地址。如果没有推送权限,就看不到push的地址。 + +$ git push origin master +将master分支上所有的本地提交推送到远程库 + +抓取分支 + +团队成员从远程库clone时,默认情况下,他将只能看到本地的master分支。如果需要在其他的分支上进行开发,就需要创建远程origin的其他分支到本地。 + +$ git checkout -b dev origin/dev +创建远程的dev分支到本地 + +$ git branch --set-upstream dev origin/dev +建立本地分支与远程分支之间的链接/关联 + +多人协作的工作模式 + +1,首先,可以试图用git push origin branch-name推送自己的修改; +2,如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并; +3,如果合并有冲突,则解决冲突,并在本地提交; +4,没有冲突或者解决掉冲突后,再用git push origin branch-name推送就能成功! +5,如果git pull提示“no tracking information”,则说明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream branch-name origin/branch-name。 + +创建标签 + +$ git tag v1.0 +为当前分支创建标签v1.0,默认为HEAD创建 + +$ git tag +查看分支所有标签(标签不是按时间顺序列出,而是按字母排序的) + +$ git tag v0.9 commit_id +为对应的commit版本创建标签(可通过git log查看commit日志获取对应版本的commit_id) + +$ git show v0.9 +根据标签查找对应的版本 + +$ git tag -a v1.0 -m “version 1.0 released” commit_id +创建带有说明的标签,-a指定标签名,-m指定说明文字 + +操作标签 + +$ git tag -d v1.0 +删除标签。创建的标签都只存储在本地,不会自动推送到远程。所以打错的标签可以在本地安全删除。 + +$ git push origin v1.0 +推送v1.0标签到远程版本库 + +$ git push origin --tags +一次性推送全部尚未推送到远程的本地标签 + +删除远程标签 + +$ git tag -d v0.9 +首先删除本地标签 + +$ git push origin :refs/tags/v0.9 +然后用这条命令删除远程标签 \ No newline at end of file diff --git a/HsingChin.txt b/HsingChin.txt new file mode 100755 index 0000000000..4d5b341482 --- /dev/null +++ b/HsingChin.txt @@ -0,0 +1,2 @@ +Dear Michael: + This Git lesson is very helpful, thanks a lot, it was you who show me the door to the amazing world of git. diff --git a/HuChengzhen.txt b/HuChengzhen.txt new file mode 100755 index 0000000000..02373e25ed --- /dev/null +++ b/HuChengzhen.txt @@ -0,0 +1,2 @@ +跟着这个教程学习,感觉很棒 +我试试怎么pull request diff --git a/HuangJianHong.txt b/HuangJianHong.txt new file mode 100755 index 0000000000..9c33aa491c --- /dev/null +++ b/HuangJianHong.txt @@ -0,0 +1,3 @@ + Thanks for Teach Liao; + I learn a lot from your contribute ,every day learn a litte ; + very thanks , and new year new life . diff --git a/HubQin.txt b/HubQin.txt new file mode 100644 index 0000000000..82eb77880c --- /dev/null +++ b/HubQin.txt @@ -0,0 +1 @@ +Thank you very much! diff --git a/Hydraz320_2 b/Hydraz320_2 new file mode 100755 index 0000000000..643b0dec42 --- /dev/null +++ b/Hydraz320_2 @@ -0,0 +1 @@ +I want to try for another time. diff --git a/IACJ b/IACJ new file mode 100644 index 0000000000..ec93318524 --- /dev/null +++ b/IACJ @@ -0,0 +1 @@ +IACJ marked here... diff --git a/IT-HowieLi.txt b/IT-HowieLi.txt new file mode 100755 index 0000000000..43fe2e13d6 --- /dev/null +++ b/IT-HowieLi.txt @@ -0,0 +1 @@ +真的感谢廖雪峰老师的教程,通俗易懂,下一个项目就要用git来练手了。感谢老师。 \ No newline at end of file diff --git a/Introduce.txt b/Introduce.txt new file mode 100644 index 0000000000..7d2b7bed31 --- /dev/null +++ b/Introduce.txt @@ -0,0 +1,2 @@ +My name is Tangl,l am from Shanghai JiaoTong University. +Thank you Mr.Liao! \ No newline at end of file diff --git a/IreneHui.txt b/IreneHui.txt new file mode 100755 index 0000000000..93db8844d7 --- /dev/null +++ b/IreneHui.txt @@ -0,0 +1 @@ +Thank you so much! \ No newline at end of file diff --git a/IvyWing.txt b/IvyWing.txt new file mode 100755 index 0000000000..38500f54e3 --- /dev/null +++ b/IvyWing.txt @@ -0,0 +1 @@ +Thank you for your instructions on Python, Git and JavaScript. It is really usefull. I am sorry that I only can use English here to appreciate you here due to the encoding problem in Windows. diff --git a/JacobYChan/learn.txt b/JacobYChan/learn.txt new file mode 100644 index 0000000000..37db8241e6 --- /dev/null +++ b/JacobYChan/learn.txt @@ -0,0 +1 @@ +This is JacobYChan's text,test pull request,THX diff --git a/Jacobwan.txt b/Jacobwan.txt new file mode 100755 index 0000000000..b6724f0974 --- /dev/null +++ b/Jacobwan.txt @@ -0,0 +1 @@ +Thank you very much. diff --git a/JashonWang.txt b/JashonWang.txt new file mode 100755 index 0000000000..e744a534ca --- /dev/null +++ b/JashonWang.txt @@ -0,0 +1 @@ +第一次看是一年多以前的事情了,重温了一遍拾回不少知识依然受益匪浅,谢谢老师。 \ No newline at end of file diff --git a/Jasonscor.txt b/Jasonscor.txt new file mode 100755 index 0000000000..feab92ea54 --- /dev/null +++ b/Jasonscor.txt @@ -0,0 +1 @@ +Very good python course diff --git a/Java.gitignore b/Java.gitignore new file mode 100755 index 0000000000..46775e45bc --- /dev/null +++ b/Java.gitignore @@ -0,0 +1,3 @@ +*.class + + \ No newline at end of file diff --git "a/Jhang\357\274\232git\345\255\246\344\271\240\345\277\203\345\276\227.txt" "b/Jhang\357\274\232git\345\255\246\344\271\240\345\277\203\345\276\227.txt" new file mode 100755 index 0000000000..974e84265a --- /dev/null +++ "b/Jhang\357\274\232git\345\255\246\344\271\240\345\277\203\345\276\227.txt" @@ -0,0 +1,49 @@ +8/27 + + Github上,在pull request被接受之前,commit会持续更新,merge后以最后一次更新为准。 + Version Control System (VCS) + 问题,无法在git中创建库可能是命令不可用 + Git 工作区用 checkout -- file 修改, stage区 用 git reset HEAD file 退回工作区,commit后用 git reset –hard HEAD^进行版本退回。 + Git rm 删除文件 + Checkout 的本质是有版本库里的文件替换工作区的文件因此可以用于误删。 + +8/28 + 添加远程库 +git remote add origin git@github.com:michaelliao/learngit.git +git push –u(第一次使用的参数) origin master + 克隆远程库 + git clone git@github.com:michaelliao/gitskills.git + 创建分支 + git checkout –b (创建并切换) + 等同于 git branch + git checkout + 合并分支到当前分支 git merge + 删除分支 git branch –d + 当无法merge是需要手动解决冲突 + 保留分支历史的merge方法(关闭fastforword) +git merge --no-ff -m "merge with no-ff" dev + Bug分支 +git stash—储藏工作区 +git stash (list)/apply(保留stash内容)/pop(不保留stash内容) +可多次stash + 在当前分支时无法删除此分支 + git branch –D 强制删除 + 本地创建与远程对应的分支 +git branch --set-upstream branch-name origin/branch-name + 抓取远程心得提交 +git pull + 把本地分支push到远程 +git push origin branchname + 在远程创建与本地分支相关联的分支 +git push --set-upstream origin branchname + 总的来说,先建立联系-抓取-推送 + 创建标签 +git tag +git tag +git tag –a -m “messege” + 删除git tag –d + 推送 +git push origin +git push origin –tags + 删除已推送标签 + 本地删除 +git push origin :refs/tags/v1.1 diff --git a/JiangbinWu.md b/JiangbinWu.md new file mode 100755 index 0000000000..e1a905bf2d --- /dev/null +++ b/JiangbinWu.md @@ -0,0 +1,4 @@ +Thanks! +========= + +Thanks for your Git lessons. diff --git a/Jim43.txt b/Jim43.txt new file mode 100755 index 0000000000..ebef02513b --- /dev/null +++ b/Jim43.txt @@ -0,0 +1 @@ +try to pull request bu Jim43 \ No newline at end of file diff --git a/Jiyg.txt b/Jiyg.txt new file mode 100755 index 0000000000..b2cc15392f --- /dev/null +++ b/Jiyg.txt @@ -0,0 +1 @@ +Thank \ No newline at end of file diff --git a/JoeZhouWenxuan.md b/JoeZhouWenxuan.md new file mode 100755 index 0000000000..58e2592d61 --- /dev/null +++ b/JoeZhouWenxuan.md @@ -0,0 +1,2 @@ +this is a test + diff --git a/JohnTsaiAndroid.txt b/JohnTsaiAndroid.txt new file mode 100755 index 0000000000..14ae176bd9 --- /dev/null +++ b/JohnTsaiAndroid.txt @@ -0,0 +1 @@ +Thank you,Mr Liao. diff --git a/JuTuTu.txt b/JuTuTu.txt new file mode 100755 index 0000000000..62bee44a32 --- /dev/null +++ b/JuTuTu.txt @@ -0,0 +1 @@ +谢谢您的教程! diff --git a/Julianshang.txt b/Julianshang.txt new file mode 100755 index 0000000000..d84b33cd34 --- /dev/null +++ b/Julianshang.txt @@ -0,0 +1 @@ +最近又把廖老师的教程看了一遍,对于本地的版本控制又有了更深入的认识。 diff --git a/KID-G-two.txt b/KID-G-two.txt new file mode 100755 index 0000000000..46c6009c81 --- /dev/null +++ b/KID-G-two.txt @@ -0,0 +1 @@ +hello michaelliao,I am a teacher for PHP,thank you for your help on git! diff --git a/KID-G.txt b/KID-G.txt new file mode 100755 index 0000000000..a042389697 --- /dev/null +++ b/KID-G.txt @@ -0,0 +1 @@ +hello world! diff --git a/Kandane.txt b/Kandane.txt new file mode 100755 index 0000000000..afb0a8fd80 --- /dev/null +++ b/Kandane.txt @@ -0,0 +1,9 @@ +快毕业找工作了,在复习的时候才知道有版本管理器,自己对着很古老的一本书 +从RCS开始看起的,看过CVS 和 SVN ,最后看的GIT。从网上搜到你的教程,之前 +有人说中文的GIT的教程不多,学起来不容易。我对着你的教程学到现在,感觉其 +实也不是很难,当然这也是你的教程写的水平比较高,比较生动的原因。在这里 +十分的感谢你,能够花费这么多的精力来写下这份教程。 +感觉GIT比较适合现在的我使用。当然我也没有发现大家说的CVS的问题。还是使 +用的深度不够。把这个体验完打算去试试开源中国假设的GIT托管网站,看看有什 +么不同。 +最后再次感谢你。 diff --git a/Kean.txt b/Kean.txt new file mode 100755 index 0000000000..e69de29bb2 diff --git a/Kevin--Wu.txt b/Kevin--Wu.txt new file mode 100755 index 0000000000..a0e9a7f568 --- /dev/null +++ b/Kevin--Wu.txt @@ -0,0 +1,4 @@ +Mr.liao: + Thank you for your awesome Git lessons.It helps me a lot in exploring this new world. + Kevin--Wu + 2015/2/10 diff --git a/Kevin.txt b/Kevin.txt new file mode 100755 index 0000000000..87f5edcdad --- /dev/null +++ b/Kevin.txt @@ -0,0 +1 @@ +Love you! teacher! \ No newline at end of file diff --git a/KiritoSai.md b/KiritoSai.md new file mode 100755 index 0000000000..25ba103099 --- /dev/null +++ b/KiritoSai.md @@ -0,0 +1,3 @@ +#the first pull request of KiritoSai +1. Thank you for the best git lesson i have ever seen. +2. This is my first pull request. \ No newline at end of file diff --git a/LICENSE b/LICENSE old mode 100644 new mode 100755 diff --git a/LICENSE.txt b/LICENSE.txt new file mode 100755 index 0000000000..dee381d735 --- /dev/null +++ b/LICENSE.txt @@ -0,0 +1 @@ +heiheihei \ No newline at end of file diff --git a/LYJ_LYJ@126.com b/LYJ_LYJ@126.com new file mode 100755 index 0000000000..dc36b02476 --- /dev/null +++ b/LYJ_LYJ@126.com @@ -0,0 +1 @@ +看了作者的博客,终于感觉对git有了一些基础理解了,作者提供了这么详细易懂的基础教程,小白再次表示深深的谢意。 diff --git a/LZQSimonLee.txt b/LZQSimonLee.txt new file mode 100755 index 0000000000..b102fc1600 --- /dev/null +++ b/LZQSimonLee.txt @@ -0,0 +1 @@ +感谢廖老师! \ No newline at end of file diff --git a/LaCibeles.txt b/LaCibeles.txt new file mode 100755 index 0000000000..14e24d58c1 --- /dev/null +++ b/LaCibeles.txt @@ -0,0 +1,6 @@ +Michael: +I read ur guide for Git in English version about 3 months ago. I feel its the best guide for Git i've ever read before. This guide makes everything easy for beginners to enjoy Git. +So i just want say thank you to what all u've done and give out more excellent guides. +Good luck! +Yours +LaCibeles diff --git a/LearnGitNotes.txt b/LearnGitNotes.txt new file mode 100755 index 0000000000..e71a7d7486 --- /dev/null +++ b/LearnGitNotes.txt @@ -0,0 +1,108 @@ +教程网址: +http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000 + + + +创建用户:(注明自己的身份) +git config --global user.name "username" +git config --global user.email "useremail" + +初始化:(进入相应文件夹后,在该文件夹初始化版本库) +git init + +添加项目:(添加your file到版本库) +git add (your file) + +添加注释信息:(为当前创建版本写上注释) +git commit -m "your message" + +查看当前版本状态: +git status + +查看修改内容: +git diff + +查看日志: +git log [file name] +git log --pretty=oneline //将日志显示到一行,每行之包括sha1码和注释信息 + //这里的sha1码即为一个版本的ID(commit id) + //如果加上--abbrev-commit参数会将sha1码通过简写的方式显示 + +回退版本: +git reset --hard HEAD^ //HEAD后面的^的数目代表要回退的版本数 +git reset --hard HEAD~n //n代表要回退的版本数 +git reset --hard (commit id) //回退到相应commit id的版本,id不用写全,一般7位就够了 + +查询回退日志: +git reflog + +显示文档内容: +cat (file) + +查看工作区和暂存区的区别: +git diff HEAD -- (file) + +撤销最近一次对文件修改: +git checkout -- (file) //将文件回到最近一次git commit或git add的状态 + //当误删除文件时可以使用此命令从git仓库还原此文件 + //不加--就会变成创建一个分支 + +撤销最近一次提交到暂存区的文件: +git reset HEAD (file) //将最近一次add到stage的文件退回 + +克隆项目到远程库: +git remote add origin git@server-name:path/repo-name.git + //origin为远程库的名字,可以改变,但习惯上叫origin +git remote //显示远程仓库名字 +git remote -v //显示远程仓库详细信息 +git branch --set-upstream branch-name origin/ + //将本地分支与远程分支关联 + +将本地库推送到远程: +git push [-u origin master] //实际上相当于将本地的master分支内容推送到远程新的master分支 + //并且将本地master与远程关联,方便以后的推送 + //以后在本地推送时只需要输入git push origin master + +从远程库克隆仓库: +git clone git@server-name:path/repo-name.git + +创建分支: +git branch (branch-name) //创建一个名字为branch-name的分支 +git checkout (branch-name) //移动到branch-name分支 +git checkout -b (branch-name) //-b参数为创建并切换,相当于上述两条命令组合 +git branch //列出所有分支,并在当前分支前面会标一个*号。 + +合并分支: +git merge (branch-name) //将指定分支(branch-name)合并到当前分支 +git log --graph //查看分支合并图 + +删除分支: +git branch -d (branch-name) //删除指定分支 +git branch -D //强制删除指定分支 + +分支管理: +git merge --no-ff -m "" + //不使用fast forward模式合并分支,这样会在morge时添加一个commit + //-m参数后面即为描述信息 + +保存现场: +git stash //用于保存当前工作区、暂存区现场 +git stash list //列出当前已经存在的现场 +git stash apply //跳转到现场,但是它本身并没有删除 +git stash drop //删除 +git stash pop //跳转到最新的现场,并删除(弹出) + +标签管理: +git tag //查看标签 +git tag //创建一个的tag +git tag //在位置创建一个tag(用于给先前提交过的版本创建tag) +git show //显示的详细信息 +git tag -a|-s -m + //创建带注释的标签。-m后接注释内容。 + //使用-a参数则创建的是公共tag。使用-s参数则会使用私钥创建带签名 + //的标签。(使用PGP签名,需要安装GnuPG) +git tag -d //删除标签 +git push origin |--tags + //推送到远程库或一次性推送全部标签 +git push origin :refs/tags/ + //删除远程库的tag。首先删除本地tag,然后通过此格式推送到远程 diff --git a/LearnGit_ByXinw.md b/LearnGit_ByXinw.md new file mode 100755 index 0000000000..0f9a1cb0bf --- /dev/null +++ b/LearnGit_ByXinw.md @@ -0,0 +1,57 @@ +#Git 学习笔记 +##基本命令 +1. 创建版本库 + - **`git init`** + - 在指定文件目录(不一定为空)下创建由Git管理的仓库 + - 隐藏文件 `.git` 是Git来跟踪管理版本库的 +2. 添加文件到仓库 + - **`git add `** + - 可以多次add不同文件 +3. 提交文件到仓库 + - **`git commit -m "message"`** + - -m后面输入的是本次提交的说明 + - 一次可以提交多个文件 +4. 查看仓库当前的状态 + - **`git status`** +5. 查看修改的内容 + - **`git diff `** + - `git diff HEAD^ HEAD` +6. 查看提交历史 + - **`git log`** + - 显示从最近到最远的提交日志 + - **`git log --pretty=oneline`** 只显示commit id信息 +7. 查看命令历史 + - **`git reflog`** + - 找回历史版本的commit id +8. 版本回退 + - **`git reset --hard