diff --git a/$20170411 b/$20170411 new file mode 100644 index 000000000..4af0bef9f --- /dev/null +++ b/$20170411 @@ -0,0 +1,5 @@ +My pull test +Thank you +! +hello +hello,are you OK ? 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 000000000..9d213f157 --- /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,8 @@ +廖老师,您好 + 上善若水,水善利万物而不争 + 明白四达,能无知乎? + i am your new fan bobo + + 学生:兰林 + 七星龙井 +aaawyc diff --git "a/- -\350\256\262\345\276\227\345\244\252\345\245\275\344\272\206\357\274\201\345\270\205\345\221\206\344\272\206\357\274\201.txt" "b/- -\350\256\262\345\276\227\345\244\252\345\245\275\344\272\206\357\274\201\345\270\205\345\221\206\344\272\206\357\274\201.txt" new file mode 100644 index 000000000..68bebae70 --- /dev/null +++ "b/- -\350\256\262\345\276\227\345\244\252\345\245\275\344\272\206\357\274\201\345\270\205\345\221\206\344\272\206\357\274\201.txt" @@ -0,0 +1 @@ +谢谢廖老师!讲的太好了!帅呆了!~~ 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 000000000..87fbb1c34 --- /dev/null +++ "b/- \347\234\237\347\232\204\345\276\210\346\204\237\350\260\242~.txt" @@ -0,0 +1,4 @@ +真的很感谢廖老师~ +看到这么多同学的反馈与感谢我都觉得还是蛮壮观的~ +有没有可以一起交流的小伙伴可以互相关注github啊 查看这条的提交者应该就可以了吧 +祝老师和同学们以后的每一天都开开心心~测试!!! 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 000000000..c74414a18 --- /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/--\350\247\201\345\255\227\345\246\202\351\235\242.txt" "b/--\350\247\201\345\255\227\345\246\202\351\235\242.txt" new file mode 100644 index 000000000..0670d8d0b --- /dev/null +++ "b/--\350\247\201\345\255\227\345\246\202\351\235\242.txt" @@ -0,0 +1,4 @@ +真的很感谢廖老师~ +看到这么多同学的反馈与感谢我都觉得还是蛮壮观的~ +有没有可以一起交流的小伙伴可以互相关注github啊 查看这条的提交者应该就可以了吧 +祝老师和同学们以后的每一天都开开心心~测试!!! diff --git a/.000 b/.000 new file mode 100755 index 000000000..0fe3df9ba --- /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 000000000..ea125728b --- /dev/null +++ b/.3qTeacherLiao.txt @@ -0,0 +1 @@ +刚学会,来玩玩, diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 000000000..9cc867262 Binary files /dev/null and b/.DS_Store differ diff --git a/.Tolvgx.md b/.Tolvgx.md new file mode 100644 index 000000000..026f00f99 --- /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 100644 index 000000000..707293fa8 --- /dev/null +++ b/.gitignore @@ -0,0 +1,13 @@ +mydb.txt +<<<<<<< HEAD +*.ignore +*.so +*.class +#windows +*.ini +*.Thumbs.db +zhu.txt +======= + +*.so +>>>>>>> 2e3ba62650634f2f0a08f9d964b88c846a00c991 diff --git a/.idea/compiler.xml b/.idea/compiler.xml new file mode 100644 index 000000000..a85231498 --- /dev/null +++ b/.idea/compiler.xml @@ -0,0 +1,23 @@ + + + + + \ No newline at end of file diff --git a/.idea/copyright/profiles_settings.xml b/.idea/copyright/profiles_settings.xml new file mode 100644 index 000000000..e7bedf337 --- /dev/null +++ b/.idea/copyright/profiles_settings.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/.idea/dd b/.idea/dd new file mode 100644 index 000000000..c1eb97060 --- /dev/null +++ b/.idea/dd @@ -0,0 +1,2 @@ +dd +jj diff --git a/.idea/encodings.xml b/.idea/encodings.xml new file mode 100644 index 000000000..d82104827 --- /dev/null +++ b/.idea/encodings.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 000000000..26cb637b3 --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100755 index 000000000..edc1b3c2d --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + +sdgdsgdgdfg +dgdgdgd diff --git a/.idea/scopes/scope_settings.xml b/.idea/scopes/scope_settings.xml new file mode 100644 index 000000000..922003b84 --- /dev/null +++ b/.idea/scopes/scope_settings.xml @@ -0,0 +1,5 @@ + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100755 index 000000000..35eb1ddfb --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.idea/workspace.xml b/.idea/workspace.xml new file mode 100644 index 000000000..9596f194b --- /dev/null +++ b/.idea/workspace.xml @@ -0,0 +1,217 @@ + + + + + + + + + + + + + + + + + + + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1501722270937 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.project b/.project new file mode 100755 index 000000000..6a3e5bed3 --- /dev/null +++ b/.project @@ -0,0 +1,11 @@ + + + learngit-1 + + + + + + + + diff --git a/.swp b/.swp new file mode 100755 index 000000000..1e8fb8cbe Binary files /dev/null and b/.swp differ diff --git "a/.\345\246\210\345\246\210\350\257\264\345\220\215\345\255\227\351\225\277\351\225\277\347\232\204\346\211\215\350\203\275\345\220\270\345\274\225\345\244\247\345\256\266\347\232\204\346\263\250\346\204\217.txt" "b/.\345\246\210\345\246\210\350\257\264\345\220\215\345\255\227\351\225\277\351\225\277\347\232\204\346\211\215\350\203\275\345\220\270\345\274\225\345\244\247\345\256\266\347\232\204\346\263\250\346\204\217.txt" new file mode 100644 index 000000000..e9d5501f2 --- /dev/null +++ "b/.\345\246\210\345\246\210\350\257\264\345\220\215\345\255\227\351\225\277\351\225\277\347\232\204\346\211\215\350\203\275\345\220\270\345\274\225\345\244\247\345\256\266\347\232\204\346\263\250\346\204\217.txt" @@ -0,0 +1,7 @@ +教程非常不错,非常适合新手学习 + +建议: +感觉在bug分支那块讲的不够深入, +为什么要先把dev分支先保存起来, +是因为如果不保存,在建立bug分支提交修改的话, +暂存区这几个分支用的是一个提交bug分支会导致dev分支里面的东西丢失么?这个没明确说明原理 diff --git a/0.0000GitLearn_OT b/0.0000GitLearn_OT new file mode 100644 index 000000000..bbc625927 --- /dev/null +++ b/0.0000GitLearn_OT @@ -0,0 +1 @@ +谢谢分享,获益匪浅 diff --git "a/0.000a\345\255\246\344\271\240/git.py" "b/0.000a\345\255\246\344\271\240/git.py" new file mode 100644 index 000000000..dd70490cb --- /dev/null +++ "b/0.000a\345\255\246\344\271\240/git.py" @@ -0,0 +1,24 @@ +#/usr/bin/python +# -*- coding: UTF-8 -*- +import pymysql +# 创建连接 +conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='root', db='db', charset='utf8') +#创建游标 +cursor = conn.cursor() +cursor.execute("select * from ww_link") + +# 获取剩余结果的第一行数据 +# row_1 = cursor.fetchone() +# print row_1 +# 获取剩余结果前n行数据 +# row_2 = cursor.fetchmany(3) + +# 获取剩余结果所有数据 +row_3 = cursor.fetchall() +print row_3 +conn.commit() +cursor.close() +conn.close() + +this is my name + diff --git "a/0.00Git\345\255\246\344\271\240\347\254\224\350\256\260/tool-git.md" "b/0.00Git\345\255\246\344\271\240\347\254\224\350\256\260/tool-git.md" new file mode 100644 index 000000000..982d9ac43 --- /dev/null +++ "b/0.00Git\345\255\246\344\271\240\347\254\224\350\256\260/tool-git.md" @@ -0,0 +1,197 @@ + +### 版本控制系统 + +集中式:(SVN,CVS) + ++ 工作前都需要把最新代码从中央库 Pull 下来。工作完成然后再 Push 到中央库中,意味着必须联网。受网络限制,并且不安全 + +分布式:(Git,BitKeeper) + ++ 每一台终端都是一个中央服务器。代码保存在本地,十分灵活。 + +--- + +### 时光穿梭 + +#### 工作区和暂存区 + +| 命令组 | 意义 | +| :-------------------------: | :-------------------------------: | +| git add file | 文件添加到暂存区。可反复多次使用,添加多个文件到暂存区 | +| git commit -m "description" | `-m`后面输入的是本次提交的说明。可以一次提交多个文件到当前分支 | +| git status | 查看当前目录的状态 | +| git diff | 查看修改内容 | + +--- + +#### 管理修改 + +| 命令组 | 意义 | +| :------------------------: | :----------------: | +| git log (--pretty=oneline) | 当前文件所有历史版本 | +| cat file | 查看文件内容 | +| git reflog | 查看每一次提交的id | +| git reset --hard commit_id | 回到某一版本。HEAD 就是当前版本 | + +--- + +#### 撤销修改 + +| 命令组 | 意义 | +| :------------------: | :--------------------------------------: | +| git checkout -- file | 丢弃工作区修改。回到最近一次`git commit`或`git add`时的状态 | +| git reset HEAD file | 把暂存区的修改撤销掉 | + +--- + +#### 删除文件 + +| 命令组 | 意义 | +| :---------: | :--------------------------------------: | +| git rm file | 删除文件。删除后可以借助 git checkout 恢复文件到版本库中存在的文件的最新版本 | + +--- + +### 远程仓库 + +#### 添加远程仓库 + +| 命令组 | 意义 | +| :-------------------------: | :------------------------------: | +| git remote add origin [url] | 关联一个远程库 | +| git push -u origin master | 第一次推送master分支的所有内容 | +| git push origin master | 第一次之后每次推送最新修改。推送dev分支到远程origin分支 | + +--- + +#### 从远程仓库克隆 + +| 命令组 | 意义 | +| :--------------------------------------: | :----------------------: | +| git clone [url] | https协议克隆一个仓库。速度慢 | +| git clone git@github.com:[用户名]/[仓库名].git | `ssh`支持的原生`git`协议。克隆一个仓库 | + +--- + +### 分支管理 + +#### 创建与合并分支 + +| 命令组 | 意义 | +| :--------------------: | :----------------: | +| git checkout -b [分支名称] | 创建加切换到分支 | +| git branch [分支名称] | 创建分支 | +| git checkout [分支名称] | 切换到分支 | +| git branch | 查看分支 | +| git merge [分支名称] | 合并指定分支到当前分支 | +| git branch -d [分支名称] | 删除指定分支(确保当前不在此分支上) | + +--- + +#### 解决冲突 + +双方修改同一文件的不同地方不会触发。相反修改同一文件的同一地方才会触发。各自修改提交后,合并时就会出现冲突。我们切换到主分支下,对文件进行最终修改后。再进行提交即可 + +```txt +CONFLICT (content): Merge conflict in [文件名称] +Automatic merge failed; fix conflicts and then commit the result. +``` + +| 命令组 | 意义 | +| :-------------: | :-------: | +| git log --graph | 可以看到分支合并图 | + +--- + +#### 分支管理策略 + +| 命令组 | 意义 | +| :------------------------------: | :--------------------------------------: | +| git merge --no-ff -m "描述" [分支名称] | 合并分支时,强制禁用Fast forward模式。此时Git就会在merge时生成一个新的commit。所以需要加上-m参数 | + ++ 加上`--no-ff`参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并,而`Fast Forward`合并看不出来曾经做过合并。 + +分支策略: `master`分支应该是非常稳定的,也就是仅用来发布新版本,平时不能在上面干活。干活都在`dev`分支上,也就是说,`dev`分支是不稳定的,到某个时候,比如1.0版本发布时,再把`dev`分支合并到`master`上,在`master`分支发布1.0版本。你和你的团队每个人都在`dev`分支上干活,每个人都有自己的分支,时不时地往`dev`分支上合并就可以了。所以团队合作看起来就像这样: + +![](http://ww1.sinaimg.cn/large/006gmCthly1fja91noavhj30du03hjrf.jpg) + +--- + +#### Bug 分支 + +当某一天你在工作时,你的Boss告诉你你之前的代码出现了bug。需要你在一个小时内改完,可是你当前在dev上进行的工作暂时还没有完成没办法提交。预计还有很久的时间,可又必须在一个小时内改完bug。该怎么办: + +| 命令组 | 意义 | +| :-------------------------: | :--------------------------: | +| git stash | 可以把当前工作现场“储藏”起来,等以后恢复现场后继续工作 | +| git stash apply [stash@{0}] | 恢复指定的工作现场。stash 内容并不删除 | +| git stash drop [stash@{0}] | 删除指定 stash | +| git stash pop | 恢复到前一工作现场。并删除该 stash | + +**注意:** + +首先确定要在哪个分支上修复 bug,假定需要在`master`分支上修复,就从`master`创建临时分支`issue-101`。修复完成后,再切换回`master`分支进行合并。最后删除`issue-101`分支。在不同分支上进行修复,工作区中看到的代码不一定是相同的,需要确保这一点。并且在不同分支上进行修复后,最后会合并到该分支上。如果代码要最终发布,你需要再将你分之上的代码`merge`到`master`分支上。 + +--- + +#### 多人协作 + +**注意:** + +合作开发新功能时,最好在一个新的分支上进行新功能的开发,而不去污染主分支。当该功能开发好之后再去合并到主分支即可。 + +| 命令组 | 意义 | +| :--------------------: | :--------------------------------------: | +| git remote -v | 查看远程库的详细信息。( fetch,push 抓取和推送的`origin`的地址 ) | +| git push origin [分支名称] | 推送该分支的本地内容到远程库的分支上。 | + +**注意:** + +这里还有一个学问就是,并不是一定要把本地分支往远程推送,那么,哪些分支需要推送,哪些不需要呢? + ++ `master`分支是主分支,因此要时刻与远程同步 ++ `dev`分支是开发分支,团队所有成员都需要在上面工作,所以也需要与远程同步 + + 多人协作时,大家都会往`master`和`dev`分支上推送各自的修改。 ++ `bug`分支只用于在本地修复bug,就没必要推到远程了,除非老板要看看你每周到底修复了几个bug ++ `feature`分支是否推到远程,取决于你是否和你的同班合作在上面开发 + +| 命令组 | 意义 | +| :--------------------------------------: | :--------------------------------------: | +| git checkout -b branch-name origin/branch-name | 在本地创建和远程分支对应的分支 | +| git branch --set-upstream branch-name origin/branch-name | 建立本地分支和远程分支的关联 | +| git push origin branch-name | 本地新建的分支如果不推送到远程,对其他人就是不可见的, 从本地推送分支到远程(会让你输github的用户名和密码)。 | + +多人协作的工作模式通常是这样: + +1. 首先从远程库clone下项目,然后在本地创建远程`origin`的`dev`分支到本地。然后就可以在`dev`分支上提交修改 +2. 然后可以试图用`git push origin branch-name`推送自己的修改 +3. 如果推送失败,则因为远程分支比你的本地更新,需要先用`git pull`拉取下来最新的提交,如果拉取失败则是因为远程的分支与本地的分支没有建立链接。设置好后再`git pull`进行合并 +4. 如果合并有冲突,则解决冲突,并在本地提交 +5. 没有冲突或者解决掉冲突后,再用`git push origin branch-name`推送就能成功 + +**错误:** + +``` +fatal: Cannot update paths and switch to branch 'dev' at the same time. +Did you intend to checkout 'origin/dev' which can not be resolved as commit? +``` + +**解决:** + +```nginx +git remote show origin + +git remote update + +git fetch + +git checkout -b local-name origin/remote-name +``` + +--- + +> **本文作者:** IIluosions +> +> **本文链接:** [http://www.jiyongguang.xin/2017/07/12/tool-git/](http://www.jiyongguang.xin/2017/07/12/tool-git/) +> +> **版权声明: **本博客所有文章除特别声明外,均采用 [CC BY-NC-SA 3.0 CN](https://creativecommons.org/licenses/by-nc-sa/3.0/cn/) 许可协议。转载请注明出处! diff --git "a/0.0Thinks/git \345\255\246\344\271\240\347\254\224\350\256\260.txt" "b/0.0Thinks/git \345\255\246\344\271\240\347\254\224\350\256\260.txt" new file mode 100644 index 000000000..cc226878c --- /dev/null +++ "b/0.0Thinks/git \345\255\246\344\271\240\347\254\224\350\256\260.txt" @@ -0,0 +1 @@ +打开这个文件的人一定是最帅的人!asdf \ No newline at end of file diff --git a/0.0Thinks/thanks.txt b/0.0Thinks/thanks.txt new file mode 100644 index 000000000..bb836489f --- /dev/null +++ b/0.0Thinks/thanks.txt @@ -0,0 +1,2 @@ +Thanks. +This teach me many things. \ No newline at end of file diff --git a/0.0learngit_ot b/0.0learngit_ot new file mode 100644 index 000000000..f18684a7e --- /dev/null +++ b/0.0learngit_ot @@ -0,0 +1 @@ +thx diff --git "a/0.0\345\255\246\344\271\240\347\254\224\350\256\260(\350\257\267\345\220\204\344\275\215\345\220\214\345\255\246\344\270\215\350\246\201push\345\244\252\345\244\247\347\232\204\346\226\207\344\273\266\344\270\212\346\235\245\357\274\214\347\216\260\345\234\250\344\273\223\345\272\223clone\345\267\262\347\273\217\345\276\210\346\205\242\344\272\206\357\274\214\350\260\242\350\260\242)/GitNotes.md" "b/0.0\345\255\246\344\271\240\347\254\224\350\256\260(\350\257\267\345\220\204\344\275\215\345\220\214\345\255\246\344\270\215\350\246\201push\345\244\252\345\244\247\347\232\204\346\226\207\344\273\266\344\270\212\346\235\245\357\274\214\347\216\260\345\234\250\344\273\223\345\272\223clone\345\267\262\347\273\217\345\276\210\346\205\242\344\272\206\357\274\214\350\260\242\350\260\242)/GitNotes.md" new file mode 100644 index 000000000..b1952e084 --- /dev/null +++ "b/0.0\345\255\246\344\271\240\347\254\224\350\256\260(\350\257\267\345\220\204\344\275\215\345\220\214\345\255\246\344\270\215\350\246\201push\345\244\252\345\244\247\347\232\204\346\226\207\344\273\266\344\270\212\346\235\245\357\274\214\347\216\260\345\234\250\344\273\223\345\272\223clone\345\267\262\347\273\217\345\276\210\346\205\242\344\272\206\357\274\214\350\260\242\350\260\242)/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(\350\257\267\345\220\204\344\275\215\345\220\214\345\255\246\344\270\215\350\246\201push\345\244\252\345\244\247\347\232\204\346\226\207\344\273\266\344\270\212\346\235\245\357\274\214\347\216\260\345\234\250\344\273\223\345\272\223clone\345\267\262\347\273\217\345\276\210\346\205\242\344\272\206\357\274\214\350\260\242\350\260\242)/README.md" "b/0.0\345\255\246\344\271\240\347\254\224\350\256\260(\350\257\267\345\220\204\344\275\215\345\220\214\345\255\246\344\270\215\350\246\201push\345\244\252\345\244\247\347\232\204\346\226\207\344\273\266\344\270\212\346\235\245\357\274\214\347\216\260\345\234\250\344\273\223\345\272\223clone\345\267\262\347\273\217\345\276\210\346\205\242\344\272\206\357\274\214\350\260\242\350\260\242)/README.md" new file mode 100644 index 000000000..ded98c5fe --- /dev/null +++ "b/0.0\345\255\246\344\271\240\347\254\224\350\256\260(\350\257\267\345\220\204\344\275\215\345\220\214\345\255\246\344\270\215\350\246\201push\345\244\252\345\244\247\347\232\204\346\226\207\344\273\266\344\270\212\346\235\245\357\274\214\347\216\260\345\234\250\344\273\223\345\272\223clone\345\267\262\347\273\217\345\276\210\346\205\242\344\272\206\357\274\214\350\260\242\350\260\242)/README.md" @@ -0,0 +1,2 @@ +### 谢谢廖大!下方链接即是我的学习成果。 +- [学习笔记](https://github.com/caozhiqiango/learngit/blob/master/GitNotes.md) diff --git "a/0.0\350\260\242\350\260\242\345\273\226\350\200\201\345\270\210by kxhit.txt" "b/0.0\350\260\242\350\260\242\345\273\226\350\200\201\345\270\210by kxhit.txt" new file mode 100644 index 000000000..e69de29bb 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 000000000..9357d1867 --- /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-niaocaics\345\255\246\344\271\240\347\254\224\350\256\260/nicaocaics-learn_git_note.md" "b/000-niaocaics\345\255\246\344\271\240\347\254\224\350\256\260/nicaocaics-learn_git_note.md" new file mode 100644 index 000000000..e1c4eeed5 --- /dev/null +++ "b/000-niaocaics\345\255\246\344\271\240\347\254\224\350\256\260/nicaocaics-learn_git_note.md" @@ -0,0 +1,99 @@ +# Git学习 +## 首先,感谢廖老师的Git学习教程带我入门 +### 基础知识 +(其实不需要任何基础也可以入门,下面的基础个人觉得是会让你更加容易理解) +1. 指针:这个方便理解分支管理里的创建,删除,以及冲突及其解决策略 +2. Linux的常见基础命令,如ls cd rm mkdir pwd等我个人是在Windows平台下学习的,Windows下的Git bash的使用和Linux使用差别不大 +3. 其他(可能还有别的,我只意识到这俩点。。 +### Git与GitHub的区别 +Git是一个**软件**,是一个分布式版本控制系统 + +Github是一个**在线仓库**,可以自己搭或使用其他,如码云 +### Git本地常用命令总结 +- `git init` + 初始化一个仓库在当前路径 +- `git add 文件名+后缀` + 把一个文件提交到暂存区 +- `git commit -m "说明"` + 把暂存区的文件提交到当前分支 +- `git status` + 查看当前Git的状态 +- `git log` + 查看提交日志 +- `git branch` + 查看当前Git的分支 +- `git branch 分支名称` + 创建新的分支 +- `git checkout 分支名称` + 选择分支,前提该分支要存在 +- `git merge 分支名称` + 将该分支与当前分支合并 +- `git branch -d 分支名称` + 删除该分支 +- `git stash` + 将当前的工作暂存 + + 注:stash存储方式一个栈,可存储多个 +- `git stash list` + 查看暂存的工作 +- `git stash pop` + 恢复最近的工作并将它从暂存删除(像弹出栈顶元素) +- `git tag` + 查看当前标签 +- `git tag 标签名 commmit-id` + 给指定的提交命名标签,commit-id可在日志里找到 +- `git tag -d 标签名` + 删除指定标签 +- 注:第一次使用会让你输入用户名和邮箱使用命令如下: + + `git config --global user.name "Your Name"` + + `git config --global user.email "email@example.com"` + +### GitHub相关总结 +1. 你要有一个Github账号 +2. 查看你是否有.ssh,有则备份删除,若无输入如下指令: + + `ssh-keygen -t rsa -C "youremail@example.com"` + + 将会生成id_isa(私钥)和id_isa.pub(公钥) + 找到公钥文件id_isa.pub,用记事本打开,全选复制粘贴,保存到Github上即可 +3. 将本地与GitHub远程库关联,输入如下指令: + + `git remote add origin git@github.com:???????/learngit.git` + + 将???????区域改成GitHub的用户名,远程库名字为origin,可以变化 + + 注:第一次使用ssh是会警告,警告内容如下: + + `` + The authenticity of host 'github.com (xx.xx.xx.xx)' can't be established. +RSA key fingerprint is xx.xx.xx.xx.xx. +Are you sure you want to continue connecting (yes/no)? + `` + + 此时输入yes再敲击回车即可。 +4. 把本地内容推送到远程 + + 第一次推送输入如下指令: + + `git push -u origin master` + + 之后推送取消掉-u参数即可,指令如下: + + `git push origin master` +5. 从远程库克隆,输入命令 + + `git clone ???` + + ???部分可以在GitHub的仓库上找到,即: + + `git@github.com:niaocaics/learn_git.git` + (例如,这是我的) + ![例图](https://wx4.sinaimg.cn/mw690/005I58ycly1fnzt3062xbj30gq083tc3.jpg) + +### 其他 +还有一些个人觉得比较容易,廖老师也讲得很清楚了,所以没有列出 + +### 最后 +再次感谢廖老师的教程,欢迎大家与我交流,我的邮箱是:niaocaics@163.com \ No newline at end of file diff --git a/000.txt b/000.txt new file mode 100755 index 000000000..22269581f --- /dev/null +++ b/000.txt @@ -0,0 +1,4 @@ +谢谢廖老师的教程,受益匪浅。 +sdfadfasdfasdfasdfasdf +added by yeyuming. centos/local +借楼码字! diff --git a/00000.txt b/00000.txt new file mode 100755 index 000000000..83a2a1f35 --- /dev/null +++ b/00000.txt @@ -0,0 +1,5 @@ +wangdong +changed by juhaotian +add a new line to pull request +nice +i just want to test the pull Request Function. diff --git "a/00000/\346\226\260\345\273\272\346\226\207\346\234\254\346\226\207\346\241\243.txt" "b/00000/\346\226\260\345\273\272\346\226\207\346\234\254\346\226\207\346\241\243.txt" new file mode 100644 index 000000000..e69de29bb diff --git a/000000.txt b/000000.txt new file mode 100755 index 000000000..f18ed1382 --- /dev/null +++ b/000000.txt @@ -0,0 +1,2 @@ +Thanks for your teaching. Very good ! +it doesn't matter。 diff --git a/000000000001.md b/000000000001.md new file mode 100644 index 000000000..531cdcbaf --- /dev/null +++ b/000000000001.md @@ -0,0 +1,4 @@ + +# test pull request + +## i want diff --git a/00000000learnGit_ot b/00000000learnGit_ot new file mode 100644 index 000000000..6fc012c09 --- /dev/null +++ b/00000000learnGit_ot @@ -0,0 +1 @@ +感谢分享,获益匪浅 diff --git a/000011.txt b/000011.txt new file mode 100755 index 000000000..1a35ef7af --- /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 000000000..fa10a0458 --- /dev/null +++ b/0000_thanks.txt @@ -0,0 +1,3 @@ +谢谢廖雪峰老师的课程! +AAAA +浅显易懂,很有收获。 diff --git a/0001000.txt b/0001000.txt new file mode 100755 index 000000000..484ba93ef --- /dev/null +++ b/0001000.txt @@ -0,0 +1 @@ +This is a test. diff --git a/000ooo000.i b/000ooo000.i new file mode 100644 index 000000000..7bb13b5b2 --- /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 000000000..05486e60d --- /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 000000000..e4428580a --- /dev/null +++ b/007.learnGit @@ -0,0 +1 @@ +007.http://www.liaoxuefeng.com/.挺好用的 diff --git a/0123456789.txt b/0123456789.txt new file mode 100644 index 000000000..e69de29bb diff --git "a/01_Git\345\255\246\344\271\240/Clearlove9.txt" "b/01_Git\345\255\246\344\271\240/Clearlove9.txt" new file mode 100644 index 000000000..a547c9672 --- /dev/null +++ "b/01_Git\345\255\246\344\271\240/Clearlove9.txt" @@ -0,0 +1,6 @@ +hello , teacher Liao. +My name is Clearlove9. + +this is my test fork next pull request,please let go... + +hi 修改修改看看可以不 diff --git "a/01\346\225\260\346\215\256\345\272\223/MYSQL\347\272\246\346\235\237.md" "b/01\346\225\260\346\215\256\345\272\223/MYSQL\347\272\246\346\235\237.md" new file mode 100644 index 000000000..167c44fc9 --- /dev/null +++ "b/01\346\225\260\346\215\256\345\272\223/MYSQL\347\272\246\346\235\237.md" @@ -0,0 +1,242 @@ +##mysql约束之alter总结 + +**ALTER TABLE** + +- MODIFY 修改 +- ADD 增加 +- DROP 删除 + +--- + +- 非空 NOT NULL +- UNIQUE KEY 唯一 +- DEFUALUT 默认 +- AUTO_INCREMENT (必须与主键一起使用) + +--- +实例演示: + +**<1> 创建数据表tb1** + + mysql> create table tb1(id int); + Query OK, 0 rows affected (0.04 sec) + + mysql> desc tb1; + +-------+---------+------+-----+---------+-------+ + | Field | Type | Null | Key | Default | Extra | + +-------+---------+------+-----+---------+-------+ + | id | int(11) | YES | | NULL | | + +-------+---------+------+-----+---------+-------+ + +**<2> 为tb1添加非空约束 not null** + + mysql> alter table tb1 + -> modify id int not null + -> ; + Query OK, 0 rows affected (0.07 sec) + Records: 0 Duplicates: 0 Warnings: 0 + + mysql> desc tb1; + +-------+---------+------+-----+---------+-------+ + | Field | Type | Null | Key | Default | Extra | + +-------+---------+------+-----+---------+-------+ + | id | int(11) | NO | | NULL | | + +-------+---------+------+-----+---------+-------+ + 1 row in set (0.00 sec) + +**注意:** 删除非空约束使用同样方法 + +**<3> 为tb1添加唯一键 unique key** + + mysql> alter table tb1 + -> add unique key (id) + -> ; + Query OK, 0 rows affected (0.06 sec) + Records: 0 Duplicates: 0 Warnings: 0 + + mysql> desc tb1; + +-------+---------+------+-----+---------+-------+ + | Field | Type | Null | Key | Default | Extra | + +-------+---------+------+-----+---------+-------+ + | id | int(11) | NO | PRI | NULL | | + +-------+---------+------+-----+---------+-------+ + 1 row in set (0.00 sec) + +**注意 :** not null + unique key 具有 primary key的功能,当表中没有primary key 时, not null + unique key = primary key + +但是我们运行show create table tb1\G 查看详细信息时可以依然看到为 nunque key。 + + mysql> show create table tb1\G + ********************** 1. row ********************** + Table: tb1 + Create Table: CREATE TABLE `tb1` ( + `id` int(11) NOT NULL, + UNIQUE KEY `id` (`id`) + ) ENGINE=InnoDB DEFAULT CHARSET=utf8 + 1 row in set (0.00 sec) + + +**<4> 为tb1添加主键 primary key(在一张表中只能有一个主键)** + + mysql> alter table tb1 + -> add primary key (id) + -> ; + Query OK, 0 rows affected (0.06 sec) + Records: 0 Duplicates: 0 Warnings: 0 + + mysql> desc tb1; + +-------+---------+------+-----+---------+-------+ + | Field | Type | Null | Key | Default | Extra | + +-------+---------+------+-----+---------+-------+ + | id | int(11) | NO | PRI | NULL | | + +-------+---------+------+-----+---------+-------+ + 1 row in set (0.00 sec) + +**注意:** 虽然此处表结构表面上未发生变化,但是我们运行show create table tb1\G 查看详细信息就可以发现已经添加上主键了。 + + mysql> show create table tb1\G + *************************** 1. row *************************** + Table: tb1 + Create Table: CREATE TABLE `tb1` ( + `id` int(11) NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `id` (`id`) + ) ENGINE=InnoDB DEFAULT CHARSET=utf8 + 1 row in set (0.00 sec) + +**<5> 删除主键 primary key** + + mysql> alter table tb1 + -> drop primary key + -> ; + Query OK, 0 rows affected (0.05 sec) + Records: 0 Duplicates: 0 Warnings: 0 + + mysql> show create table tb1\G + *************************** 1. row *************************** + Table: tb1 + Create Table: CREATE TABLE `tb1` ( + `id` int(11) NOT NULL, + UNIQUE KEY `id` (`id`) + ) ENGINE=InnoDB DEFAULT CHARSET=utf8 + 1 row in set (0.00 sec) + +**注意:** 因为主键是非空且唯一的,所以删除时直接删除主键即可,不用跟具体的列名。 + +**<5> 删除唯一键 unique key** + + mysql> alter table tb1 + -> drop key id + -> ; + Query OK, 0 rows affected (0.02 sec) + Records: 0 Duplicates: 0 Warnings: 0 + + mysql> show create table tb1\G + *************************** 1. row *************************** + Table: tb1 + Create Table: CREATE TABLE `tb1` ( + `id` int(11) NOT NULL + ) ENGINE=InnoDB DEFAULT CHARSET=utf8 + 1 row in set (0.00 sec) + + mysql> desc tb1; + +-------+---------+------+-----+---------+-------+ + | Field | Type | Null | Key | Default | Extra | + +-------+---------+------+-----+---------+-------+ + | id | int(11) | NO | | NULL | | + +-------+---------+------+-----+---------+-------+ + 1 row in set (0.00 sec) + +**注意:**add操作是需要在列名后加(),drop不需要 + + +**<6> 把id这一列设置为自增长** + + mysql> desc tb1; + +-------+---------+------+-----+---------+-------+ + | Field | Type | Null | Key | Default | Extra | + +-------+---------+------+-----+---------+-------+ + | id | int(11) | NO | | NULL | | + +-------+---------+------+-----+---------+-------+ + 1 row in set (0.00 sec) + + mysql> alter table tb1 + -> modify id int primary key auto_increment + -> ; + Query OK, 0 rows affected (0.04 sec) + Records: 0 Duplicates: 0 Warnings: 0 + + mysql> desc tb1; + +-------+---------+------+-----+---------+----------------+ + | Field | Type | Null | Key | Default | Extra | + +-------+---------+------+-----+---------+----------------+ + | id| int(11) | NO | PRI | NULL | auto_increment | + +-------+---------+------+-----+---------+----------------+ + 1 row in set (0.00 sec) + +**<7> 添加外键 foreign key** + +**首先,我们来创建tb2** + + mysql> create table tb2( + -> s_id int primary key, + -> name varchar(20) not null + -> ); + Query OK, 0 rows affected (0.03 sec) + +**其次,我们假设后期需要用到tb2关联tb1,我们添加foreign key** + + mysql> alter table tb2 + -> add constraint tb2_1_fk foreign key (s_id) references tb1 (id) + -> ; + Query OK, 0 rows affected (0.05 sec) + Records: 0 Duplicates: 0 Warnings: 0 +**注意:** constraint tb2_1_fk 表示将外键名称定为tb2_1_fk,如果我们在添加时不定义,系统就会自动分配外键名称。 + +**最后我们查询表详细信息** + + mysql> show create table tb2\G + *************************** 1. row *************************** + Table: tb2 + Create Table: CREATE TABLE `tb2` ( + `s_id` int(11) NOT NULL, + `name` varchar(20) NOT NULL, + PRIMARY KEY (`s_id`), + CONSTRAINT `tb2_1_fk` FOREIGN KEY (`s_id`) REFERENCES `tb1` (`id`) + ) ENGINE=InnoDB DEFAULT CHARSET=utf8 + 1 row in set (0.00 sec) + +**<8> 删除外键 foreign key** + + mysql> alter table tb2 + -> drop foreign key tb2_1_fk; + Query OK, 0 rows affected (0.05 sec) + Records: 0 Duplicates: 0 Warnings: 0 + + mysql> show create table tb2\G + *************************** 1. row *************************** + Table: tb2 + Create Table: CREATE TABLE `tb2` ( + `s_id` int(11) NOT NULL, + `name` varchar(20) NOT NULL, + PRIMARY KEY (`s_id`) + ) ENGINE=InnoDB DEFAULT CHARSET=utf8 + 1 row in set (0.00 sec) + +**<9> 设置初始默认值 default** + + mysql> alter table tb2 + -> add age int not null default 18; + Query OK, 0 rows affected (0.04 sec) + Records: 0 Duplicates: 0 Warnings: 0 + + mysql> desc tb2; + +-------+-------------+------+-----+---------+-------+ + | Field | Type | Null | Key | Default | Extra | + +-------+-------------+------+-----+---------+-------+ + | s_id | int(11) | NO | PRI | NULL | | + | name | varchar(20) | NO | | NULL | | + | age | int(11) | NO | | 18 | | + +-------+-------------+------+-----+---------+-------+ + 3 rows in set (0.01 sec) + diff --git a/0314.txt b/0314.txt new file mode 100755 index 000000000..3fe31826b --- /dev/null +++ b/0314.txt @@ -0,0 +1 @@ +谢谢!*2 diff --git a/0393yuchaoWu/thanks.txt b/0393yuchaoWu/thanks.txt new file mode 100644 index 000000000..c0bcfb9fc --- /dev/null +++ b/0393yuchaoWu/thanks.txt @@ -0,0 +1 @@ +thank you! \ No newline at end of file diff --git a/03q.txt b/03q.txt new file mode 100644 index 000000000..cf6fdd60c --- /dev/null +++ b/03q.txt @@ -0,0 +1,4 @@ +test pull request and 3q this tutorial. +thankyou again. +add a new line in order to test again,thankyou! + diff --git a/0911_10.jpg b/0911_10.jpg new file mode 100755 index 000000000..61ae60dfc 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 000000000..69357ed4f 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 000000000..9eb4f6af1 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 000000000..2e5390fa3 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 000000000..b61012bee 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 000000000..a3dcc8b94 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 000000000..28769694f Binary files /dev/null and b/0911_9.jpg differ diff --git a/0919 b/0919 new file mode 100755 index 000000000..03297322d --- /dev/null +++ b/0919 @@ -0,0 +1 @@ +Have a good night diff --git a/0README.md b/0README.md new file mode 100755 index 000000000..41c8ee684 --- /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/0_thanks_gw.txt b/0_thanks_gw.txt new file mode 100644 index 000000000..5f222d95c --- /dev/null +++ b/0_thanks_gw.txt @@ -0,0 +1 @@ +thanks \ No newline at end of file diff --git a/0yupeng.txt b/0yupeng.txt new file mode 100755 index 000000000..04c10bb7f --- /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 000000000..40c55985f --- /dev/null +++ "b/0\345\244\232\350\260\242\345\273\226\350\200\201\345\270\210.txt" @@ -0,0 +1,8 @@ +一步一步学下来,收获颇丰! +感谢廖老师! +祝老师身体健康!工作顺利! +祝老师心想事成,万事如意! + +测试一下修改别人的txt,push后,是由廖老师解决冲突吗?如果有很多pull request,岂不是很累... +祝老师身体健康!工作顺利! +祝老师心想事成,万事如意! diff --git "a/0\347\234\213\344\272\206\347\254\254\344\272\214\351\201\215\357\274\214\346\204\237\350\260\242.txt" "b/0\347\234\213\344\272\206\347\254\254\344\272\214\351\201\215\357\274\214\346\204\237\350\260\242.txt" new file mode 100644 index 000000000..8f3112e16 --- /dev/null +++ "b/0\347\234\213\344\272\206\347\254\254\344\272\214\351\201\215\357\274\214\346\204\237\350\260\242.txt" @@ -0,0 +1,7 @@ + + +非常感谢廖老师, +去年在学校老师推荐我看了一遍,当时知识浅薄,很懵懂,这两台又 +看了一遍,觉得非常浅显易懂,谢谢老师。 + +github:dchaofei diff --git a/1.txt b/1.txt new file mode 100644 index 000000000..426bc4cf6 --- /dev/null +++ b/1.txt @@ -0,0 +1 @@ +i love myself and i be with me 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 000000000..d42fbadbd --- /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,4 @@ +跟着老师的教程,一步一步学下来的,非常受益! +不过,有个问题想请教下老师,就是老师在讲版本回退时(git reset --hard HEAD^), +. +大家好大家好 \ No newline at end of file diff --git a/11 b/11 new file mode 100644 index 000000000..145169874 --- /dev/null +++ b/11 @@ -0,0 +1 @@ +try pull request diff --git a/110102031.txt b/110102031.txt new file mode 100755 index 000000000..08d176d27 --- /dev/null +++ b/110102031.txt @@ -0,0 +1 @@ +jdlaksjdlksajkld diff --git "a/11041901\345\244\232\347\224\250\345\260\261\345\245\275\344\272\206\345\230\233~\350\277\230\351\234\200\350\246\201\345\277\203\345\276\227\357\274\237.txt" "b/11041901\345\244\232\347\224\250\345\260\261\345\245\275\344\272\206\345\230\233~\350\277\230\351\234\200\350\246\201\345\277\203\345\276\227\357\274\237.txt" new file mode 100644 index 000000000..e69de29bb diff --git a/111.txt b/111.txt new file mode 100644 index 000000000..dc9ff906e --- /dev/null +++ b/111.txt @@ -0,0 +1 @@ +test add and modified diff --git a/11111.txt b/11111.txt new file mode 100644 index 000000000..d48f8d060 --- /dev/null +++ b/11111.txt @@ -0,0 +1 @@ +我想试一下...pullrequst.... \ No newline at end of file diff --git a/1111111 b/1111111 new file mode 100644 index 000000000..c96ab1ff8 --- /dev/null +++ b/1111111 @@ -0,0 +1 @@ +2222222222222222222 diff --git a/111111111111111111111111111111111111111111111111 b/111111111111111111111111111111111111111111111111 new file mode 100644 index 000000000..d00491fd7 --- /dev/null +++ b/111111111111111111111111111111111111111111111111 @@ -0,0 +1 @@ +1 diff --git a/1127811371@qq.com b/1127811371@qq.com new file mode 100755 index 000000000..119f076cf --- /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 100644 index 000000000..72bbc40df --- /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/1172426418@qq.com.txt b/1172426418@qq.com.txt new file mode 100644 index 000000000..e1e64933a --- /dev/null +++ b/1172426418@qq.com.txt @@ -0,0 +1,64 @@ +感谢廖老师的讲解,很多不懂的地方评论区都指出来了,感觉学到了很多东西,谢谢! + + +git init创建仓库 +git add 添加文件 +git commit -m “更新信息” +git log 最初版本到当前版本日志 +git reflog所有版本日志 +gitk 图形界面所有版本日志 +git checkout [commit_id] -- [file_name] 指定 +git diff #是工作区(work dict)和暂存区(stage)的比较 +git diff --cached #是暂存区(stage)和分支(master)的比较 +工作区(所在的超市) 暂存区stage(购物车的东西) master(所有超市买的东西) +git rm 删除文件 +git remote add origin git@github.com.. 添加远程库 +ssh -keygen -t rsa -C “1172426418@qq.com” 生成SSH key +git checkout 切换分支 +git checkout -b 创建并切换分支 +git branch -d 删除分支 +git branch -D 强制删除分支 +git pull:相当于是从远程获取最新版本并merge到本地 +git pull origin master +上述命令其实相当于git fetch 和 git merge +在实际使用中,git fetch更安全一些,因为在merge前,我们可以查看更新情况,然后再决定是否合并。 + +在github上创建仓库: +Create a new repository on the command line + + +touch README.md +git init +git add README.md +git commit -m "first commit" +git remote add origin https://github.com/BrentHuang/MyRepo.git +git push -u origin master + + +在本地新建一个分支: git branch Branch1 +切换到你的新分支: git checkout Branch1 +将新分支发布在github上: git push origin Branch1 +在本地删除一个分支: git branch -d Branch1 +在github远程端删除一个分支: git push origin :Branch1 (分支名前的冒号代表删除) + +直接使用git pull和git push的设置 +git branch --set-upstream-to=origin/master master +git branch --set-upstream-to=origin/ThirdParty ThirdParty +git config --global push.default matching + +推送分支,就是把该分支上的所有本地提交推送到远程库。推送时,要指定本地分支,这样,Git就会把该分支推送到远程库对应的远程分支上: + +$ git push origin master +如果要推送其他分支,比如dev,就改成: + +$ git push origin dev + +为什么commit id需要用这么一大串数字表示呢?因为Git是分布式的版本控制系统, +后面我们还要研究多人在同一个版本库里工作,如果大家都用1,2,3……作为版本号,那肯定就冲突了。 + +而图片、视频这些二进制文件,虽然也能由版本控制系统管理,但没法跟踪文件的变化,只能把二进制文件 +每次改动串起来,也就是只知道图片从100KB改成了120KB,但到底改了啥,版本控制系统不知道,也没法知道。 + +本地项目推送到线上空库中应保证空库中的文件都在本地,如readme文件 +git pull --rebase origin master获取readme文件 +然后在推送 push \ No newline at end of file diff --git a/11_sys0613.txt b/11_sys0613.txt new file mode 100755 index 000000000..93880d085 --- /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 000000000..e69de29bb diff --git a/123.txt b/123.txt new file mode 100644 index 000000000..cd1b07f6d --- /dev/null +++ b/123.txt @@ -0,0 +1 @@ +change 11222222 diff --git a/12345.txt b/12345.txt new file mode 100644 index 000000000..c5a8246c0 --- /dev/null +++ b/12345.txt @@ -0,0 +1,4 @@ +12345 +54321 +1234567 + diff --git a/1459525376@qq.com.txt b/1459525376@qq.com.txt new file mode 100644 index 000000000..d9d57e220 --- /dev/null +++ b/1459525376@qq.com.txt @@ -0,0 +1,3 @@ + 谢谢廖老师,我今年刚毕业,以前大学时候就知道有Git这个东西,当网上别人写的帖子都只是几个简单的命令, +没有前因后果,也没有老师讲的系统,看了老师写的教程,学了好多东西,今后还会继续努力。祝老师身体健康,事业高升。 + --2018.01.25 \ No newline at end of file diff --git a/17-3-6-familyi.txt b/17-3-6-familyi.txt new file mode 100644 index 000000000..aaa684c8b --- /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/17.11.26\350\260\242\350\260\242\345\273\226\350\200\201\345\270\210.txt" "b/17.11.26\350\260\242\350\260\242\345\273\226\350\200\201\345\270\210.txt" new file mode 100644 index 000000000..712fab797 --- /dev/null +++ "b/17.11.26\350\260\242\350\260\242\345\273\226\350\200\201\345\270\210.txt" @@ -0,0 +1,93 @@ +1.初始化一个Git仓库,使用git init命令。 +添加文件到Git仓库,分两步: +第一步,使用命令git add ,注意,可反复多次使用,添加多个文件; +第二步,使用命令git commit(git commit -a提交所以修改),完成。 + +2.如果git status告诉你有文件被修改过,用git diff可以查看修改内容。 + +3.HEAD指向的版本就是当前版本,因此,Git允许我们在版本的历史之间穿梭,使用命令git reset --hard commit_id。 +穿梭前,用git log(git log --pretty=oneline)可以查看提交历史,以便确定要回退到哪个版本。 +要重返未来,用git reflog查看命令历史,以便确定要回到未来的哪个版本。 + +4. +工作区(Working Directory),比如learngit文件夹就是一个工作区。 +版本库(Repository),工作区隐藏目录.git,不算工作区。版本库包括叫stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD。 + +5.Git跟踪修改而不是文件,每次修改,如果不add到暂存区,那就不会加入到commit中。 + +6.撤销修改 +场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout -- file。 +git checkout其实是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”。 + +场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD file,就回到了场景1,第二步按场景1操作。 + +场景3:已经提交了不合适的修改到版本库时,想要撤销本次提交,参考版本回退一节,不过前提是没有推送到远程库。 + +7.删除文件 +本地删除rm +从版本库中删除,git rm并git commit +误删恢复git checkout -- file + +8.远程仓库 +8.1添加远程仓库 +git remote add origin git@github.com:blueyescode/learngit.git +关联后,使用命令git push -u origin master第一次推送master分支的所有内容到远程库origin +此后,每次本地提交后,只要有必要,就可以使用命令git push origin master推送最新修改。 +8.2克隆远程库 + +git clone git@github.com:blueyescode/gitskills.git +把远程库gitskills克隆到本地 + + +9.分支管理 +9.1创建与合并分支 +查看分支:git branch +创建分支:git branch +删除分支:git branch -d +切换分支:git checkout +创建+切换分支:git checkout -b +合并某分支到当前分支:git merge +9.2解决冲突 +当Git无法自动合并分支时,就必须首先解决冲突。解决冲突后,再提交,合并完成。 +用git log --graph命令可以看到分支合并图。 +9.3分支管理策略 +合并分支时,加上--no-ff参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并,而fast forward合并就看不出来曾经做过合并。 +9.4bug分支 +git stash保存现场 +git stash list查看 +git stash apply恢复,git stash apply stash@{0}恢复指定stash +git stash drop删除 +git stash pop恢复并删除 +9.5多人协作 + 查看远程库信息,使用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,如果有冲突,要先处理冲突。 + +10.标签管理 +命令git tag 用于新建一个标签,默认为HEAD,也可以指定一个commit id:git tag commit_id; +git tag -a -m "blablabla..."可以指定标签信息; +git tag -s -m "blablabla..."可以用PGP签名标签; +命令git tag可以查看所有标签。 +git show 查看标签信息 +命令git push origin 可以推送一个本地标签; +命令git push origin --tags可以推送全部未推送过的本地标签; +命令git tag -d 可以删除一个本地标签; +命令git push origin :refs/tags/可以删除一个远程标签。 + + + + + + + + + + + + + + + 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 000000000..3a079bbe7 --- /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 000000000..3a079bbe7 --- /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 000000000..c6c41c99c --- /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 100644 index 000000000..cfbacb455 --- /dev/null +++ b/2 @@ -0,0 +1,4 @@ +thanks +for your help + + diff --git a/2002wmj.txt b/2002wmj.txt new file mode 100644 index 000000000..738c4520a --- /dev/null +++ b/2002wmj.txt @@ -0,0 +1 @@ +谢谢老师,帮我request一下吧。 diff --git a/201113880132.txt b/201113880132.txt new file mode 100755 index 000000000..70aa12da5 --- /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 settingsSSH Keysҳ +SSH keyùԿ + +һдӰ汾ͬԶ̵gitunamepwordpush +Ǵӱֱл + +һҪԼ˺cloneֿ⣬޸ġforkclone + +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 ϲ֧pagemastercheckoutmaster֧ +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 100644 index 000000000..a5d19e87b --- /dev/null +++ b/20150427add.txt @@ -0,0 +1 @@ +asdfasdfasdfasdfasdf diff --git a/20151224_test.txt b/20151224_test.txt new file mode 100755 index 000000000..92b373c8a --- /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 000000000..5f5534782 --- /dev/null +++ b/20160407.txt @@ -0,0 +1 @@ +Thanks!! diff --git a/201604221123 b/201604221123 new file mode 100755 index 000000000..c298fe48d --- /dev/null +++ b/201604221123 @@ -0,0 +1 @@ +github test diff --git a/20160517 b/20160517 new file mode 100755 index 000000000..7421001df --- /dev/null +++ b/20160517 @@ -0,0 +1,2 @@ +试试运气 +以前只是单纯的用来做备份,今天系统的看了下,大概知道怎么用git了,非常感谢! diff --git a/20160831.txt b/20160831.txt new file mode 100755 index 000000000..cfcf4f31a --- /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 000000000..854f81007 --- /dev/null +++ b/20160923.txt @@ -0,0 +1 @@ +谢谢廖老师,写的很好,受益匪浅 diff --git a/20160929.txt b/20160929.txt new file mode 100755 index 000000000..974c02b7b --- /dev/null +++ b/20160929.txt @@ -0,0 +1 @@ +通俗易懂,受益匪浅!谢谢! \ No newline at end of file diff --git a/20170328.txt b/20170328.txt new file mode 100644 index 000000000..248b36377 --- /dev/null +++ b/20170328.txt @@ -0,0 +1,4 @@ +Today is March 28th,2017. +Thank you for Mr.Liao. +I study git by your blog. +This text file means a test and thanksgiving. diff --git a/20170409gitlearningnote.txt b/20170409gitlearningnote.txt new file mode 100644 index 000000000..a00b58fd1 --- /dev/null +++ b/20170409gitlearningnote.txt @@ -0,0 +1,48 @@ + ● 初始化 git init + ● 添加 git add 文件名 + ● 提交 git commit -m 字符串 + ● 查看状态git status + ● 查看改动git diff 文件名 + ● 查看历史记录:git log 可以加上--pretty=oneline 参数 + ● 版本回退 git reset --hard HEAD^ //HEAD^表示上一个版本head^^表示上上个版本 + ● 也可以通过 git reset --hard [commit id]变成未来的版本 + ● 查看历史命令可以用 git reflog + ● 备注:HEAD指向的版本就是当前的版本 + ● git checkout -- file 可以丢弃工作区的修改// +//checkout就是把版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原” + ● git reset HEAD file可以把暂存区的修改撤销掉(unstage),重新放回工作区: + ● 场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout -- file。 + ● 场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD file,就回到了场景1,第二步按场景1操作。 + ● 场景3:已经提交了不合适的修改到版本库时,想要撤销本次提交,参考版本回退一节,不过前提是没有推送到远程库。 + ○ 要关联一个远程库,使用命令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:michaelliao/gitskills.git //将 远程仓库克隆到本地 + ● Git鼓励大量使用分支: + ● 查看分支:git branch + ● 创建分支:git branch + ● 切换分支:git checkout + ● 创建+切换分支:git checkout -b + ● 合并某分支到当前分支:git merge + ● 删除分支:git branch -d + ● 当Git无法自动合并分支时,就必须首先解决冲突。解决冲突后,再提交,合并完成。 + ● 用git log --graph命令可以看到分支合并图 + ● 合并分支时,加上--no-ff参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并,而fast forward合并就看不出来曾经做过合并。 + ● 当手头工作没有完成时,先把工作现场git stash一下,然后去修复bug,修复后,再git stash pop,回到工作现场。 + ● 开发一个新feature,最好新建一个分支; + ● 如果要丢弃一个没有被合并过的分支,可以通过git branch -D 强行删除。 + ● 查看远程库信息,使用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 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/可以删除一个远程标签 + ● \ No newline at end of file diff --git a/20170427-git.txt b/20170427-git.txt new file mode 100644 index 000000000..44497c0eb --- /dev/null +++ b/20170427-git.txt @@ -0,0 +1 @@ +谢谢大神的git 讲解 \ No newline at end of file diff --git a/20170630.txt b/20170630.txt new file mode 100644 index 000000000..144d53402 --- /dev/null +++ b/20170630.txt @@ -0,0 +1,2 @@ +廖雪峰老师的教程做的非常棒,从中收获了很多。 +希望廖老师能够通过这次pull request,以便能够继续学习的进程。 diff --git a/20170928.txt b/20170928.txt new file mode 100644 index 000000000..f90f7bda3 --- /dev/null +++ b/20170928.txt @@ -0,0 +1 @@ +感谢廖老师的教程,收获颇多。 diff --git a/20171017.txt b/20171017.txt new file mode 100644 index 000000000..c8b43e086 --- /dev/null +++ b/20171017.txt @@ -0,0 +1 @@ +Awesome! Thanks a lot for your python course! diff --git a/20171108.txt b/20171108.txt new file mode 100644 index 000000000..12799ccbe --- /dev/null +++ b/20171108.txt @@ -0,0 +1 @@ +good diff --git a/20171112 b/20171112 new file mode 100644 index 000000000..d148dc849 --- /dev/null +++ b/20171112 @@ -0,0 +1 @@ +感谢! diff --git a/20171129.txt b/20171129.txt new file mode 100644 index 000000000..e69de29bb diff --git a/2017327/2017327.txt b/2017327/2017327.txt new file mode 100644 index 000000000..323c6402a --- /dev/null +++ b/2017327/2017327.txt @@ -0,0 +1 @@ +2017327 \ 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 000000000..d97229c8f --- /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/20180201.txt b/20180201.txt new file mode 100644 index 000000000..d904a258e --- /dev/null +++ b/20180201.txt @@ -0,0 +1,2 @@ + +通俗移动,非常非常棒的教程! \ No newline at end of file diff --git a/20180224.txt b/20180224.txt new file mode 100644 index 000000000..d58d0eff9 --- /dev/null +++ b/20180224.txt @@ -0,0 +1 @@ +zouyu-mb push diff --git a/20180311zingTse/gitNote.txt b/20180311zingTse/gitNote.txt new file mode 100644 index 000000000..349af8c48 --- /dev/null +++ b/20180311zingTse/gitNote.txt @@ -0,0 +1,224 @@ +yum install -y git + +git config --global user.name "YourName" +git config --global user.email "email@example.com" 自报家门 + +mkdir learngit +cd learngit +git init 初始化仓库,包含.git目录 + +vi readme.txt +git add readme.txt 这步可以add多次,例如 git add file1; git add file2 git add file3; +git commit -m "wrote a readme file" 接上: git commit -m "add 3 file" + + +git status 查看当前仓库状态 + 1. Changes not staged for commit: 修改,但未add和commit + 2. Changes to be committed: 修改,已add,未commit + 3.nothing to commit (working directory clean) 没有需要提交的修改 + +git diff readme.txt 顾名思义就是查看difference,显示的格式正是Unix通用的diff格式,查看不同 + +如果git status告诉你有文件被修改过,用git diff可以查看修改内容。 + + + + +git log 显示从最近到最远的提交日志(也可以加上--pertty=oneline简化输出) + +git reset --hard HEAD^ 回退到上个版本,HEAD后面跟几个'^',就回退几个版本,例如HEAD^^^回退3个版本,版本太多也可以写成 + +HEAD~100 + +git reset --hard COMMITID 回到COMMITID所在的版本 + +Git的版本回退速度非常快,因为Git在内部有个指向当前版本的HEAD指针,当你回退版本的时候,Git仅仅是把HEAD从指向3改为指向2,然后顺便把 + +工作区的文件更新了。所以你让HEAD指向哪个版本号,你就把当前版本定位在哪。 + + + + +git reflog 显示每次版本更新的记录 + + +HEAD指向的版本就是当前版本,因此,Git允许我们在版本的历史之间穿梭,使用命令git reset --hard commit_id。 + +穿梭前,用git log可以查看提交历史,以便确定要回退到哪个版本。 + +要重返未来,用git reflog查看命令历史,以便确定要回到未来的哪个版本。 + + + +从远程库克隆 + +git clone git@server-name:path/repo-name.git +实际上,Git支持多种协议,默认的git://使用ssh,也可以使用https等其他协议,但通过ssh支持的原生git协议速度最快 + + + + + +工作区和暂存区 + +工作区就是实际操作的目录 + +在版本库中(.git) 有很多东西,最重要的就是称为stage(或index)的暂存区,还有git为我们自动创建的第一个分支master,以及指向master + +的一个指针HEAD + +1. git add 实际上就是把文件修改添加到暂存区 +2. git commit 实际上就是把暂存区的所有内容提交到当前分支 + +其中,在我们创建git版本库时,git为我们自动创建了唯一一个master分支 +,git commit就是往分支上提交修改 + + + + + +管理修改 + +Git跟踪并管理的是修改,而非文件 + +例如:修改一个文件后,先git add ,在修改这个文件,在git commit 后用git status查看状态,发现第二次修改没有被提交 +Git管理的是修改,当你用git add命令后,在工作区的第一次修改被放入暂存区,准备提交,但是,在工作区的第二次修改并没有放入暂存区,所 + +以,git commit只负责把暂存区的修改提交了,也就是第一次的修改被提交了,第二次的修改不会被提交。 + + + +撤销修改 + +场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout -- file。 + git checkout -- file命令中的--很重要,没有--,就变成了“切换到另一个分支”的命令,我们在后面的分支管理中会再次遇到git + +checkout命令。 + +场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD file,就回到了场景1 + +,第二步按场景1操作。 + +场景3:已经提交了不合适的修改到版本库时,想要撤销本次提交,参考版本回退一节,不过前提是没有推送到远程库。 + + + +删除文件 +rm -f test.txt +git rm file +git commit -m "remove file" + +误删git checkout -- test.txt + + + + +添加远程库 + +注册GitHub账号 +1.在GitHub新建一个repository +2.git remote add origin git@github.com:michaelliao/learngit.git 关联一个远程库 +3.git push -u origin master 第一次推送master分支的所有内容 +4.git push origin master 此后,每次本地提交后,只要有必要,就可以使用命令推送最新修改 +ssh警告 + 当你第一次使用Git的clone或者push命令连接GitHub时,会得到一个警告,这是因为Git使用SSH连接,而SSH连接在第一次验证GitHub服务器的 + +Key时,需要你确认GitHub的Key的指纹信息是否真的来自GitHub的服务器,输入yes回车即可。Git会输出一个警告,告诉你已经把GitHub的Key添加 + +到本机的一个信任列表里了: + + + +创建合并分支 + +创建并切换 +git checkout -b dev =>等同于 git branch dev; git checkout dev + +查看所有分支 +git branch + +切换分支 +git checkout master + +合并分支 +git merge dev + +删除分支 +git branch -d dev + +因为创建、合并和删除分支非常快,所以Git鼓励你使用分支完成某个任务,合并后再删掉分支,这和直接在master分支上工作效果是一样的,但过 + +程更安全。 + + + +解决分支冲突 + +git log --graph --pretty=oneline --abbrev-commit 查看分支合并图 + +如果分支提交不同的内容,可以git status 查看冲突文件 +然后在文件中修改冲突内容,然后提交,即可 + + + +分支管理策略 +在合并分支是添加参数,git merge --no-ff -m "merge with no-ff" dev 表示禁用Fast forward模式,使用普通模式合并 +这种模式可以在git log --graph 上看到分支合并的记录,而ff模式则看不到 + +在实际开发中,我们应该按照几个基本原则进行分支管理: +首先,master分支应该是非常稳定的,也就是仅用来发布新版本,平时不能在上面干活; +那在哪干活呢?干活都在dev分支上,也就是说,dev分支是不稳定的,到某个时候,比如1.0版本发布时,再把dev分支合并到master上,在master + +分支发布1.0版本; +你和你的小伙伴们每个人都在dev分支上干活,每个人都有自己的分支,时不时地往dev分支上合并就可以了。 + + + +bug分支 + +修复bug时,我们会通过创建新的bug分支进行修复,然后合并,最后删除 +当手头上的工作没有完成时,先把现场 git stash 保存一下,然后再去修复bug +git stash list 查看之前保存过的工作区 +git stash pop 恢复stash工作区内容并删除之前的保存,等同于 git stash apply;git stash drop(先恢复后删除) + +如果想删除分支,但是里面的内容已经提交,切未合并,那么需要git branch -D dev 来删除 + + + + + +多人协作 -- 一般会提示错误后的操作 + +git remote 查看远程库信息(git remote -v查看详细信息) +gitcheckout -b branch-name origin/branch-name 在本地建立和远程分支对应的分支 +git branch --set-upstream branch-name origin/branch-name 建立本地和远程分支的关联 + +多人协作工作模式 +1.首先尝试 git push origin brnach-name 推送自己的修改 +2.如果推送失败,则因为远程分支比你的本地更加新,需要先 git pull 试图合并 +3.如果合并有冲突,则需要解决冲突 + 如果出现(no tracking information)的提示,则说明本地分支和远程分支的链接关系没有创建,用 git branch --set-upstream + +branch-name origin/branch-name 这个命令建立关联 +4.没有冲突或者解决掉冲突后,再用 git push origin branch-name 推送就能成功 + + + + + + +创建标签 + +git tag 查看已存在标签 +git tag tag-name 为当前分支下HEAD下新建一个标签 +git tag tag-name commit-id 为历史某个commit新建标签 +git tag -a tag-name -m "describe" 指定标签信息 +git tag -s tag-name -m "describe" 可以用PGP签名标签 + +标签操作 + +git push origin 推送一个本地标签 +git push origin --tags 推送所有标签 +git tag -d 删除本地标签 +git push origin :refs/tags/ 删除远程标签 + diff --git a/2213629594@qq.com-github.txt b/2213629594@qq.com-github.txt new file mode 100644 index 000000000..f9aefdc70 --- /dev/null +++ b/2213629594@qq.com-github.txt @@ -0,0 +1 @@ +this is my firstpull request \ No newline at end of file diff --git a/2300281344@qq.com.txt b/2300281344@qq.com.txt new file mode 100755 index 000000000..df9b9dc49 --- /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/2321756628@qq.com.txt b/2321756628@qq.com.txt new file mode 100644 index 000000000..b40a9bd5b --- /dev/null +++ b/2321756628@qq.com.txt @@ -0,0 +1 @@ +thank you very much!!! \ No newline at end of file diff --git a/2321756628@qq.txt b/2321756628@qq.txt new file mode 100644 index 000000000..b40a9bd5b --- /dev/null +++ b/2321756628@qq.txt @@ -0,0 +1 @@ +thank you very much!!! \ No newline at end of file diff --git a/232322.txt b/232322.txt new file mode 100755 index 000000000..1ba67d488 --- /dev/null +++ b/232322.txt @@ -0,0 +1 @@ +Very good tutorial, thank you diff --git a/2576657440.txt b/2576657440.txt new file mode 100644 index 000000000..3472b2a50 --- /dev/null +++ b/2576657440.txt @@ -0,0 +1,3 @@ +Hi Mr.liao +I am writing this letter to thank you for learngit. +Thanks again! diff --git a/2577977814@qq.com.txt b/2577977814@qq.com.txt new file mode 100644 index 000000000..b311b5bf9 --- /dev/null +++ b/2577977814@qq.com.txt @@ -0,0 +1 @@ +啦啦啦.. \ No newline at end of file diff --git a/2631015638@qq.com.txt b/2631015638@qq.com.txt new file mode 100755 index 000000000..04d42ba92 --- /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 000000000..424fb9bb4 --- /dev/null +++ b/272700767.text @@ -0,0 +1 @@ +学习了廖老师的Git和Python教程,收获非常大。希望廖老师能再接再厉,我会永远支持您的! diff --git a/272964081.txt b/272964081.txt new file mode 100755 index 000000000..b3c9e870e --- /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 000000000..db2a29e11 --- /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 000000000..261269cb0 --- /dev/null +++ b/2827873682@qq.com @@ -0,0 +1 @@ +谢谢老师 diff --git a/290963196@qq.com.txt b/290963196@qq.com.txt new file mode 100644 index 000000000..f55fa2f48 --- /dev/null +++ b/290963196@qq.com.txt @@ -0,0 +1 @@ +确实写得非常不错,给赞一个 \ No newline at end of file diff --git a/2borges b/2borges new file mode 100755 index 000000000..d2b889c76 --- /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 000000000..92f563a63 --- /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 100644 index 000000000..4af1ada83 --- /dev/null +++ b/304270703@qq.com @@ -0,0 +1 @@ +Thanks for your articles. diff --git a/3333q.txt b/3333q.txt new file mode 100644 index 000000000..d2f2bc48d --- /dev/null +++ b/3333q.txt @@ -0,0 +1 @@ +这么多的txt,谢谢廖老师~~~ diff --git a/33480277.txt b/33480277.txt new file mode 100644 index 000000000..3fefb9884 --- /dev/null +++ b/33480277.txt @@ -0,0 +1,5 @@ +廖老师的git教程是一门很好的入门教程。 +跟着老师的教程一点点敲到pull request部分,对git有了初步的认识,非常感谢廖老师的无私分享。 +现在学些pull request,希望廖老师给通过呦! + +赞赞赞!!! \ No newline at end of file diff --git a/340623792@qq.com.txt b/340623792@qq.com.txt new file mode 100755 index 000000000..7d94d5dc1 --- /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 000000000..3b9ce015d --- /dev/null +++ b/364834547@qq.txt.txt @@ -0,0 +1 @@ +test and thanks! \ No newline at end of file diff --git a/3677408.txt b/3677408.txt new file mode 100644 index 000000000..8bbd4e811 --- /dev/null +++ b/3677408.txt @@ -0,0 +1 @@ +git真强大,,感谢雪峰老师的教材,,终于从懵逼到入门了。 diff --git a/374909444@qq.com.py b/374909444@qq.com.py new file mode 100755 index 000000000..009c9960d --- /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 000000000..261269cb0 --- /dev/null +++ b/3Q @@ -0,0 +1 @@ +谢谢老师 diff --git a/3Q.txt b/3Q.txt new file mode 100755 index 000000000..bd0286c61 --- /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 000000000..87826a16d --- /dev/null +++ b/3Q_by_fei.txt @@ -0,0 +1 @@ +Thanks for your lesson. \ No newline at end of file diff --git a/3q_liao.txt b/3q_liao.txt new file mode 100644 index 000000000..6add70a21 --- /dev/null +++ b/3q_liao.txt @@ -0,0 +1,4 @@ +Thanks for makeing this teach usefully and helpfully +someone will have a diffrence owing to this + +Thank you diff --git a/3qs.txt b/3qs.txt new file mode 100755 index 000000000..8cc604813 --- /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 100644 index 000000000..38f82da9d --- /dev/null +++ b/416663690@qq.com @@ -0,0 +1 @@ +测试一下! 信息! diff --git a/422729946.txt b/422729946.txt new file mode 100644 index 000000000..b063b859f --- /dev/null +++ b/422729946.txt @@ -0,0 +1,2 @@ +谢谢你 廖雪峰老师 + 你的文章让我对GitHub有了很多的认识。 diff --git a/43.html b/43.html new file mode 100755 index 000000000..7f92a74f5 --- /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 000000000..f333821ef --- /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 100644 index 000000000..2a5b82bac --- /dev/null +++ b/454135329@qq.com @@ -0,0 +1 @@ +git真的蛮好的,是我使用过最好的版本控制软件,感谢老师的帮助。 diff --git a/495523438@qq.com.txt b/495523438@qq.com.txt new file mode 100755 index 000000000..1327da162 --- /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 000000000..3202a3ce6 --- /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 100644 index 000000000..45a563e33 --- /dev/null +++ b/521xueweihan.txt @@ -0,0 +1,2 @@ +最后一个测!let‘go! +再测试一次 \ No newline at end of file diff --git a/532861047@qq.com.txt b/532861047@qq.com.txt new file mode 100644 index 000000000..57be85d8a --- /dev/null +++ b/532861047@qq.com.txt @@ -0,0 +1 @@ +谢谢廖老师! \ No newline at end of file diff --git a/534295842 b/534295842 new file mode 100755 index 000000000..3bdee47d2 --- /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 100644 index 000000000..99abe36ac --- /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 000000000..3ec34217a --- /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 000000000..7ca0b2ebc --- /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 000000000..ebdb9202d --- /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 000000000..221f1d618 --- /dev/null +++ b/574401281@qq.com @@ -0,0 +1 @@ +测试下pull request diff --git a/57test b/57test new file mode 100644 index 000000000..37df14775 --- /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 000000000..e69de29bb diff --git a/595521697@qq.com b/595521697@qq.com new file mode 100755 index 000000000..93417e6f6 --- /dev/null +++ b/595521697@qq.com @@ -0,0 +1,5 @@ +廖老师的课程由浅入深 +旁征博引 +语言幽默风趣平时 +容易理解 +上上之作! diff --git a/6157457.md b/6157457.md new file mode 100644 index 000000000..2ac973564 --- /dev/null +++ b/6157457.md @@ -0,0 +1,159 @@ +## 对Git的学习总结 + +之前在工作学习中总是会搜索到Github中的许多开源项目,下载后又不知道如何下手使用,对于Git、Github这些概念在学习了[廖雪峰的官方网站Git教程](https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000)后总算是有些眉目了。整个课程通俗易懂,偶有交代不清的地方稍作思考结合每篇教程的评论便能搞清楚,对于学习Git分布式版本管理入门来说是很好的教材。通读全部教程,并结合一些博客说明,我尝试写了一篇学习总结,检验一下自己的学习效果。需要注意,本文主要是加深对Git的理解,初学者通过本文可以初窥Git的一些基本概念,并不适合直接用来作为教程从零学习Git。 + +Git是一种分布式版本管理系统,能够对文本文件的改动进行跟踪管理。文件的每一次改动都会被记录,然而这个记录方式不是积累不同版本的文件,而是针对修改动作的记录,所以不会大幅增加存储负担。你可以在需要时候找到一个文件或一整个项目在之前历次修改提交时候的内容。 + +分布式管理的一个优点是可以拷贝远程版本库Repository的完整版本信息到本地,然后在断网的情况下正常的进行文件添加修改提交等版本更新操作,然后在有了网络后将本地更新推送到远程版本库。即便远程版本库丢失,也不会有较大损失。区别于集中式版本管理系统,例如SVN,有一个中央服务器负责版本管理,所有版本更新操作必须在联网情况下和中央服务器通信才能完成。对于创建分支版本等功能在使用中也不够方便。所以Git这种分布式版本管理系统变的越来越流行。(关于分布式版本管理系统和集中式版本管理系统的优缺点对比并不是本文的写作重点。) + +为了便于多人协作,我们需要将一个项目的标准版本放在开发者都能看到能获取到的地方,所以有了[GitHub](https://github.com/)这个代码托管网站,相当于一个远程的存储仓库。(国内可以使用Gitee[码云](https://gitee.com/)这个提供相似功能的网站。) + +### Git的工作流程 + +![image](http://img.blog.csdn.net/20160430221106224) + +项目管理人员或主开发者首先初始化一个仓库,这个仓库可以创建在本地电脑上,也可以创建在远程Git服务器(GitHub)中。然后在仓库中添加初始版本的项目源码,如果操作在远程服务器中完成,那么通过clone命令将远程仓库拷贝到本地,同理如果操作在本地完成,那么可以通过push命令将本地仓库推送到远程服务器,这样本地仓库和远程仓库就有了相同的内容。在以后的开发中,开发者就在本地仓库进行版本更新,然后将最后检验确认的版本推送到远程仓库。 +- **远程仓库** +——管理项目版本升级信息和项目最终源码的地方。远程仓库的主要目的在于存储一份标准版本的项目文件便于项目管理和更新。所有的项目成员根据这个标准版本来更新升级项目,然后大家分别将各自更新后的成果合并到这个远程仓库的标准版本中。 +- **本地仓库** +——开发者拷贝远程仓库到本地后管理项目的地方。初始时和远程仓库是一模一样的,然后开发者在此基础上更新升级项目,在本地进行各种项目版本管理操作。 +- **暂存区** +——用来存放即将放入本地仓库的文件改动信息的缓冲区。如果有许多文件改动需要被放入本地仓库进行版本管理,可以先放入这个暂存区,然后统一提交到本地仓库,方便版本管理。 +- **工作区** +——用来存放项目源码文件的目录。开发者利用此目录中的源码完成项目功能的更新,然后添加到暂存区,最后提交修改到本地仓库,记录版本修改信息。 + +### Git的使用方法 + +Git可以在Linux、Mac OS、Windows等平台使用,具体安装方法请参考[廖雪峰的官方网站](https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/00137396287703354d8c6c01c904c7d9ff056ae23da865a000)。下面以命令行方式简介Git使用的一些基本命令。 + +#### 配置Git用户名密码 +为了表明是谁向版本库提交了修改,首先要配置一下Git的用户名和email地址。 +``` +git config --global user.name "your name" #配置你的名字 +git config --global user.email "email@example.com" #配置你的邮箱 +git config -l #查看配置信息 +``` +--global 参数表明当前机器中所有的本地仓库都使用这个用户名和邮箱作为开发者的身份标识,但是你是可以让不同的本地仓库使用不同配置信息的。比如你公司的Git服务器使用的是和Github上不同的一个用户名邮箱,那么你需要在公司项目工作区的根目录单独配置用户名邮箱如下: +``` +git config user.name "your name2" #配置公司项目的名字 +git config user.email "email2@example.com" #配置公司项目的邮箱 +git config -l #查看配置信息 +``` +这样就会优先使用当前的用户信息配置,而不是全局配置中的用户名邮箱。 + +#### 初始化一个版本库 +``` +git init +#初始化一个空的仓库,可以发现当前工作区中出现了一个.git的文件夹, +#这个就是我们生成的版本库,它将此工作区目录变成了Git可以管理的仓库 +#即便这个工作区原来有文件,但是这些文件都还没有提交过,所以,当前仓库任然是空的。 + +git add readme.md #向暂存区添加一个介绍本项目的文件。 + +git commit -m "添加readme.md" #将当前暂存区中的文件都提交到仓库,每次写好注释便于以后查看 +``` +如果一个功能更新涉及多个文件改动,可以添加多个文件到暂存区, +然后一次性commit提交到仓库。一次commit,就在仓库中增加 +了一个版本,类似一个快照,以后不管你更新了多少个版本,都可 +以返回当前版本(快照)。 +``` +git status #查看当前仓库状态信息。此命令可以告诉你当前工作区中相对于当前版本的仓库中哪些文件是没有提交过的新文件,哪些是修改过的,哪些是删除的。 + +git diff filename.txt #查看当前filename文件和仓库当前版本记录中的filename文件的差异。如果已经将当前filename文件添加到暂存区,那么此命令就无法显示差异了。 +``` + +以上就是让仓库记录一个版本修改常用的一些命令。那么如果你已经提交了多次修改,在仓库中就会记录多个版本,怎么回退到你之前的版本呢? +``` +git log #查看版本提交记录,从近到远显示历次提交的修改。每个版本ID号是一串很长的数字,通常采用前7位就可以代表此版本号。 + +git reset --hard 1234567 #将工作区内容回退到1234567所在版本。 +``` +在Git管理中,仓库中当前版本用head表示,上一个版本用head^ 表示,前两个版本head^^ 表示,前100个版本head~100 表示。当然这样表示开发者很难知道前100个版本到底有什么改动,所以使用版本ID是比较常用的方式。 + +**注意**:使用--hard参数进行版本回退后,当前工作区中未提交到暂存区或仓库中的文件修改都将被丢弃,暂存区中的修改会清空,此时的工作区内容将变成版本1234567时候的状态,所以使用时候需要小心。也就是说我们工作区的文件会因为版本切换而改变成对应版本的文件,大家会发现版本切换后,文件数量增减或内容变化的情况,都是Git版本管理搞的鬼。 +``` +#当你使用 git reset 回到过去(之前的版本)后,再使用 git log 命令版本ID记忆就停留在了过去,必须使用 +git reflog #恢复未来的记忆,找到想去的未来的版本ID,回到未来。 +``` + +git reset命令后面还可以跟很多其他参数,具体使用情形参考[此链接](http://blog.csdn.net/hudashi/article/details/7664464/)。 + +介绍了以上常用命令,基本上对本地仓库版本管理有了基本了解,现在你可能对工作区、暂存区(又叫stage或者index)和版本库等概念有些混淆,那么可以参考下图: +![image](http://img.blog.csdn.net/20151030110206984?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center) + + +[此博客链接](http://www.cnblogs.com/lianghe01/p/5846525.html#3806554)对此图有相关实例介绍。 + +#### 创建合并分支 +每个仓库创建后都有一个master主分支,但是如果你一直在主分支上提交修改,会发现主分支的版本非常凌乱,在实际项目开发中,为了保证主分支的简洁稳定,开发者常常会创建一个分支版本来更新项目,待功能稳定后,将分支版本和主分支合并。如果同一个项目要针对不同客户开发多个有差异的版本,那么也可以创建多个分支,在不同分支上开发相应的版本。所以分支对Git管理来说,相当重要。 + +``` +git branch dev #创建develop分支 +git checkout dev #切换到dev分支 + +git checkout -b dev #创建并切换dev分支 + +``` +在master分支中创建dev分支,那么dev分支的初始版本就和master分支当前版本内容一致。你会发现,刚创建并切换分支后,工作区内容并没有变化,就是这个原因。一旦dev分支更新提交过,那么你再切换分支master,你会发现,工作区内容会变成master分支的内容。 + +dev分支在多次提交完成项目功能升级后,就需要和master主分支合并。 + +``` +git checkout master #首先切换到主分支 +git merge dev #将dev分支合并到当前分支 +git branch -d dev #删除dev分支 + +git branch -a #查看当前仓库所有分支,包括远程仓库的分支 +``` +但是分支合并时,并不是一直一帆风顺的,如果两个分支都各自有更新,那么在合并时就可能产生冲突,合并无法正常完成,需要先解决冲突,修改冲突文件,然后再次提交修改,才算合并完成。 +``` +git log --graph --pretty=oneline --abbrev-commit #查看分支合并情况 +``` +如果想保留分支的提交记录,那么在分支合并时需要加上特定参数 +``` +git merge --no-ff -m "注释" dev #合并dev分支到主分支时,保留dev分支的版本提交记录 +``` +采用不同参数合并分支后可以通过下图查看合并结果。 +![image](https://note.youdao.com/yws/api/personal/file/F2B94370E87B4097BE7CAC5A8AAB601F?method=download&shareKey=80f703d873cc40db4df1bc609cecb874) + +分支在项目开发中使用特别常见,比如添加新功能可以创建一个分支,修改一个Bug也要创建一个分支,由于Git创建分支特别简单,所以尽可能使用分支对于主分支的稳定和简洁很有必要。 + +**注意**:分支合并有两种不同的命令 +``` +git merge #分支合并 +git rebase #分支衍合 +``` +什么情况下采用merge方式,什么情况下采用rebase方式可以参看[此链接](https://www.cnblogs.com/kidsitcn/p/5339382.html)。 + +### Git在实际项目开发中的使用 + +上文介绍了Git在本地仓库管理使用的一些基本指令。然而实际项目开发是多人合作完成的,主干代码库的稳定需要一个大家都能访问的远程仓库管理。 +在连接远程仓库时为了避免每次输入用户名密码的麻烦,开发者可以提前配置好SSH密钥对加密传输数据。 + +#### 配置SSH密钥对 +如果要将本地仓库安全便捷的推送到远程服务器,Git采用SSH协议对和远程服务器通信的信息进行确认,所以你需要生产一个SSH密钥对,将公钥保存在服务器,这样每次和远程服务器通信就不用输入密码确认了。 +``` +ssh-keygen -t rsa -C "youremail@example.com" #创建密钥对 -t参数 密钥类型,-C参数 注释 +``` +产生密钥对后,开发者将公钥数据交给项目管理人员,将公钥保存在远程Git服务器,配置就完成了。第一次连接Git远程服务器SSH会提示警告要你比对Key的指纹信息正确性,yes确认就好。 + +#### 实际项目开发 +由于我没有在公司项目开发中使用过Git版本管理,所以根据教程学习结合一些博客的介绍,总结出实际项目开发的大致流程如下,如有错误之处,请指正说明,非常感谢。 + +1、主开发者或项目管理人员生成一个本地仓库,提交初始版本项目源码,然后推送到远程服务器上。这时远程服务器就有了一个远程仓库,里面有初始版本的项目源码。 + +2、为了保证主分支代码简介稳定,创建一个develop分支,推送到远程仓库。 + +3、所有开发者从远程仓库的develop分支克隆项目。各自有一个本地仓库。根据各自的任务在本地仓库提交项目更新,然后去和远程仓库develop分支合并。同理开发者在本地仓库也应该创建一个本地的develop分支,便于维护本地主分支。 + +简单的项目开发图解类似下图所示: +![images](https://cdn.webxueyuan.com/cdn/files/attachments/001384909239390d355eb07d9d64305b6322aaf4edac1e3000/0) + +master是远程主分支,dev是开发分支,michael和bob各自拷贝开发分支到本地,然后在本地仓库更新项目,然后各自合并到开发分支中。开发分支中出现稳定版本后,就将开发分支合并到主分支。 + +更为细致的大型项目开发图解可以参考下图: +![images](https://segmentfault.com/img/remote/1460000006724851) + +关于在项目中采用Git进行版本管理更为详细的介绍可以参考[此博客链接](https://segmentfault.com/a/1190000006724816)。 + + diff --git a/635418797.txt b/635418797.txt new file mode 100644 index 000000000..ad43d67ce --- /dev/null +++ b/635418797.txt @@ -0,0 +1 @@ +谢谢 diff --git a/649913117_thanks b/649913117_thanks new file mode 100755 index 000000000..829b64fac --- /dev/null +++ b/649913117_thanks @@ -0,0 +1 @@ +一步步看下来,基本会玩了 就差熟练记住命令了 thanks diff --git a/666666.txt b/666666.txt new file mode 100755 index 000000000..2c13900a0 --- /dev/null +++ b/666666.txt @@ -0,0 +1,2 @@ +just for testing +and thanks a lot to xuefeng liao~ diff --git a/666666666.txt b/666666666.txt new file mode 100644 index 000000000..d6841e71f --- /dev/null +++ b/666666666.txt @@ -0,0 +1 @@ +真的666666666666 \ No newline at end of file diff --git a/674345386.txt b/674345386.txt new file mode 100755 index 000000000..d8036c15d --- /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/710442694@qq.com.txt b/710442694@qq.com.txt new file mode 100644 index 000000000..7aba9db47 --- /dev/null +++ b/710442694@qq.com.txt @@ -0,0 +1 @@ +this is a very good project. diff --git a/744971084learninggit.txt b/744971084learninggit.txt new file mode 100755 index 000000000..f00908b8d --- /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 000000000..4147ebe31 --- /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 000000000..15cb7a394 --- /dev/null +++ b/791684719@qq.com.txt @@ -0,0 +1 @@ +谢谢老师! diff --git a/799728922@qq.com.txt b/799728922@qq.com.txt new file mode 100644 index 000000000..c066faf3d --- /dev/null +++ b/799728922@qq.com.txt @@ -0,0 +1 @@ +非常棒的入门教程,十分感谢! diff --git a/7SevenZHOU.txt b/7SevenZHOU.txt new file mode 100644 index 000000000..40bf4f271 --- /dev/null +++ b/7SevenZHOU.txt @@ -0,0 +1,2 @@ +I learned so much. +Thanks for Michael! \ No newline at end of file diff --git a/824909419@qq.com b/824909419@qq.com new file mode 100755 index 000000000..c53ce11d9 --- /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 000000000..b57a2b438 --- /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 000000000..ddcc4abd7 --- /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 000000000..78cb80dd3 --- /dev/null +++ b/917359669@qq.com.txt @@ -0,0 +1 @@ +leanrn git pull request,thank you teacher liao diff --git a/918061733@qq.com.txt b/918061733@qq.com.txt new file mode 100644 index 000000000..e69de29bb 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 000000000..1f33370b7 --- /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/9488.txt b/9488.txt new file mode 100644 index 000000000..9daeafb98 --- /dev/null +++ b/9488.txt @@ -0,0 +1 @@ +test diff --git a/96chuck.txt b/96chuck.txt new file mode 100644 index 000000000..a00a762a1 --- /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 100644 index 000000000..e67ecb1ca --- /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 000000000..e69de29bb diff --git a/AAAAAA_Jian2017 b/AAAAAA_Jian2017 new file mode 100644 index 000000000..7fcdc33cc --- /dev/null +++ b/AAAAAA_Jian2017 @@ -0,0 +1,3 @@ +1)测试一下在自己的 GitHub仓库创建。 +2)然后试一试 添加到廖老师的原版本里。 +3)后面再试一试更改别人的代码。 diff --git a/ANT-Yang.txt b/ANT-Yang.txt new file mode 100644 index 000000000..a96ed4da2 --- /dev/null +++ b/ANT-Yang.txt @@ -0,0 +1,3 @@ +跟着廖老师的指导,FORK了一下您的项目,哈哈 +感觉老师的材料蛮幽默的,好懂很多,从中学到了很多实用的GIT,也从中git到了需要注重那个工作区和暂存区的重要性!真是非常感谢您,谢谢您! +我也住在北京,不过是在海淀区,哈哈,希望有机会能见到您的庐山真面目 哈哈^_^ diff --git a/AboutGitignore.txt b/AboutGitignore.txt new file mode 100755 index 000000000..c7224fcf1 --- /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 100644 index 000000000..a503f4780 --- /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 000000000..2b7a65d43 --- /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 000000000..f35c6a21f --- /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 000000000..0b1e39a09 --- /dev/null +++ b/AllSun.txt @@ -0,0 +1 @@ +廖老师真帅,听说这样能接受pull request. diff --git a/Aloklok.txt b/Aloklok.txt new file mode 100644 index 000000000..ffe0185ac --- /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/Andrew.txt b/Andrew.txt new file mode 100644 index 000000000..4622f0151 --- /dev/null +++ b/Andrew.txt @@ -0,0 +1 @@ +Thanks for your help on git diff --git a/AndyRon.md b/AndyRon.md new file mode 100644 index 000000000..4af4e1db5 --- /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 000000000..68dbe387a --- /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 100644 index 000000000..e0a61a25f --- /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 100644 index 000000000..472ecb0ea --- /dev/null +++ b/Annabel.txt @@ -0,0 +1 @@ +晴天好心情!Thank you! diff --git a/Annzmy.txt b/Annzmy.txt new file mode 100644 index 000000000..fcad1f4a5 --- /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 000000000..c7d4a7e83 --- /dev/null +++ b/Antsecvic @@ -0,0 +1,4 @@ +很好很强大 +刚开始学 +必须得掌握的技能 +谢谢分享的教程 diff --git a/Aragron.txt b/Aragron.txt new file mode 100644 index 000000000..c0a5b4072 --- /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 100644 index 000000000..c457ad54b --- /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 000000000..36db5197e --- /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 000000000..2b4708932 --- /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/AskaTsai.txt b/AskaTsai.txt new file mode 100644 index 000000000..4099b2f6c --- /dev/null +++ b/AskaTsai.txt @@ -0,0 +1,3 @@ +公司需要用到git + +一步一步的照着廖老师的教程走下来,发现git也没想象中那么难 diff --git a/AyoCross_ForTry b/AyoCross_ForTry new file mode 100755 index 000000000..bd8793a10 --- /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 100644 index 000000000..5814c2498 --- /dev/null +++ b/AyumuAkira.txt @@ -0,0 +1 @@ +Thanks for sharing very much. \ No newline at end of file diff --git a/BH/hello b/BH/hello new file mode 100644 index 000000000..68606db92 --- /dev/null +++ b/BH/hello @@ -0,0 +1 @@ +hello world/ diff --git a/BH/thanks for teach git b/BH/thanks for teach git new file mode 100644 index 000000000..dd71f5aed --- /dev/null +++ b/BH/thanks for teach git @@ -0,0 +1 @@ +thank you very much. diff --git a/BLUE-V.txt b/BLUE-V.txt new file mode 100644 index 000000000..49cd706aa --- /dev/null +++ b/BLUE-V.txt @@ -0,0 +1,2 @@ +thank you liao + - from 白兰度 diff --git "a/BYS_\351\235\236\345\270\270\346\204\237\350\260\242.txt" "b/BYS_\351\235\236\345\270\270\346\204\237\350\260\242.txt" new file mode 100644 index 000000000..fa006ccf1 --- /dev/null +++ "b/BYS_\351\235\236\345\270\270\346\204\237\350\260\242.txt" @@ -0,0 +1 @@ +非常感谢. diff --git a/BaikalYoung.js b/BaikalYoung.js new file mode 100755 index 000000000..25035373d --- /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 100644 index 000000000..6d5b02179 --- /dev/null +++ b/Best.txt @@ -0,0 +1,3 @@ +"Helo, word" + + thank you!!! diff --git a/BlueIceQ.txt b/BlueIceQ.txt new file mode 100644 index 000000000..16165e28b --- /dev/null +++ b/BlueIceQ.txt @@ -0,0 +1,2 @@ +廖大大的教程很接地气,很实用,简单易学,容易上手. +希望关于java1.8的教程也快快能够看到. diff --git a/CCC-S.txt b/CCC-S.txt new file mode 100644 index 000000000..eee6e7fd2 --- /dev/null +++ b/CCC-S.txt @@ -0,0 +1 @@ +Thank you Mr.Liao. diff --git a/CCHHUANG.txt b/CCHHUANG.txt new file mode 100755 index 000000000..3721c91f4 --- /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/CH0918_git.txt b/CH0918_git.txt new file mode 100644 index 000000000..e34d4012b --- /dev/null +++ b/CH0918_git.txt @@ -0,0 +1,5 @@ +本人是一名普通二本非计算机专业学生,自学编程。 +在imooc上学完了廖老师的python入门和进阶课程,受益良多,现在花了两天时间 +学了老师的git课程,虽然还有一些命令没能记住,但基本理解了老师说的知识点 +打算以后实战写代码时再把自己的代码提交到github上,边学边巩固可能效果会好一点 +最后,真的非常感谢廖老师! diff --git a/CHENJuntong.txt b/CHENJuntong.txt new file mode 100644 index 000000000..040abbe5e --- /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 100644 index 000000000..8cc6840e8 --- /dev/null +++ b/CHNLiPeng.txt @@ -0,0 +1 @@ +add a file diff --git a/CHNLiPeng2.txt b/CHNLiPeng2.txt new file mode 100644 index 000000000..b9c9acca5 --- /dev/null +++ b/CHNLiPeng2.txt @@ -0,0 +1,2 @@ +another test file + diff --git a/CKTD.txt b/CKTD.txt new file mode 100644 index 000000000..10ddd6d25 --- /dev/null +++ b/CKTD.txt @@ -0,0 +1 @@ +Hello! diff --git a/CTextBox.cs b/CTextBox.cs new file mode 100644 index 000000000..2f4da125f --- /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 000000000..d4a99a2d8 --- /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 000000000..a3e3c6e53 --- /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 000000000..6afc05669 --- /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 100644 index 000000000..71240d315 --- /dev/null +++ b/Carl.txt @@ -0,0 +1 @@ +My name is Carl. diff --git a/ChanShuYi.txt b/ChanShuYi.txt new file mode 100644 index 000000000..17f5d64f5 --- /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 100644 index 000000000..7b45b456f --- /dev/null +++ b/CharlesZqikai.txt @@ -0,0 +1 @@ +3q Its very good lesson \ No newline at end of file diff --git a/ChekeLee.txt b/ChekeLee.txt new file mode 100644 index 000000000..6a9101784 --- /dev/null +++ b/ChekeLee.txt @@ -0,0 +1,3 @@ +thanks too much to Mr.Liao +the tutorial of git is my first git guide +and it's excellent! diff --git a/ChenhaoLu b/ChenhaoLu new file mode 100644 index 000000000..14bf68e45 --- /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 000000000..a15c29a82 --- /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/ChristopheLyu.txt b/ChristopheLyu.txt new file mode 100644 index 000000000..63339574c --- /dev/null +++ b/ChristopheLyu.txt @@ -0,0 +1,3 @@ +Thanks so much, teacher liao. +Your courses really did me lot's of favor. +Git is powerful and useful, and I decide to give up using SVN. \ No newline at end of file diff --git a/Chuhc b/Chuhc new file mode 100644 index 000000000..f29dee609 --- /dev/null +++ b/Chuhc @@ -0,0 +1 @@ +测试 diff --git a/Chulvtest.txt b/Chulvtest.txt new file mode 100755 index 000000000..7adcf9726 --- /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 100644 index 000000000..8fc2d66b1 --- /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 100644 index 000000000..bc74dab9c --- /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 100644 index 000000000..c30ac7edb --- /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 000000000..68ca815c0 --- /dev/null +++ b/CruiseSun.txt @@ -0,0 +1,11 @@ +#感谢: +特别感谢廖雪峰前辈的无私分享! +第一次看到这么走心的教程!喜欢前辈的风格! + +#收获: +这份git教程浅显易懂特别适合入门,看完以后对git的框架和使用方法有了一个基本的了解, +让我可以更清楚地认识到git对我学习的用处,也让我了解到了一个神奇的开源工具与社区 +(骨子里真得爱死了开(gong)源(xiang),知识在共享后会焕发出巨大的价值之光)。 + +#PS: +等我工作后有经济来源,一定要大大赞助以更好地帮助其他同学后续有更好的教程!接力传递! \ No newline at end of file diff --git a/Crystal.txt b/Crystal.txt new file mode 100644 index 000000000..6d92f74ea --- /dev/null +++ b/Crystal.txt @@ -0,0 +1 @@ +thanks teacher。 \ No newline at end of file diff --git a/DQB.txt b/DQB.txt new file mode 100644 index 000000000..e84e14789 --- /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 000000000..306ac5ae9 --- /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 000000000..3722c6207 --- /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 100644 index 000000000..b41c1e7f0 --- /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 000000000..1af0fcc3e --- /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/DeepseaWhale\347\232\204git\347\254\224\350\256\260-\346\200\235\347\273\264\345\257\274\345\233\276/.DS_Store" "b/DeepseaWhale\347\232\204git\347\254\224\350\256\260-\346\200\235\347\273\264\345\257\274\345\233\276/.DS_Store" new file mode 100644 index 000000000..5008ddfcf Binary files /dev/null and "b/DeepseaWhale\347\232\204git\347\254\224\350\256\260-\346\200\235\347\273\264\345\257\274\345\233\276/.DS_Store" differ diff --git "a/DeepseaWhale\347\232\204git\347\254\224\350\256\260-\346\200\235\347\273\264\345\257\274\345\233\276/Git\346\200\235\347\273\264\345\257\274\345\233\276.png" "b/DeepseaWhale\347\232\204git\347\254\224\350\256\260-\346\200\235\347\273\264\345\257\274\345\233\276/Git\346\200\235\347\273\264\345\257\274\345\233\276.png" new file mode 100644 index 000000000..eaf5a5d96 Binary files /dev/null and "b/DeepseaWhale\347\232\204git\347\254\224\350\256\260-\346\200\235\347\273\264\345\257\274\345\233\276/Git\346\200\235\347\273\264\345\257\274\345\233\276.png" differ diff --git a/Demo233.md b/Demo233.md new file mode 100644 index 000000000..44aeb7a60 --- /dev/null +++ b/Demo233.md @@ -0,0 +1 @@ +感谢老师!很不错的教程! diff --git a/DentistXu.txt b/DentistXu.txt new file mode 100644 index 000000000..e366eada6 --- /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 100644 index 000000000..01bda02be --- /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 100644 index 000000000..710deb8fa --- /dev/null +++ b/Dmicc @@ -0,0 +1 @@ +Thanks a lot. diff --git "a/Don\347\232\204\345\255\246\344\271\240\347\254\224\350\256\260/Don\347\232\204\345\255\246\344\271\240\347\254\224\350\256\260.txt" "b/Don\347\232\204\345\255\246\344\271\240\347\254\224\350\256\260/Don\347\232\204\345\255\246\344\271\240\347\254\224\350\256\260.txt" new file mode 100644 index 000000000..56b6510f1 --- /dev/null +++ "b/Don\347\232\204\345\255\246\344\271\240\347\254\224\350\256\260/Don\347\232\204\345\255\246\344\271\240\347\254\224\350\256\260.txt" @@ -0,0 +1 @@ +11111 \ No newline at end of file diff --git a/Dracula-36.txt b/Dracula-36.txt new file mode 100755 index 000000000..85a78dd46 --- /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 000000000..cabc8de9f --- /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 000000000..312591633 --- /dev/null +++ b/Dreamroute @@ -0,0 +1,2 @@ +test fork and pull a request +update the test file diff --git a/Dummkopf.txt b/Dummkopf.txt new file mode 100644 index 000000000..ec3ba56fa --- /dev/null +++ b/Dummkopf.txt @@ -0,0 +1 @@ +thankyou liao!!! \ No newline at end of file diff --git a/DwyaneTalk.txt b/DwyaneTalk.txt new file mode 100644 index 000000000..00d452ce8 --- /dev/null +++ b/DwyaneTalk.txt @@ -0,0 +1,4 @@ +非常感谢老师,通过您这份教程,我对Git有了更加全面的认识,相信这份教程一定会帮助很多人的,支持老师 +PS:刚刚陷入文字编码的坑,原来在bash里新建文件之后,使用vi打开编辑,会以ANSI格式编码…… + +haha diff --git a/Elizabeth-l.txt b/Elizabeth-l.txt new file mode 100644 index 000000000..c0bcfb9fc --- /dev/null +++ b/Elizabeth-l.txt @@ -0,0 +1 @@ +thank you! \ No newline at end of file diff --git a/Eminvoker.txt b/Eminvoker.txt new file mode 100755 index 000000000..05f862566 --- /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 100644 index 000000000..e69de29bb diff --git a/Engineering-Course.txt b/Engineering-Course.txt new file mode 100644 index 000000000..9f9e5a99a --- /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/EricAndEric.txt b/EricAndEric.txt new file mode 100644 index 000000000..94908c6b2 --- /dev/null +++ b/EricAndEric.txt @@ -0,0 +1 @@ +Just for testing pull request~~ diff --git a/ExcaliburZhouPullRequestTest.txt b/ExcaliburZhouPullRequestTest.txt new file mode 100755 index 000000000..9daeafb98 --- /dev/null +++ b/ExcaliburZhouPullRequestTest.txt @@ -0,0 +1 @@ +test diff --git a/Ezreal.txt b/Ezreal.txt new file mode 100644 index 000000000..d46ac01e1 --- /dev/null +++ b/Ezreal.txt @@ -0,0 +1 @@ +Ezreal \ No newline at end of file diff --git a/FanCooking.txt b/FanCooking.txt new file mode 100644 index 000000000..2567cc7af --- /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 100644 index 000000000..ec3ca3890 --- /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/FelixOldMan.txt b/FelixOldMan.txt new file mode 100644 index 000000000..8055f853c --- /dev/null +++ b/FelixOldMan.txt @@ -0,0 +1,56 @@ +廖老师, + 你好! + + 谢谢你的教程,将来也会继续在你的主页上进行学习其他技能,也一并感谢。 + + 我遇到一个问题,如果你会看到我写给你的这封信件的话,烦请拨冗解答。 + 若有其他师兄弟不小心点进我的文件,也看到这个问题的话,也烦请拨冗解答。 + 先再次感谢。 + 我的邮箱:76247156@qq.com + + 我的一个repository(https://github.com/FelixOldMan/hello-world)里面有两 + 个branch( master dev)。其中都有一个branch.txt,内容不同,如下; + + + master:branch.txt + + Creating new branches is quick and simple. + Now, let's try to merge without fast-forward mode. + Cmd: git merge --no-ff -m "merge with no-ff" dev + + + dev:branch.txt + + Creating a new branch is quick and simple. + Now, let's try to merge without fast-forward mode. + Cmd: git merge --no-ff -m "merge with no-ff" dev + I type in this line in order to learn 'git stash' feature. + path: usr/bin/env + coding: utf-8 + + + + 然而我create pull request时, + base:master compare:dev + + 显示的diff如下: + + @@ -1,3 +1,6 @@ + Creating a new branch is quick and simple. + Now, let's try to merge without fast-forward mode. + Cmd: git merge --no-ff -m "merge with no-ff" dev + +I type in this line in order to learn 'git stash' feature. + +path: usr/bin/env + +coding: utf-8 + + + !也就是忽略掉了第一行的不同。! + + + 请问这是怎么一回事儿呢? + + 我的邮箱:76247156@qq.com,烦请赐教! + + + 谢谢! + diff --git a/Feng.js b/Feng.js new file mode 100755 index 000000000..60bb6a7d1 --- /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 000000000..c71e032b4 --- /dev/null +++ b/FollowWang.txt @@ -0,0 +1 @@ +Thanks for your teaching. diff --git a/Forec.txt b/Forec.txt new file mode 100644 index 000000000..a9c1b493a --- /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 000000000..ea2367088 --- /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 100644 index 000000000..e3f87ccd7 --- /dev/null +++ b/FrankChe.txt @@ -0,0 +1 @@ +Git很有趣,你的教程很棒,尤其是图画的很形象,不看文字光看图就会了。 diff --git a/FreddieSun.txt b/FreddieSun.txt new file mode 100644 index 000000000..a6fa08ede --- /dev/null +++ b/FreddieSun.txt @@ -0,0 +1 @@ +Thanks Michael. I have a better understanding of git and github after learning your tutorial. \ No newline at end of file diff --git a/Frisco22.txt b/Frisco22.txt new file mode 100755 index 000000000..1c0da959c --- /dev/null +++ b/Frisco22.txt @@ -0,0 +1 @@ +多谢老师指点哈哈哈哈哈哈 diff --git a/GG-Boy.txt b/GG-Boy.txt new file mode 100755 index 000000000..000c457ab --- /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.md" "b/GIT\345\255\246\344\271\240\345\277\203\345\276\227.md" new file mode 100644 index 000000000..88fabe7fe --- /dev/null +++ "b/GIT\345\255\246\344\271\240\345\277\203\345\276\227.md" @@ -0,0 +1 @@ +不知道git关联远程仓库github的时候,可不可以git本地的一个仓库关联多个远程仓库 diff --git a/GakiHo.txt b/GakiHo.txt new file mode 100755 index 000000000..d0bb60953 --- /dev/null +++ b/GakiHo.txt @@ -0,0 +1 @@ +言简意赅,谢谢! diff --git a/Gemma-mobu.txt b/Gemma-mobu.txt new file mode 100644 index 000000000..e3668119c --- /dev/null +++ b/Gemma-mobu.txt @@ -0,0 +1,5 @@ +您好,廖老师,谢谢您的教程,它使我受益匪浅 + +希望您身体健康万事如意 + +我也会继续努力,以您为榜样! diff --git a/Git Notes for zhanxc b/Git Notes for zhanxc new file mode 100644 index 000000000..417be2c28 --- /dev/null +++ b/Git Notes for zhanxc @@ -0,0 +1,18 @@ +#创建版本库: + mkdir learngit + cd learngit + pwd(显示当前目录) +初始化版本库: + git init(工作区产生用以追踪版本库的.git文件) + git add filename + git commit -m "describe the commit" +版本退回: +1.git status用以查看工作区的状态 +2.git diff用以查看具体的修改的内容 + HEAD指向当前版本,git reset --hard commit_id回退版本 + 向前用git log,向后用git reflog查看有关提交的信息 +3.git checkout --file用来丢弃工作区的修改 +4.git reset HEAD file撤销暂存区的修改 +5.如果已经提交了,先是版本回退,然后参考步骤3.4.即可,前提是还没到远程库 +6.删除文件 git rm filename,如果删错了可以用git checkout filename恢复原来的文件 + diff --git a/Git learnging b/Git learnging new file mode 100755 index 000000000..954052f7b --- /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 000000000..f4c871be2 --- /dev/null +++ "b/Git \346\200\273\347\273\223" @@ -0,0 +1,2 @@ +非常感谢廖老师的Git教程,清晰易懂! +git教程还在整理,后期补充上来,请老师接收我的pull request diff --git "a/Git \347\256\200\346\230\216\346\214\207\344\273\244.md" "b/Git \347\256\200\346\230\216\346\214\207\344\273\244.md" new file mode 100644 index 000000000..7b8cd298c --- /dev/null +++ "b/Git \347\256\200\346\230\216\346\214\207\344\273\244.md" @@ -0,0 +1,49 @@ + +1. 丢弃工作区修改: `git checkout -- file` +- `git checkout` 其实是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原” +2. 丢弃暂存区修改: `git reset HEAD file` +3. 版本回退 (未推送到远程库): `git reset --hard commit_id` +4. 查看提交历史: `git log` +5. 查看命令历史: `git reflog` + +--- + +6. 查看当前分支: `git branch` +7. 创建分支: `git branch ` +8. 切换到分支: `git checkout ` +9. 创建 + 切换到分支: `git checkout -b ` +10. 合并指定分支到当前分支 (如: 当前在 master, 合并 dev): `git merge dev` +11. 普通合并: `git merge --no-ff ` +- 加上 `--no-ff`合并后的历史有分支,`fast forward`合并后看不出来做过合并 +12. 删除分支: `git branch -d ` +- 强行删除: `git branch -D ` +13. 查看分支合并图 (可带参数): `git log --graph[ --pretty=oneline --abbrev-commit]` + +--- + +14. 修复 bug 时临时储存工作区未增加、提交内容: `git stash` +15. 恢复 stash 并删除: `git stash pop` +16. 查看临时储存的内容: `git stash list` +17. 恢复临时储存但不删除 stash: `git stash apply` +- 多次 stash 恢复: `git stash apply stash@{序号}`,序号通过 `git stash list` 查看 +18. 删除 stash: `git stash drop` + +--- + +19. 查看远程库信息: `git remote -v` +20. 从本地推送分支: `git push origin `,如果推送失败,先用 `git pull` 抓取远程更新提交 +21. 在本地创建和远程分支对应的分支: `git checkout -b origin/` +22. 建立本地分支和远程分支的关联: `git branch --set-upstream origin/` + +--- + +23. 新建标签: `git tag ` +- 可在后面指定一个 commit id, 通过 `git log --pretty=oneline --abbrev-commit` 查看 commit id +24. 指定标签信息: `git tag -a -m "blablabla..."` +25. 用PGP签名标签: `git tag -s -m "blablabla..."` +26. 查看所有标签: `git tag` +27. 查看标签说明: `git show ` +28. 推送一个本地标签: `git push origin ` +29. 推送全部未推送过的本地标签: `git push origin --tags` +30. 删除一个本地标签: `git tag -d ` +31. 删除一个远程标签: `git push origin :refs/tags/` diff --git a/Git-Hexin.txt b/Git-Hexin.txt new file mode 100644 index 000000000..9a89f19da --- /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-learn-book\357\274\210by XYF\357\274\211.md" "b/Git-learn-book\357\274\210by XYF\357\274\211.md" new file mode 100644 index 000000000..55a665d15 --- /dev/null +++ "b/Git-learn-book\357\274\210by XYF\357\274\211.md" @@ -0,0 +1,198 @@ +# Git操作笔记 +## 基本操作 +### 创建版本库 +什么是版本库呢?版本库又名仓库,英文名repository,你可以简单理解成一个目录,这个目录里面的所有文件都可以被Git管理起来,**每个文件的修改、删除**,Git都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻可以“还原”。 +- 创建一个learngit文件准备作为git仓库 +``` +$ mkdir learngit +$ cd learngit +$ pwd +//pwd命令用于显示当前目录路径 +$ ls +//ls命令用于显示当前目录的文件 +``` +- 将该文件夹初始化为git仓库 +``` +$ git init +``` +- 添加文件进入learngit仓库 +1. 将本地文件拖进该仓库文件夹 +2. +``` +$ git add readme.txt +//将该文件添加进仓库(注意:可以反复添加,再一次性commit) +``` +3.//用命令git commit告诉Git,把文件提交到仓库: +``` + $ git commit -m "wrote a readme file" +//-m后面输入的是本次提交的说明,可以输入任意内容,当然最好是有意义的,这样你就能从历史记录里方便地找到改动记录。 +``` +4. 补充&小结: +- **cat** 文件名 可以读取文档内容 +- git status命令可以让我们时刻掌握仓库当前的状态 +- git diff顾名思义就是查看difference,在后面添加文件名字后就可以看到具体修改了什么,确认修改内容后就可以commit文件了。 +- 要随时掌握工作区的状态,使用git status命令。 +- 如果git status告诉你有文件被修改过,用git diff可以查看修改内容。 +- **git checkout – 文件名把没暂存(即没add)的干掉,或者说,丢弃工作区,回到到暂存状态 ** +- git reset HEAD 文件名把暂存的状态取消,工作区内容不变,但状态变为“未暂存”。 +- **clear可以清屏** +*** +### 版本回退 +**git log命令显示从最近到最远的提交日志** +*想要退出git log状态,按q即可* +> 在Git中,用HEAD表示当前版本,也就是最新的提交3628164...882e1e0(注意我的提交ID和你的肯定不一样),上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100。 + +现在,我们要把当前版本“append GPL”回退到上一个版本“add distributed”,就可以使用**git reset**命令: +``` +$ git reset --hard HEAD^ +``` + +总结: + +- HEAD指向的版本就是当前版本,因此,Git允许我们在版本的历史之间穿梭,使用命令git reset --hard commit_id。 +- 穿梭前,用git log可以查看提交历史,以便确定要回退到哪个版本。 +- 要重返未来,用**git reflog**查看命令历史,以便确定要回到未来的哪个版本。 + +![Alt text](./0.jpg) + + +## 撤销修改 +### 上传到版本库后 +命令**git checkout -- readme.txt** +意思就是,把readme.txt文件在工作区的修改全部撤销,这里有两种情况: + +>一种是readme.txt自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态; +一种是readme.txt已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。 +总之,就是让这个文件回到最近一次git commit或git add时的状态。 + +*PS:git checkout -- file命令中的--很重要,没有--,就变成了“切换到另一个分支”的命令,我们在后面的分支管理中会再次遇到git checkout命令。* + +### 上传到暂存区后 +**git reset HEAD file**可以把**暂存区**的修改回退到工作区 + + +###小结 + +>场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout -- file。 +**场景2:**当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD file,就回到了场景1,第二步按场景1操作。 +场景3:已经提交了不合适的修改到版本库时,想要撤销本次提交,参考版本回退一节,不过前提是没有推送到远程库。 + +## 删除 +###删除已经提交的文件 +$ rm test.txt 可以删除该test文件 +这个时候,Git知道你删除了文件,因此,工作区和版本库就不一致了,git status命令会立刻告诉你哪些文件被删除了 + +**现在有两个选择** +- 一是确实要从版本库中删除该文件,那就用命令git rm删掉,并且git commit +- 另一种情况是删错了,因为版本库里还有呢,所以可以很轻松地把误删的文件恢复到最新版本 +**$ git checkout - - test.txt** +- **PS:git checkout其实是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”。** + + + +## 创建ssh key 推送github +**详见廖雪峰网站** + +### 小结 +小结 +- 要关联一个远程库,使用命令**git remote add origin git@server-name:path/repo-name.git**; +- 如果要重新关联新的远程库,则需要先**git remote rm origin** +- 关联后,使用命令git push -u origin master第一次推送master分支的所有内容; +此后,每次本地提交后,只要有必要,就可以使用命令**git push origin master**推送最新修改; +- 分布式版本系统的最大好处之一是在本地工作完全不需要考虑远程库的存在,也就是有没有联网都可以正常工作,而SVN在没有联网的时候是拒绝干活的!当有网络的时候,再把本地提交推送一下就完成了同步,真是太方便了! + +## 从远程仓库克隆 +**$ git clone git@github.com:michaelliao/gitskills.git** +### 小结 +>要克隆一个仓库,首先必须知道仓库的地址,然后使用git clone命令克隆。 +Git支持多种协议,包括https,但通过ssh支持的原生git协议速度最快。 +# + + + +## 分支管理 +### 创建分支 git branch fz1 +**切换到分支**: git chenkout fz1 +查看当前分支:git branch +*git branch命令会列出所有分支,当前分支前面会标一个*号。* + +注意:新创建的分支,是空的。 +### 合并分支 git merge fz1 +git merge命令用于合并指定分支到当前分支。 + +>合并分支时,加上--no-ff参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并,而fast forward合并就看不出来曾经做过合并。 +### 删除分支 git branch -d fz1 +*删除分支需要在其他分支上进行* + + + +###小结 +Git鼓励大量使用分支: +查看分支:git branch +创建分支:git branch name +切换分支:git checkout name +创建+切换分支:git checkout -b name +合并某分支到当前分支:git merge name +删除分支:git branch -d name + +>当Git无法自动合并分支时,就必须首先解决冲突。解决冲突后,再提交,合并完成。 +用git log --graph命令可以看到分支合并图。 + + + + +### stash +**当手头工作没有完成时,先把工作现场git stash一下,然后去修复bug,修复后,再git stash pop,回到工作现场。** +恢复的时候,先用git stash list查看,然后恢复指定的stash,用命令: +$ git stash apply stash@{0} + +### 强行删除 +开发一个新feature,最好新建一个分支; +如果要丢弃一个没有被合并过的分支,可以通过git branch -D 强行删除。 + + +### 多人合作 +- master分支是主分支,因此要时刻与远程同步; +- dev分支是开发分支,团队所有成员都需要在上面工作,所以也需要与远程同步; +- bug分支只用于在本地修复bug,就没必要推到远程了,除非老板要看看你每周到底修复了几个bug; +- feature分支是否推到远程,取决于你是否和你的小伙伴合作在上面开发。 + + +**多人协作的工作模式通常是这样:** +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 tag v1.0 + +查看标签:$ git tag +>注意,标签不是按时间顺序列出,而是按字母排序的。可以用git show (tagname)查看标签信息: + +删除标签:$ git tag -d v1.0 +并从远程删除(如果有的话)$ git push origin :refs/tags/v1.0 + +推送本地标签到远程 $ git push origin v1.0 +或一次性推送:$ git push origin --tags + +### 小结 +- 命令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/Git-summary b/Git-summary new file mode 100644 index 000000000..8283e0b4f --- /dev/null +++ b/Git-summary @@ -0,0 +1,166 @@ +Git总结 +1.windows安装git + 下载安装包、默认安装选项 + 安装完成后设置user.name和user.email + git config --global user.name "Your Name" + git config --global user.email "email@example.com" +2.创建版本地库repository + 选择合适路径,创建空目录 + mkdir dict_name + 把该目录变成git仓库 + git init + 把文件添加到版本库(工作区working directory-暂存区stage-分支branch) + touch test.txt + git add test.txt + git commit -m "add a file: test.txt" (本次提交说明) + (会出现换行符问题,#UNIX/LINUX:LF;DOS/WINDOWS:CRLF#使用命令git config --global core.autocrlf false) +3.版本修改 + 查看仓库状态(常使用) + git status + 查看本地与git仓库差异 + git diff file_name + 查看最近到最远的提交日志 + git log + git log --pretty=oneline + 回退版本 + 回到上一版本 git reset --hard HEAD^ + 回到上上个版本 git reset --hard HEAD^^ + 回到上100个版本 git reset --hard HEAD~100 + 回退后想再回到较新的版本 git reset --hard 要回到的commit_id + 回退并重启后想恢复到新版本 git reflog 查询整个本地仓库的commit,以确定恢复到哪个版本 + (显示整个本地仓储的commit, 包括所有branch的commit, 甚至包括已经撤销的commit, 只要HEAD发生了变化, 就会在reflog里面看得到. git log只包括当前分支的commit.) + 管理修改 + 查看工作区和版本库中最新版本的区别 + git diff HEAD -- file_name + 每次commit提交的是add进暂存区stage的内容,不add就不会被提交 + 撤销修改 + 未add,把文件在工作区的修改全部撤销,撤销后和版本库状态一模一样 + git checkout -- file_name + 已add未commit,把暂存区的修改回退到工作区,在丢弃工作区的修改 + git reset HEAD file_name + git checkout -- file_name + add并且commit过了,回退到指定版本 + git reset --hard HEAD^ + 删除文件 + 从本地删除文件 + rm file_name + 从版本库删除文件 + git rm file_name + git commit -m "remove file_name" + 本地删错了,从版本库检出文件 + git checkout -- file_name +4.远程仓库-Github-Git仓库托管 + SSH或者HTTP传输 + 添加远程仓库 + a.用户主目录下看有没有id_rsa和id_rsa.pub文件,若有,跳过创建SSH Key的步骤 + windows下打开Git Bash + ssh-keygen -t rsa -C "email@example.com" + (使用HTTP若需设置代理: git config --global http.proxy http://username:password@ip:port) + b.登陆Github,Account Settings-SSH Key,key文本框粘贴公钥.id_rsa.pub内容 + c.Github-Create a new repository + d.本地仓库内容推送到Github仓库 + git remote add origin #github上的地址# + eg. + git remote add origin https://github.com/liyapingXY/learngit.git + git remote add origin git@github.com:liyapingXY/learngit.git + e.第一次推送加-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来 + git push -u origin master + 从远程库克隆 + git clone #github上的地址# +5.分支管理 + 创建并切换到newbranch分支 + git checkout -b newbranch + 创建分支 + git branch newbranch + 切换分支 + git checkout newbranch + FF方式(fast-forward)合并指定分支到当前分支 + git merge dev + --no-ff方式的合并dev分支内容到当前分支 + git merge --no-ff -m "提交说明" dev + 删除分支 + git branch -d branch_name + 查看分支 + git branch + 合并分支时有冲突,手动解决冲突-提交-合并 + 查看分支合并图 + git log --graph + git log --graph --pretty=oneline --abbrev-commit + 创建bug分支-合并-删除,但当前分支工作未完成,不适合提交时,可将工作现场封存,待bug修复后再恢复 + git stash + git stash list (查看储藏的工作现场) + git stash pop (恢复同时把stash删除) + #恢复到指定的stash内容# + git stash apply stash@{0} + git stash drop stash@{0} + 强制删除没有合并过的分支 + git branch -D branch_name + 查看远程库信息 + git remote -v + 推送本地分支到对应的远程分支上 + git push origin master + (主分支master和开发分支dev有必要与远程同步,其他独自完成的分支不必要) + 创建远程origin的dev分支到本地(git clone只能克隆master) + git checkout -b dev origin/dev + 自己要提交的文件与别人已提交过的文件冲突时,从远程抓取文件-本地合并-解决冲突-推送 + git branch --set-upstream dev origin/dev (设置dev与origin/dev的链接) + git pull + 解决冲突 + git commit -m "说明" + git push origin branch_name +6.标签管理 + 在需要打标签的分支上 + git tag (默认HEAD) + 指定标签信息 + git tag -a -m "说明" + 查看所有标签 + git tag + 删除本地标签 + git tag -d + 删除远程标签 + git push origin :refs/tags/ + 推送本地标签 + git push origin + git push origin --tags (推送全部标签) +7.Tips + 忽略特殊文件 + 在Git工作区的根目录下创建一个特殊的.gitignore文件(放在版本库并使用git管理),然后把要忽略的文件名填进去 + 可引用 https://github.com/github/gitignore + 配置别名 + git config --global alias.<缩略> 全称 + eg. git config --global alias.br branch +8.搭建git服务器 + 准备一台linux服务器 + 1.安装git + sudo apt-get install git + 2.创建一个git用户,用以运行git服务 + sudo adduser git + 3.创建证书登录 + 把所有公钥(需要登录用户的id_rsa.pub文件内容)导入到/home/git/.ssh/authorized_keys文件中,一行一个 + 4.初始化Git仓库,选定一个目录作为Git仓库,假定/srv/sample.git,在/srv下输入命令 + sudo git init --bare sampe.git + 更改git仓库的owner + sudo chown -R git:git sample.git + 5.出于安全考虑,禁用shell登录 + (git用户可以正常通过ssh使用git,但无法登录shell,因为我们为git用户指定的git-shell每次一登录就自动退出) + 编辑/etc/passwd中 + git:x:1001:1001:,,,:/home/git:/bin/bash + 改为 + git:x:1001:1001:,,,:/home/git:/usr/bin/git-shell + 6.克隆远程仓库 + git clone git@server:/srv/sample.git + +注:管理公钥&管理权限 使用 Gitosis + + + + + + + + + + + + + \ No newline at end of file diff --git a/Git.docx b/Git.docx new file mode 100755 index 000000000..5b1bbff5c 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 100644 index 000000000..dcec48b3b --- /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 000000000..d774edbac --- /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/GitHub.txt b/GitHub.txt new file mode 100644 index 000000000..44923b13b --- /dev/null +++ b/GitHub.txt @@ -0,0 +1 @@ +这场学习体验我给五星好评 \ No newline at end of file diff --git a/GitHub_huaihuai62 b/GitHub_huaihuai62 new file mode 100644 index 000000000..9f4468c17 --- /dev/null +++ b/GitHub_huaihuai62 @@ -0,0 +1,5 @@ +2018年1月30日19:00:19 +花了两天的时间来学习老师的Git教程 发现收获很大 +已经慢慢会用Git来进行自己的项目开发了 +接下来继续学习下面的内容 +最后祝愿老师的网站越办越好 diff --git a/GitLearnNote.md b/GitLearnNote.md new file mode 100755 index 000000000..f746198f8 --- /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/GitNoteByWdeo3601.md b/GitNoteByWdeo3601.md new file mode 100644 index 000000000..786afa583 --- /dev/null +++ b/GitNoteByWdeo3601.md @@ -0,0 +1,154 @@ +## 远程仓库 + +#### 添加远程库 + + 1. 要关联一个远程库,使用命令 + `git remote add origin git@server-name:path/repo-name.git` ; + + 2. 关联后,使用命令 `git push -u origin master` 第一次推送master分支的所有内容; + + 3. 此后,每次本地提交后,只要有必要,就可以使用命令 `git push origin master` 推送最新修改; + +#### 从远程库克隆 + + Git支持多种协议,包括https,但通过ssh支持的原生git协议速度最快。 + + 1. 用命令git clone克隆一个本地库 `git clone git@github.com:wdeo3601/gitskills.git` + + +## 分支管理 + +#### 创建与合并分支 + + 1. 创建dev分支,然后切换到dev分支:git checkout -b dev + + 2. git checkout命令加上-b参数表示创建并切换,相当 于以下两条命令: + git branch dev + git checkout dev + + 3. 查看当前分支(列出所有分支,当前分支前面会标一个*号): git branch + + 4. 切换回master分支:git checkout master + + 5. 把dev分支的工作成果合并到master分支上:git merge dev + git merge命令用于合并指定分支到当前分支。 + + 6. 删除dev分支了:git branch -d dev + + 小结 + Git鼓励大量使用分支: + + 查看分支:git branch + + 创建分支:git branch + + 切换分支:git checkout + + 创建+切换分支:git checkout -b + + 合并某分支到当前分支:git merge + + 删除分支:git branch -d + +#### 解决冲突 + + 1. `git status` 也可以告诉我们冲突的文件 + Git用<<<<<<<,=======,>>>>>>>标记出不同分支的内容 + + 2. 用 `git log --graph` 命令可以看到分支合并图。 + +#### 分支管理策略 + + 在实际开发中,我们应该按照几个基本原则进行分支管理: + + 首先,master分支应该是非常稳定的,也就是仅用来发布新版本,平时不能在上面干活; + + 那在哪干活呢?干活都在dev分支上,也就是说,dev分支是不稳定的,到某个时候,比如1.0版本发布时,再把dev分支合并到master上,在master分支发布1.0版本; + + 你和你的小伙伴们每个人都在dev分支上干活,每个人都有自己的分支,时不时地往dev分支上合并就可以了。 + + + 1. 强制禁用Fast forward模式合并分支 `git merge --no-ff -m "merge with no-ff" dev` + +#### Bug 分支 + + 当你接到一个修复一个代号101的bug的任务时,很自然地,你想创建一个分支issue-101来修复它,但是,等等,当前正在dev上进行的工作还没有提交,幸好,Git还提供了一个stash功能,可以把当前工作现场“储藏”起来,等以后恢复现场后继续工作 + + 1. 保存现场工作区 `git stash` + + 2. 恢复工作现场(不自动删除):`git stash apply` `git stash apply stash@{0}` + + 3. 删除保存的工作现场:`git stash drop` + + 4. 恢复的同时把stash内容也删了:`git stash pop` + + 5. 查看保存的工作现场:`git stash list` + +#### Feature 分支 + + 开发一个新feature,最好新建一个分支; + + 如果要丢弃一个没有被合并过的分支,可以通过git branch -D 强行删除。 + + 1. 强行删除分支:`git branch -D feature-vulcan` + +#### 多人协作 + + 1. 查看远程库的信息,用 `git remote` + + 2. 用 `git remote -v` 显示更详细的信息 + + 3. 推送分支: `git push origin master` + + 4. 抓取分支:`git pull` + + ------------------------------- + + 多人协作的工作模式通常是这样: + + 首先,可以试图用 `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`,如果有冲突,要先处理冲突。 + +## 标签管理 + +#### 创建标签 + + 1. 命令 `git tag ` 用于新建一个标签,默认为HEAD,也可以指定一个commit id; + + 2. `git tag -a -m "blablabla..."` 可以指定标签信息; + + 3. `git tag -s -m "blablabla..."` 可以用PGP签名标签; + +#### 操作标签 + + 1. 命令 `git push origin ` 可以推送一个本地标签; + + 2. 命令 `git push origin --tags` 可以推送全部未推送过的本地标签; + + 3. 命令 `git tag -d ` 可以删除一个本地标签; + + 4. 命令 `git push origin :refs/tags/` 可以删除一个远程标签。 \ No newline at end of file diff --git a/GitNote_01.html b/GitNote_01.html new file mode 100755 index 000000000..b1f2035cc --- /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 000000000..0a8856e5d --- /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 100644 index 000000000..27529c78d --- /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 100644 index 000000000..847adcb3e --- /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 000000000..5b5c57d30 --- /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 000000000..b5d3296eb --- /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 000000000..78c363c11 --- /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 000000000..b3fb2c95d --- /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 000000000..c38a69469 --- /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-Kwok/Git.md" "b/Git\345\255\246\344\271\240-Kwok/Git.md" new file mode 100644 index 000000000..ff45436ab --- /dev/null +++ "b/Git\345\255\246\344\271\240-Kwok/Git.md" @@ -0,0 +1,104 @@ +# 关于Git + +> 一知半解的使用Git和Github很久了,也挺难受的。所以这次跟着[廖雪峰老师的Git教程](https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000)对Git进行一次系统的了解和学习。 + +## Git是从哪里来的? + +Linus在1991年创建了开源的Linux,之后Linux项目依赖大量的社区成员的贡献得以不断壮大。而那么多志愿者为Linux系统编写代码,Linux系统的代码管理却依靠的是Linux本人来手动合并志愿者的代码。 +> “你也许会想,为什么Linus不把Linux代码放到版本控制系统里呢?不是有CVS、SVN这些免费的版本控制系统吗?因为Linus坚定地反对CVS和SVN,这些集中式的版本控制系统不但速度慢,而且必须联网才能使用。有一些商用的版本控制系统,虽然比CVS、SVN好用,但那是付费的,和Linux的开源精神不符。” -- 廖雪峰 + +后来,这种手工合并的方式随着Linux系统的越发庞大变得难以为继,Linux选择了一个商业的版本控制系统BitKeeper,并且该系统的东家BitMover也很nice的授权Linux社区免费使用该系统。再后来,Linux社区牛人手痒痒试图破解BitKeeper的协议被BitMover公司发现了,该公司威胁收回Linux社区的免费使用权。 + +最后,据说Linux花了两星期写出了Git。 +... + +Git迅速火了,08年Gayhub推出,为开源项目免费提供Git存储。Gayhub现在的影响力,大家也很清楚了。就酱。 + +> 注:SVN是集中式的版本控制系统,Git是分布式版本控制系统。集中式是指将版本库存放在中央服务器,你要修改,先联网获取最新的版本,然后修改后再推送到中央服务器。中央服务器出个问题大家都可以下班了。而对于分布式来说,每个人的电脑都是一个版本库,协作的时候是把修改互相推送给对方,通常也有一个中央服务器,但这个服务器的作用只是方便大家交换自己的修改,没有它一样可以工作。 + +## 配置一下Git +1. [官网](https://git-scm.com/)下载,打不开就随便百度一个下载。安装时一路Next即可。各个选项什么意思这里先不细说了。 +2. 命令行敲一下`git --version`,看看是不是已经安装了。顺便看看当前版本。 +3. 简单配置一下: + ``` Git + $ git config --global user.name "Your Name" + $ git config --global user.email "email@example.com" + ``` + 意思是什么呢,就是在你提交你的改动的时候,别人可以知道这是谁提交的。`global`就是针对本机所有仓库进行设置,对单个仓库进行特殊设置当然也是可以的了。定位到仓库,把`global`去了即可。 + +## 可以开始使用Git啦 + +#### 版本库的创建 +1. 新建文件夹。为了避免不必要的问题,路径最好不要有中文。 +2. 命令行定位到文件夹(嫌输路径麻烦的,文件夹内`Shift+鼠标右键`,打开命令行/Powershell即可),执行`git init`。 +3. 会有一个隐藏文件夹`git`生成,就是Git用来管理版本库的,不要乱动。 + +#### 关于可以管理的文件 +纯文本文件。其他不可以。 +- 视频不可以。 +- 图片不可以。 +- Word文档不可以,因为它是二进制的。 + +所以,选一个好点的文字编辑器吧。以下均支持Markdown(可能需要安装插件)。 +- 强烈推荐Visual Studio Code。写代码,编辑文本都很好,官方免费。 +- Sublime,不怎么写代码的话,这个启动速度很快。即使是写一些代码,它也是一个很不错的选择。 +- 其他如Atom什么的。如果要求比较细致的话,自己都去试试,做做对比,这个话题在此打住。 + +## 让我们提交一个文件到版本库 + +先说几条指令: +|命令|意义| +|--|--| +|`git init`|之前说过,初始化一个Git仓库 +|`git status` |查看仓库文件状态,比如什么文件你创建了还没被添加,什么文件你添加了还没提交。 +|`git add yourfile.xx`|添加一个文件到仓库 +|`git commit -m "your commit message"`|提交改动。一定要写信息,这里就不要偷懒了。不写信息的话会也报错。坚持不想写,自己去查怎么做吧。 +|`git log`|看看提交历史。 + +目前,一个完整的提交流程是这样的,以一个`readme.md`为例: +1. 新建文件夹 +2. 对文件夹执行`git init` +3. 新建文件`readme.md` +4. 可以使用`git status`查看仓库里的文件状态,这时会显示你刚才新建的文件状态为`Untracked`,需要`add` +5. `git add readme.md`,将`readme.md`文件添加到仓库里。 +6. `git commit -m "girlfriend committed"`,提交。 + +## 开始管理仓库啦 + +#### 提交修改 +我们修改下`readme.md`文件。比如加几句话。 +1. 这时使用`git status`,会显示文件是被修改状态`modified` +2. 使用`git diff`可以查看改动了什么内容。 +3. `git add`&`git commit -m""`提交修改。 +4. 这时使用`git status`,会显示文件是被修改状态`working tree clean`,工作区很干净啊,什么都处理好了。 + +#### 版本回退 +1. 你自己重复做一些提交操作。 +2. `git log`查看提交历史 +3. git中当前版本为`HEAD`,上一个`HEAD^`,上上个`HEAD^^`,或者`HEAD^2`,同理,`HEAD^100`表示往上100个版本。 +4. `git reset --hard^`可以回到上个版本。同理回到其他版本。 +5. 查不过来?那就对着`git log`看log信息`commit`后边跟着的16进制数字,就是`commitId`,记下来使用`git reset --hard commitId`来会到那个版本,亲测输前四位已经可以了,但为了避免万一出现重复的情况,多输几位更稳妥些。 +6. 后悔回退了?输`git log`也找不到新版本的提交信息了,那怎么办?`git reflog`帮你,这个命令可以记录你所有操作的commitId,现在再次使用`git reset --hard commitId`回到未来吧。 + +#### 撤销修改 +1. `git checkout filename`,用于对文件的修改还没有被应用,则可以返回之前一次`add`或`commit`后的版本,哪个近算哪个。什么意思呢?你执行了该命令,就去暂存区里找一下,有就给你还原,没有就去版本库里找一下,有就还原。具体就是下面两种情况: + - 在执行过`commit`之后,你做了改动,但是还没有执行`add`命令,这时使用`checkout`可以撤销修改,回到刚`commit`后时的状态。 + - 上个操作是`add`,之后做了改动,不想要了,可以使用`checkout`,这时候是回到刚`add`之后的状态。 +2. `git reset HEAD filename`,这个命令适用于,你`add`了文件,但没有提交,你想回到文件最近一次`commit`后的状态,这个命令就可以把文件恢复到版本库中最新版本。 +3. `commit`后后悔了?参考版本回退吧。 + +#### 删除 +1. 从git版本库删除,你说这个文件我不放在版本库了。这时候有一个问题,那就是你本地还要么? + - 要,那就使用`git rm filename --cached`这样就像你刚自己创建了一个一摸一样的文件一样。使用`git status`可以看到这个文件状态是`Untracked`未缓存,暂存区没相关信息。 + - 不要,那就使用`git rm filename`,如果你做过修改则可以在后边加上`-f`来执行强制操作,即force。 +2. 删除后可以使用`git reset HEAD filename`结合`git checkout filename`来还原到版本库最新的版本, +3. 无论怎样你都是可以从版本库里还原之前提交过的版本的。但是注意一些未提交的改动会丢失。 + + +## 远程仓库 + +#### Github +github使用SSH协议来确定你推送的内容确实是你推送的,而不是别人冒名顶替的。 + +> 待续... + 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 000000000..fe671bb4f --- /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-Nov-R/git-nov-r.txt" "b/Git\345\255\246\344\271\240\347\254\224\350\256\260-Nov-R/git-nov-r.txt" new file mode 100644 index 000000000..5eba27706 --- /dev/null +++ "b/Git\345\255\246\344\271\240\347\254\224\350\256\260-Nov-R/git-nov-r.txt" @@ -0,0 +1 @@ +感谢廖雪峰老师的教程~!!! \ No newline at end of file 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 000000000..18c5b29d7 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 000000000..ea210ebca --- /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 000000000..8524decd0 --- /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 000000000..c3f4cf3cf --- /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 000000000..97a7f58fb --- /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 000000000..68ea47e35 --- /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 000000000..deff541a2 --- /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 000000000..24b2a3ffc --- /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 000000000..d76b93275 --- /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 000000000..205cee287 --- /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 000000000..476fb16a3 --- /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 000000000..4455a2745 --- /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 000000000..b8a5acdcc --- /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 000000000..7b8b5bb69 --- /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-Wangxiao/GitLearningNotesByWX.md" "b/Git\345\255\246\344\271\240\347\254\224\350\256\260-Wangxiao/GitLearningNotesByWX.md" new file mode 100644 index 000000000..9872b5f6b --- /dev/null +++ "b/Git\345\255\246\344\271\240\347\254\224\350\256\260-Wangxiao/GitLearningNotesByWX.md" @@ -0,0 +1,408 @@ +Git + +=== + +## 学习资料 + +- [ProGit中文版][id] + +[id]:https://git-scm.com/book/zh/v2 + + + +- [廖雪峰的Git教程][id] + +[id]:http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000 + + + +- [Git-简易指南][id] + +[id]:http://www.bootcss.com/p/git-guide/ + + + + + +廖雪峰--Git教程 小结 + +----- + + + +## 安装Git + + + +在Windows上安装Git,可以从Git官网直接[下载安装程序](https://git-scm.com/downloads),然后按默认选项安装即可。 + + + +安装完成后,在开始菜单找到`Git-->Git Bash`,蹦出一个类似命令行窗口的东西,说明Git安装成功! + + + +安装完成后,在命令行输入: + + + +``` + +$ git config --global user.name "Your Name" + +$ git config --global user.email "email@example.com" + +``` + + + +注意`git config`命令的`--global`参数,表示你这台机器上所有的Git仓库都会使用这个配置,当然也可以对某个仓库指定不同的用户名和Email地址。 + + + +>首先明确,所有版本控制系统,只能跟踪文本文件的改动,比如TXT文件,网页,所有程序代码等等。而视频,图片这些二进制文件,git是没法跟踪的。Microsoft的Word格式也是二进制格式。因此,版本控制系统没法跟踪Word文件的改动,如果要真正使用版本控制系统,就要以纯文本方式编写文件。 + + + +##创建版本库 + + + +**选择一个合适的地方,创建一个空目录:** + + + +>`mkdir --folder`此命令为创建一个文件夹 + +> + +>`cd --path`change directory 的简写,改变目录的意思,如`cd F:/GitPlace`切换F盘下面的GitPlace目录。 + +> + +>`pwd` print working directory,打印工作目录,他会显示我们当前所在的目录路径。 + +> + +>`ls` list,列出当前目录中的所有文件,可以通过`ls -ah`命令看见创建的Git仓库 + + + +**初始化一个Git仓库,使用```git init```命令。** + + + +**添加文件到Git仓库,分两步:** + +- 第一步,使用命令```git add ```,注意,可反复多次使用,添加多个文件; + + + +>当需要add文件夹时使用命令`git add ./dir`dir指文件夹floder名称 + + + +- 第二步,使用命令```git commit```,完成。 + + + + ***格式如下:注意用 `git commit`命令后面要跟 `-m"explain "`注释*** + + + +>$ git commit -m "wrote a readme file" + +>[master (root-commit) cb926e7] wrote a readme file + +> 1 file changed, 2 insertions(+) + +> create mode 100644 readme.txt + + + + + + + +##时光穿梭机 + +- 要随时掌握工作区的状态,使用```git status```命令。 + +- 如果```git status```告诉你有文件被修改过,用```git diff``` 可以查看修改内容。 + + + +##版本回退 + +- HEAD指向的版本就是当前版本,因此,Git允许我们在版本的历史之间穿梭,使用命令```git reset --hard commit_id```。 + +- 穿梭前,用```git log```可以查看提交历史,以便确定要回退到哪个版本。 + +- 要重返未来,用```git reflog```查看命令历史,以便确定要回到未来的哪个版本。 + + + +>在Git中,用HEAD表示当前版本,也就是最新的提交3628164...882e1e0(注意我的提交ID和你的肯定不一样),上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100。 + + + +##撤销修改 + +- 场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令```git checkout -- file```。 + +- 场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令```git reset HEAD file```,就回到了场景1,第二步按场景1操作。 + +- 场景3:已经提交了不合适的修改到版本库时,想要撤销本次提交,参考版本回退一节,不过前提是没有推送到远程库。 + + + +##删除文件 + +- 命令```git rm```用于删除一个文件。如果一个文件已经被提交到版本库,那么你永远不用担心误删,但是要小心,你只能恢复文件到最新版本,你会丢失最近一次提交后你修改的内容。 + +- 删错了,命令```git checkout```其实是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”。 + + + +## SSH公匙 + +##### 什么是SSH公匙 + +SSH是一种网络协议,用于计算机之间的加密登录。目前是每一台 Linux 电脑的标准配置。而大多数 Git 服务器都会选择使用 SSH 公钥来进行授权,所以想要在 GitHub 提交代码的第一步就是要先添加 SSH key 配置。 + +##### 生成SSH公匙 + +> 可以现在`Git Bash`下输入`ssh`查看是否安装SSH,出现提示命令说明已安装有SSH + +一般Windows安装Git Bash都带了SSH的 + + + +- 首先先确认一下是否已经有一个公钥了。SSH 公钥默认储存在账户的主目录下的 ~/.ssh 目录。进去看看: + +``` + +$ cd ~/.ssh + +$ ls + +authorized_keys2 id_dsa known_hosts + +config id_dsa.pub + +``` + +> 关键是看有没有`something`和`something.pub`来命名的一对文件。这个`something`通常是`id_dsa`或`id_rsa`。有`.pub`后缀的文件就是公匙,另一个是密匙。 + + + +- 如果没有上面这两个文件,甚至连`.ssh`这个文件也没有,可以输入`ssh-keygen -t rsa`,然后连续三次回车生成 + + + +``` + +$ ssh-keygen -t rsa + + + +Generating public/private rsa key pair. + + + +Enter file in which to save the key (/c/Users/wangxiao/.ssh/id_rsa): Enter passp hrase (empty for no passphrase): + +Enter same passphrase again: + +Your identification has been saved in /c/Users/wangxiao/.ssh/id_rsa. + +Your public key has been saved in /c/Users/wangxiao/.ssh/id_rsa.pub. + +The key fingerprint is: + +SHA256:b/xwR1JvPX21wt4oHv9GL0xbQ/Rlt1tV7mNfbuvUKQU wangxiao@DESKTOP-PNIDKT9 + +The key's randomart image is: + ++---[RSA 2048]----+ + +| o| + +| o=| + +| Eo.O| + +| ...=B| + +| S .oo*@| + +| o .oB*X| + +| =o.*o*B| + +| ..++.*oo| + +| ...+= | + ++----[SHA256]-----+ + + + +``` + +- 然后查看`.pub`公匙文件 + + + + + +``` + +$ cat ~/.ssh/id_rsa.pub + + + +``` + + + +##### Github上添加SSH + +> 添加成功后,输入`ssh -T git@github.com `进行测试 + + + +##### SSH警告 + +> 第一次使用Git连接Github时会得到一个警告 + + + +``` + +The authenticity of host 'github.com (xx.xx.xx.xx)' can't be established. + +RSA key fingerprint is xx.xx.xx.xx.xx. + +Are you sure you want to continue connecting (yes/no)? + +``` + +> 这是因为Git使用SSH连接,而SSH连接在第一次验证GitHub服务器的Key时,需要你确认GitHub的Key的指纹信息是否真的来自GitHub的服务器,输入`yes`回车即可。Git会输出一个警告,告诉你已经把GitHub的Key添加到本机的一个信任列表里了: + + + +``` + +Warning: Permanently added 'github.com' (RSA) to the list of known hosts. + +``` + +> 这个警告只会出现一次,后面的操作就不会有任何警告了。 + + + +- 然后出现下面提示说明成功在GitHub上添加了SSH + + + +``` + +Hi LittlePrinceWX! You've successfully authenticated, but GitHub does not provide shell access. + +``` + + + + + +##添加远程库--GitHub + +- 要关联一个远程库,使用命令```git remote add origin git@server-name:path/repo-name.git```; + +- 关联后,使用命令```git push -u origin master```第一次推送master分支的所有内容; + +- 此后,每次本地提交后,只要有必要,就可以使用命令```git push origin master```推送最新修改; + + + +分布式版本系统的最大好处之一是在本地工作完全不需要考虑远程库的存在,也就是有没有联网都可以正常工作,而SVN在没有联网的时候是拒绝干活的!当有网络的时候,再把本地提交推送一下就完成了同步,真是太方便了! + + + +##从远程库克隆 + +要克隆一个仓库,首先必须知道仓库的地址,然后使用git clone命令克隆。 + +Git支持多种协议,包括https,但通过ssh支持的原生git协议速度最快。 + + + +##创建与合并分支 + +Git鼓励大量使用分支: + +- 查看分支:```git branch``` + +- 创建分支:```git branch ``` + +- 切换分支:```git checkout ``` + +- 创建+切换分支:```git checkout -b ``` + +- 合并某分支到当前分支:```git merge ``` + +- 删除分支:`git branch -d ` + + + + + + + +## git bash 下操作文件及文件夹命令 + + + +1. `cd`change directory 的简写,切换目录 + +2. `cd ..`回退到上一目录 + +3. `pwd`print working directory,打印工作目录 + +4. `ls`list,列出当前目录中的所有文件 + +5. `touch`新建一个文件 + +6. `rm`删除一个文件 + +7. `mkdir`新建一个目录,就是新建一个文件夹 + +8. `rm -r`删除一个文件夹 + +9. `mv`移动文件,mv file folder + +10. `reset`清屏,把git bash命令窗口中的所有内容清空 + + + + + +## 使用码云 + + + +[廖雪峰教程](https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/00150154460073692d151e784de4d718c67ce836f72c7c4000) + + + + + + +## 使用GitHub + + + +[知乎-从零开始学习GitHub系列][id] + +[id]:https://zhuanlan.zhihu.com/stormzhang?topic=GitHub \ No newline at end of file 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 000000000..bc8a670e0 --- /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 000000000..38223113d --- /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 000000000..ee5d3db5a --- /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-yuly/basic-usage.svg" "b/Git\345\255\246\344\271\240\347\254\224\350\256\260-yuly/basic-usage.svg" new file mode 100644 index 000000000..7aa4014d3 --- /dev/null +++ "b/Git\345\255\246\344\271\240\347\254\224\350\256\260-yuly/basic-usage.svg" @@ -0,0 +1,290 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git "a/Git\345\255\246\344\271\240\347\254\224\350\256\260-yuly/git-cheatsheet-yuly.txt" "b/Git\345\255\246\344\271\240\347\254\224\350\256\260-yuly/git-cheatsheet-yuly.txt" new file mode 100644 index 000000000..d1207f70c --- /dev/null +++ "b/Git\345\255\246\344\271\240\347\254\224\350\256\260-yuly/git-cheatsheet-yuly.txt" @@ -0,0 +1,12 @@ +配置基本信息 + 全局范围 + + git config --global user.name "you name" + git config --global user.email "email@example.com" + + +Git status +红色,表文件没有add到提交缓存区 +绿色,已add了,提交就生效 + +git commit -a //等价先git add所有文件,再提交 \ No newline at end of file diff --git "a/Git\345\255\246\344\271\240\347\254\224\350\256\260-yuly/git-cheatsheet.pdf" "b/Git\345\255\246\344\271\240\347\254\224\350\256\260-yuly/git-cheatsheet.pdf" new file mode 100644 index 000000000..6742385ea Binary files /dev/null and "b/Git\345\255\246\344\271\240\347\254\224\350\256\260-yuly/git-cheatsheet.pdf" differ diff --git "a/Git\345\255\246\344\271\240\347\254\224\350\256\260-yuly/git\345\273\226\351\233\252\345\263\260cmdPractice-yuly.txt" "b/Git\345\255\246\344\271\240\347\254\224\350\256\260-yuly/git\345\273\226\351\233\252\345\263\260cmdPractice-yuly.txt" new file mode 100644 index 000000000..77b43723a --- /dev/null +++ "b/Git\345\255\246\344\271\240\347\254\224\350\256\260-yuly/git\345\273\226\351\233\252\345\263\260cmdPractice-yuly.txt" @@ -0,0 +1,1147 @@ +Git: + +安装Git +http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/00137396287703354d8c6c01c904c7d9ff056ae23da865a000 +22:35 2017/5/23 +linux + + apt-install git + +Mac OS x + + homebrew安装 + Xcode中集成, "Xcode"->"Preferenes" + +Windows + + msysgit是Windows版的Git,从https://git-for-windows.github.io下载(网速慢的同学请移步国内镜像https://pan.baidu.com/s/1kU5OCOB#list/path=%2Fpub%2Fgit) + +配置基本信息 + + git config --global user.name "you name" + git config --global user.email "email@example.com" +end of (安装Git) + + +创建版本库 +http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/0013743256916071d599b3aed534aaab22a0db6c4e07fd0000 +23:14 2017/5/23 + + mkdir learngit + cd learngit + pwd + git init + +记得把Notepad++的默认编码设置为UTF-8 without BOM +或 默认资源管理员中新建文本没有问题,ANSI编码 +编写一个readme.txt文件 + +Git is a version control system. +Git is free software. + +添加此文件到git版本中, 文件有new file:前缀 + + git add readme.txt + +做一个提交 + + git commit -m "wrote a readme file" + +end of (创建版本库) +10:33 2017/2/13 + + +时光机穿梭 +http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/0013743858312764dca7ad6d0754f76aa562e3789478044000 +7:25 2017/5/24 + +修改readme.txt文件 + +Git is a distributed version control system. +Git is free software. + +历史记录得不同会出现Binary files differ 然后就不能比较这是为什么? +可能是编码格式不统一造成的吧 +用-a参数,强制以文本格式比较 +默认资源管理员中新建文本没有问题,ANSI编码 + +查看差异,没有加文件名,表所有有差异 + + git diff readme.txt + git add readme.txt + git status + +做一个提交 + + git commit -m "add distributed" + +网友总结 +git add的各种区别 + + git add -A //添加所有改动 + git add * //添加新建文件和修改,但是不包括删除 + git add . //添加新建文件和修改,但是不包括删除 + git add -u //添加新建文件和删除,但是不包括新建文件 + +在commit前撤销add + + git reset [file] //撤销提交单独文件 + git reset //所有提交缓存到unstage + +添加到缓存区stage,电脑中图标为X红色,提交后为*绿色OK, +同时,checkout没有用,要先reset此文件,再checkout + + git checkout -- readme.txt //注意,add添加加(同commit提交后)就无法通过这种方式撤销修改 + +快捷 + + git commit -a //等价先git add所有文件,再提交 +end of (时光机穿梭) + + +版本回退 +http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/0013744142037508cf42e51debf49668810645e02887691000 +22:16 2017/5/24 +修改readme.txt文件 + +Git is a distributed version control system. +Git is free software distributed under the GPL. + +提交到版本库 + + git add readme.txt + git commit -m "append GPL" + +查看版本历史记录,两种方式 + + git log + git log --pretty=oneline + +回退版本,HEAD为一个指针,表当前在那个位置,类似于虚拟机快照在那里 +HEAD当前版本 HEAD^上个版本 HEAD^^上上个版本 HEAD^5上5个版本 中间的版本历史中没有了, 用reflog查到最新版本,中间版本自动恢复显示 +注意:到还原版本之间的版本历史记录没有了,,可查原commit id找回,当命令窗口没有关 +HEAD可用commit id来代替 +reset是指将当前head的内容重置,不会留任何痕迹。 + + git reset --hard //回退到当前版本,修改的全部没有了 + git reset --hard [提交ID] //回退到当前版本,修改的全部没有了 + +小节: +git reset 会保留工作目录。这样,提交是没有了,但是修改内容还在磁盘上。这是一种安全的选择,但通常我们会希望一步就“撤销”提交以及修改内容 — 这就是 --hard 选项的功能。 +revert效果看起来相同,但实现机制不一样,当前建一个新版本,再还原为指定版本,中间版本有 +reflog 还原到任何版本,保括历史中没有的, 几个月后自动要清理不用的reflog +ff0bf00 HEAD@{13}: commit: add distributed +commit_id也可以用reflog中 HEAD@{X} 引用操作历史 +checkout单个文件还原 + +end of (版本回退) + + +工作区和暂存区 +http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/0013745374151782eb658c5a5ca454eaa451661275886c6000 +22:34 2017/5/25 +工作区(Working Directory) 就是电脑中能看到的文件与目录 +暂存区(stage)或叫index +修改文件readme.txt,加上一行 + +Git is a distributed version control system. +Git is free software distributed under the GPL. +Git has a mutable index called stage. + +添加到stage,查看状态,做一个提交 + + git status + git add readme.txt + git add LICENSE + git status + git commit -m "understand how stage works" + git status + +end of (工作区和暂存区) + + +管理修改 +http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/001374829472990293f16b45df14f35b94b3e8a026220c5000 +0:07 2017/5/26 +Git管理的是修改,而不是文件,测试,对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. + +放到stage缓存区 + + git add readme.txt + git status + +再修改文件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 of files. + +做一个提交 + + git commit -m "git tracks changes" + +当重命名一个文件名,没有add,Git认为是删除,再新建一个, +add后,识别到rename, 原理是反向操作运算得出差异 +end of (管理修改) + + +撤销修改 +http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/001374831943254ee90db11b13d4ba9a73b9047f4fb968d000 +7:22 2017/5/27 +修改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 of files. +My stupid boss still prefers SVN. + +查看状态,发现没有加入到暂存stage区,两种情况 +暂存stage区, 放弃当前工作区文件,为上次提交commit id状态 +已加入暂存stage区,放弃当前工作区文件,为暂存区文件 +记放弃当前工作区, 还原最近文件, +注意,没有文件,表所有文件,--指当前分支,没有与文件名,表切换分支 + + git status + git checkout -- readme.txt + +修改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 of files. +My stupid boss still prefers SVN. + +添加到暂存区stage + + git add readme.txt + git status + +从暂存区stage修改回到工作区,如起用checkout,还原是stage区的,看起来没效果 +教程表达有误:git reset HEAD readme.txt只是取消文件在stage去unstage,但真没有到工作区(现实中文件夹) +只是做了一个复制,提交用的到,checkout不,不会到工作区中,,类似于于文件在其它目标打复选,有勾表可提交, +没勾不提交,但文件压根没在工作区文件夹中呀! + + git reset HEAD readme.txt + git checkout -- readme.txt + + +实验: + 原有文件内容设置A,添加stage区 + git reset HEAD^^ readme.txt 设备版本B 到了工作区,但文件不同,没有还原,要确认,有chekcout + 此时stage区还有文件,但不是reset还原过来的内容,还是A + + git checkout -- readme.txt + 后,内容为B + + 又 + git reset HEAD readme.txt + git check out -- readme.txt + + 神奇成了最初A内容,何解,还有第三存储区吗? + +end of (撤销修改) + + +删除文件 +http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/0013758392816224cafd33c44b4451887cc941e6716805c000 +23:55 2017/5/31 +删除也是一个修改操作,先建一个test.txt, 加一个内容,提交 + + git add test.txt + git commit -m "add test.txt" + +删除test.txt文件,看状态,显示已删除 + + rm test.txt + git status + +删除,有两种处理方法 + + git rm test.txt + git commit -m "remove test.txt" + + +或者add来确认 + + git add test.txt + git commit -m "remove test.txt" + +git rm test.txt +等于 +rm test.txt +git add test.txt + +还原版本 + + git checkout -- test.txt + + +git add a.txt -> 匹配到a.txt +git add *.txt -> 匹配到当前目录下所有txt +git add **/*.txt -> 匹配到当前目录和子目录下所有txt +git add . -> 匹配到当前目录下所有文件 + +有小误网友羲皇殿 +1 说的也不清楚,应该还是要区分 +假定HEAD版本为版本1 + +1、工作区你修改了,为 版本2 ,但没add,那么 checkout 就会使你工作区回到版本1 +2、工作区你修改了,为版本2,add了,stage区也为版本2,然后你又修改了工作区,为版本3,没再次add,那么checkout就会使你stage区的版本2失效,理解为清空也行,但是工作区依然版本3 +end of (有小误网友羲皇殿) + + +end of (删除文件) + + +远程仓库 +http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/001374385852170d9c7adf13c30429b9660d0eb689dd43a000 +12:06 2017/6/4 +生成密钥, id_rsa为私钥 id_rsa.pub为公钥, 公钥上传到Github +Account Settings->SSH Keys->Add SSH Key +$ ssh-keygen -t rsa -C "ibm8808@sohu.com" + +C:\用户(就是中文两个字用户)\Administrator\.ssh + +Github说明 +…or create a new repository on the command line + +echo "# gitlearn2" >> README.md +git init +git add README.md +git commit -m "first commit" +git remote add origin https://github.com/yuly/gitlearn2.git +git push -u origin master +…or push an existing repository from the command line + +git remote add origin https://github.com/yuly/gitlearn2.git +git push -u origin master + +添加远程库 +http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/0013752340242354807e192f02a44359908df8a5643103a000 +14:36 2017/6/4 +添加推送与拉取地址,名称默认origin,这里取其它名称实验,本地文件夹为反learngit +https模式上传要密码 + $ git remote add origin https://github.com/yuly/gitlearn2.git +$ git remote add myshh3 git@github.com:yuly/gitlearn.git +$ git remote -v + $ git push -u origin master +$ git push -u myshh3 master + +第一次提交,要输入yes +第一次后, +$ git push myshh3 master +或 +$ git push + +end of (添加远程库) + + +从远程库克隆 +http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/001375233990231ac8cf32ef1b24887a5209f83e01cb94b000 +15:25 2017/6/4 +建立一个新仓库,初始化README文件 +本地一个新目录,执行完自动新建一个默认文件夹为仓库名称,可以改名 +$ git clone https://github.com/yuly/gitskills +end of (从远程库克隆) +end of (远程仓库) + + +分支管理 +http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/0013743862006503a1c5bf5a783434581661a3cc2084efa000 +15:35 2017/6/4 +创建与合并分支 +http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/001375840038939c291467cc7c747b1810aab2fb8863508000 +15:40 2017/6/4 +快速分支,只是移动指针 +建立dev分支,并切换 +$ git branch dev +$ git checkout dev + +也可合并为一句 +$ git checkout -b dev + +查看分支,前面为*为当前分支 +$ git branch +end of (创建与合并分支) + +做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. +Createing a new branch is quick + +$ git add readme.txt +$ git commit -m "branch test" + +切回master分支,神奇的readme.txt还回到master那个版本,用notepad2的文件变更通知直观看 +$ git checkout master + +分支删除 +$ git branch -d dev +Deleted branch dev (was ada6748). + +测试果真是指针变化 +yuly@yuly-PC MINGW32 /d/yuly/doc/gitlearn/liaoGit/learngit (master) +$ git log --pretty=oneline +5df4cff96e6d9009546cd270f5803c37fd874e44 remove test.txt +59d5ed7664784c66a8fb61f5c6dc6fff03ddec15 add test.txt +2df0892f74f1e84d2055aede93971fbe22a9fc9e git tracks changes + + + +yuly@yuly-PC MINGW32 /d/yuly/doc/gitlearn/liaoGit/learngit (dev) +$ git log --pretty=oneline +ada67485d8177d380271482ee818f838f81bb287 branch test +5df4cff96e6d9009546cd270f5803c37fd874e44 remove test.txt +59d5ed7664784c66a8fb61f5c6dc6fff03ddec15 add test.txt + + +$ git merge dev +Updating 5df4cff..ada6748 +Fast-forward + readme.txt | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +yuly@yuly-PC MINGW32 /d/yuly/doc/gitlearn/liaoGit/learngit (master) + + +yuly@yuly-PC MINGW32 /d/yuly/doc/gitlearn/liaoGit/learngit (master) +$ git log --pretty=oneline +ada67485d8177d380271482ee818f838f81bb287 branch test +5df4cff96e6d9009546cd270f5803c37fd874e44 remove test.txt +59d5ed7664784c66a8fb61f5c6dc6fff03ddec15 add test.txt + + +yuly@yuly-PC MINGW32 /d/yuly/doc/gitlearn/liaoGit/learngit (dev) +$ git log --pretty=oneline +ada67485d8177d380271482ee818f838f81bb287 branch test +5df4cff96e6d9009546cd270f5803c37fd874e44 remove test.txt +59d5ed7664784c66a8fb61f5c6dc6fff03ddec15 add test.txt + +end of ( +Git教程 +Git简介 +Git的诞生 +集中式vs分布式 +安装Git +创建版本库 +时光机穿梭 +版本回退 +工作区和暂存区 +管理修改 +撤销修改 +删除文件 +远程仓库 +添加远程库 +从远程库克隆 +分支管理 +创建与合并分支 +解决冲突 +分支管理策略 +Bug分支 +Feature分支 +多人协作 +标签管理 +创建标签 +操作标签 +使用GitHub +自定义Git +忽略特殊文件 +配置别名 +搭建Git服务器 +期末总结 +关于作者 + + + + + +end of (创建与合并分支) + +解决冲突 +http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/001375840202368c74be33fbd884e71b570f2cc3c0d1dcf000 +22:29 2017/6/4 +创建分支feature1,并切换过去,并修改最后一行readme.txt,并提交 +$ git checkout -b feature1 + +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. +Createing a new branch is quick AND simple + +$ git add readme.txt +$ git commit -m "AND simple" + +切换到master分支,并修改最后一行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. +Createing a new branch is quick & simple. + +$ git add readme.txt +$ git commit -m "& simple" + +执行合并feature1到master,有冲突, 没法快速合并,要自动新建一个分支,冲突解决后,continue继续 +$ git merge feature1 +Auto-merging readme.txt +CONFLICT (content): Merge conflict in readme.txt +Automatic merge failed; fix conflicts and then commit the result. + +$ git status +On branch master +Your branch is ahead of 'myshh3/master' by 2 commits. + (use "git push" to publish your local commits) +You have unmerged paths. + (fix conflicts and run "git commit") + (use "git merge --abort" to abort the merge) + +Unmerged paths: + (use "git add ..." to mark resolution) + + both modified: readme.txt + +no changes added to commit (use "git add" and/or "git commit -a") + +修改冲突文件,HEAD表主,后面表合过来内容,删除=====即为合并OK,用add +$ git add readme.txt +$ git commit -m "conflict fixed" +yuly@yuly-PC MINGW32 /d/yuly/doc/gitlearn/liaoGit/learngit (master) +$ git log --graph --pretty=oneline --abbrev-commit +* 5cf6c14 conflict fixed +|\ +| * 598aabf AND simple +* | 03b3ad2 & simple +|/ +* ada6748 branch test +* 5df4cff remove test.txt +* 59d5ed7 add test.txt +* 2df0892 git tracks changes +* c2348bc understand how stage works +* 2e95965 append GPL +* ff0bf00 add distributed +* af834b0 wrote a readme file + +删除feature1分支,注意要不在删除分支上 +$ git branch -d feature1 + +end of (解决冲突) + + +分支管理策略 +http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/0013758410364457b9e3d821f4244beb0fd69c61a185ae0000 +23:05 2017/6/4 +禁用Fast forward模式, git merge --no--ff +创建并切换dev分支,修改readme.txt文件,并提交 +$ git checkout -b dev +$ git add readme.txt +$ git commit -m "add merge" + +$ git checkout master +$ git merge --no-ff -m "merge with no-ff" dev + +查看log图形化 +$ git log --graph --pretty=oneline --abbrev-commit + +简单地说就是 -no-ff 模式进行了一次新的 git commit 操作。 +这也是为什么采用 -no-ff 模式要加入参数 -m 的原因。 + +end of (分支管理策略) + + +Bug分支 +http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/00137602359178794d966923e5c4134bc8bf98dfb03aea3000 +7:21 2017/6/6 +stash功能,用于临时保存所有工作现场与暂存区,相当于commit -a +修改readme.txt,新建文件hello.py + +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. +Createing a new branch is quick and simple git merge --no-ff +stash test start + +查看状态,有修改与新增,stash后再查看,跟踪文件全相当于提交了 +在主分区创建BUG分支,来修负 +dev分支ID 新增reflog 73df054 HEAD@{0}: reset: moving to HEAD +dev分支ID log没有变化 + +$ git status +$ git checkout master +$ git checkout -b issue-101 + +修改readme.txt文件,并issue-101分支提交 +$ git add readme.txt +$ git commit -m "fix bug 101" + +合并issue-101到master分支,并删除,中途看一下log与reflog +$ git checkout master +$ git merge --no-ff -m "merged bug fix 101" issue-101 +$ git branch -d issue-101 + +恢复dev现场,list是列表,用apply要用drop删除,用pop表恢复与删除 +$ git checkout dev +$ git stash list +$ git stash apply +或 +$ git stash pop + +恢复指定stash,用list来看 +$ git stash apply stash@{0} + + +解印时会有提示冲突,需手动改一次文件 +骄傲儿童可爱多 created at 2-16 17:13, Last updated at 5-27 10:53 +概览:master合并merge解决好的bug后,不要先把dev解印,先合并master,获取里面的bug方案后,在解印。解印时会有提示冲突,需手动改一次文件。 + +1:在 dev 下正常开发中,说有1个bug要解决,首先我需要把dev分支封存stash + +2:在master下新建一个issue-101分支,解决bug,成功后 + +3:在master下合并issue-101 + +4:在 dev 下合并master, 这样才同步了里面的bug解决方案 + +5:解开dev封印stash pop,系统自动合并 & 提示有冲突,因为封存前dev写了东西,此时去文件里手动改冲突 + +6:继续开发dev,最后add,commit + +7:在master下合并最后完成的dev + +代码过程如下: + +``` +在此插入代码 + +1: $ git stash + +2: $ git checkout master + $ git checkout -b issue-101 + //去文件里修bug + $ git add README.md + $ git commit -m "fix-issue-101" + +3: $ git checkout master + $ git merge --no-ff -m "m-merge-issue-101" issue-101 + $ git branch -d issue-101 + +4: $ git checkout dev + $ git merge --no-ff -m "dev-merge-m" master + +5: $ git stash pop + //提示冲突,去文件手动改正 + Auto-merging README.md + CONFLICT (content): Merge conflict in README.md + +6: //继续开发 ... ... ,完成后一并提交 + $ git add README.md + $ git commit -m "fixconflict & append something" + +7: $ git checkout master + $ git merge --no-ff -m "m-merge-dev" dev + $ git branch -d dev +end of (Bug分支) + + +** Feature分支 +http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/001376026233004c47f22a16d1f4fa289ce45f14bbc8f11000 +21:58 2017/6/6 +添加新功能,新建分支feature-vulcan, 在dev基础上 +yuly@yuly-PC MINGW32 /d/yuly/doc/gitlearn/liaoGit/learngit (dev) +$ git checkout -b feature-vulcan + +新功能开发完成,提交新文件vulcan.py +$ git add vulcan.py +$ git status +On branch feature-vulcan +Changes to be committed: + (use "git reset HEAD ..." to unstage) + + new file: vulcan.py + + +$ git commit -m "add feature vulcan" + +切回dev +$ git checkout dev + +删除出错,不是一个全合并,表没有合并到其它分支,用大写-D就行了 +$ git branch -d feature-vulcan +error: The branch 'feature-vulcan' is not fully merged. +If you are sure you want to delete it, run 'git branch -D feature-vulcan'. + + +多人协作 +end of (** Feature分支) + + +** 多人协作 +http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/0013760174128707b935b0be6fc4fc6ace66c4f15618f8d000 +6:30 2017/6/7 +查看远程仓库信息,默认为origin, 双向为fetch(pull), push +$ git remote +myshh3 +myssh +myssh2 + +$ git remote -v +myshh3 git@github.com:yuly/gitlearn.git (fetch) +myshh3 git@github.com:yuly/gitlearn.git (push) + +上传两个分支,这里是master, dev 目标教程中是origin +$ git push myshh3 master +$ git push myshh3 dev + +模拟另一个人员,在另一台电脑,注意SSH Key添加到GitHub, 或同一电脑别一个新独立目录 +$ git clone git@github.com:yuly/gitlearn.git + +设置项目信息 +$ git config user.name "sky" +$ git config user.email "sky@hello.world" + +自动变为默认origin, 这前推送别名没有影响, +$ git remote -v +origin git@github.com:yuly/gitlearn.git (fetch) +origin git@github.com:yuly/gitlearn.git (push) + +只有master分支 +$ git branch +* master + +创建远程分支到本地,修改文件readme.txt,并提交 +$ git checkout -b dev origin/dev + +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. +Createing a new branch is quick and simple git merge --no-ff +/usr/bin/env + +$ git add readme.txt +$ git commit -m "add /usr/bin/evn" +$ git push origin dev + +原始人员这边,添加happy.py修改, 提交产生冲突 +$ vi hello.py +$ git add hello.py +$ git commit -m "add coding: utf-8" +$ git push myshh3 dev +To github.com:yuly/gitlearn.git + ! [rejected] dev -> dev (fetch first) +error: failed to push some refs to 'git@github.com:yuly/gitlearn.git' +hint: Updates were rejected because the remote contains work that you do +hint: not have locally. This is usually caused by another repository pushing +hint: to the same ref. You may want to first integrate the remote changes +hint: (e.g., 'git pull ...') before pushing again. +hint: See the 'Note about fast-forwards' in 'git push --help' for details. + +解决冲突,先pull到本地,如是默认origin, 这里可不写自定名称myshh3,与下载到那个分支dev +$ git pull myshh3 dev +$ git branch --set-upstream dev myshh3/dev + +如是pull默认,要建立远程分支与本地指定分支关联,最后再pull, 自动合并 +$ git pull +$ git branch --set-upstream dev origin/dev +$ git pull + +删除分支 +git push origin : + + +新建一个Repository +进1入Repository的Settings +在Collaborators里就可以添加合作者了 +将生成的地址发给你的合作者,合作者选择是否同意 +接下来就可以愉快的合作开发了 + +end ** 多人协作 +end of (分支管理) + + +* 标签管理 +http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/0013762144381812a168659b3dd4610b4229d81de5056cc000 +21:13 2017/6/7 +原理就是指向一个COMMIT ID,内容永远不会变,分支指针会变化 +认人好记做COMMIT ID + +** 创建标签 +http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/001376951758572072ce1dc172b4178b910d31bc7521ee4000 +21:18 2017/6/7 +切换到要打标签的分支上 +$ git branch +$ git checkout master + +打一个新标签 +$ git tag v1.0 +$ git tag + +为指定commit id的打标签,commit id是add merge +$ git tag v0.9 73df054 + +查看标签详细信息 +$ git show v0.9 + +还可以通过-s用私钥签名一个标签: +$ git tag -s v0.2 -m "signed version 0.2 released" fec145a + +创建带有说明的标签-a表标签名, -m指定说明文字,这里把提交 +add distributed做为一个标签 +$ git log --pretty=oneline --abbrev-commit +$ git tag -a v0.1 -m "version 0.1 released" 2e95965 +$ git show v0.1 + +end of (** 创建标签) + + +** 操作标签 +http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/001376951885068a0ac7d81c3a64912b35a59b58a1d926b000 +22:15 2017/6/7 +删除标签 +$ git tag -d v0.1 +Deleted tag 'v0.1' (was 7e0d926) + +标签不会自动推送到远程,只存储在本地 +$ git push myshh3 v1.0 + +推送所有标签到远程 +$ git push myshh3 --tags + +删除远程标签,先删本地,冒号前没有相当于一个空标签去替换 +$ git tag -d v0.9 +Deleted tag 'v0.9' (was 73df054) + +$ git push myshh3 :refs/tags/v0.9 +或,还可以不删除本地标签 +git push origin : + + +end of (** 操作标签) +end of (* 标签管理) + + +* 使用GitHub +http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/00137628548491051ccfaef0ccb470894c858999603fedf000 +22:34 2017/6/7 +Fork到自己名下,github.com中,点击Fork, 修改后Pull Request到对方,看是否接受 +https://github.com/twbs/bootstrap + +测试 +https://github.com/michaelliao/learngit + +end of (* 使用GitHub) + +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + +3. 把本地内容推送到github远程库上(第一次push 参数带 `-u` 关联远程仓库) + + $ git push -u origin master + + +$ git clone git@github.com:yuly/learngit +$ git clone git@github.com:yuly/learngit.git + +看分支历史 +$ git log --graph --pretty=oneline --abbrev-commit +$ git log --pretty=oneline --abbrev-commit +a26d8f0 merged bug fix 101 + +指定分支 +$ git log --branches="issue-101" --pretty=oneline + +$ git stash apply +$ git stash pop +$ git stash list +$ git stash drop + +$ git branch -d feature-vulcan +$ git branch -D feature-vulcan + + +git add a.txt -> 匹配到a.txt +git add *.txt -> 匹配到当前目录下所有txt +git add **/*.txt -> 匹配到当前目录和子目录下所有txt +git add . -> 匹配到当前目录下所有文件 + +通过将Git配置变量 core.quotepath 设置为false,就可以解决中文文件名称在这些Git命令输出中的显示问题,示例: +$ git config --global core.quotepath false + +$ git clone https://github.com/yuly/gitskills + +$ git remote add myshh3 git@github.com:yuly/gitlearn.git + +$ git push myshh3 master +或 +$ git push + +1 说的也不清楚,应该还是要区分 +假定HEAD版本为版本1 + +1、工作区你修改了,为 版本2 ,但没add,那么 checkout 就会使你工作区回到版本1 +2、工作区你修改了,为版本2,add了,stage区也为版本2,然后你又修改了工作区,为版本3,没再次add,那么checkout就会使你工作区为版本2 +所有可理解为最近距离操作方向,工作区再次修改,checkout不会生效,阻止,要reset, reset也可取消提交,不一定要回工作区,相当一个文件提交开关 +文件没有,就往再一级取文件 工作区(work)->未暂存unstage->暂存区stage->分支 +暂存区stage,直用git checkout -- 没有用 +reset默认只能一级, 要版本到工作区用参数--hard 指定版本 默认stage,unstage被清空选择文件,内容一样, 没有版本,stage->unstage +unstage区 修改,新增,删除 自动git反映出来,拷贝的 + +add->commit +checkout<-reset + + + +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + + +分支管理 + + +创建与合并分支 + +创建并切换到 +$ git checkout -b dev +等同 +$ git branch dev +$ git checkout dev + +$ git branch + +修改readme.txt +$ git add readme.txt +$ git commit -m "branch test" +$ git checkout master +查看readme.txt,内容已返回 +合并分支到当前分支 +$ git merge dev +删除分支dev +$ git branch -d dev + + +小结 +查看分支:git branch +创建分支:git branch + $ git branch -f [] +切换支分支:git checkout +创建+切换分支:git checkout -b +合并某分支到当前分支:git merge +删除分支:git branch -d + + +git push origin master 也没有完全合并 +你要自己push本地dev分支到远程 +git push origin dev +end of (创建与合并分支) + + +解决冲突 +http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/001375840202368c74be33fbd884e71b570f2cc3c0d1dcf000 +$ git checkout -b feature1 #Switched to a new branch 'feature1' +修改文件readme.txt +$ git add readme.txt +$ git log --pretty=oneline +$ git checkout master +修改文件readme.txt +$ git add readme.txt +$ git commit -m "% simple" + +合并分支-冲突 +$ git merge feature1 +$ git status +$ cat readme.txt ;HEAD到======表当前分支,====到分支名为要合并分支的内容 +<<<<<<< HEAD +Creating a new branch is quick & simple. +======= +Creating a new branch is quick AND simple +>>>>>>> feature1 + +修改后再提交: +$ vi readme.txt +$ git add readme.txt +$ git commit -m "conflict fixed" + +yuly@yuly-PC MINGW32 /d/yuly/doc/gitLiaoxuefeng (master|MERGING) +变为,少了MERGING +yuly@yuly-PC MINGW32 /d/yuly/doc/gitLiaoxuefeng (master) + +$ git log --pretty=oneline --graph --abbrev-commit +删除feature1分支 +$ git branch -d feature1 + +小结: +合并分支时,有冲突,修改文件,文件里面有提示,add后,自动 (master|MERGING)变为(master) +pull:本地 <-- 远程 +push:本地 --> 远程 +本质上都是同步commit +如果你本地落后远程,必然要pull +如果你本地超前远程,必然要push +end of (解决冲突) + + +分支管理策略 +http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/0013758410364457b9e3d821f4244beb0fd69c61a185ae0000 +禁用Fast forward模式,合并时有一个新的commit,从分支历史上就可以看出来 +--no-ff + +实验 +$ git checkout -b dev +修改readme.txt +$ vi readme.txt +$ git commit -m "add merge at branch dev" +切换回master: +$ git checkout master +合并,用--no-ff参数,表禁用Fast forward +$ git merge --no-ff -m "merge with no-ff" dev +$ git log --pretty=oneline --graph --abbrev-commit + +分支策略 +master应该是非常稳定,发布新版本,只用于合并发布 +dev为大家工作 +个人,建立分支,合并到dev + +end of (分支管理策略) + +Bug分支 +目前dev上开发工作,临时修复一个代号101的bug的任务时,很自然地,你想在master创建一个分支issue-101 +$ git checkout dev +$ vi readme.txt +切换到要修复的BUG分支,来修复BUG +$ git checkout master +$ git checkout -b issue-101 +$ vi readme.txt +$ git commit -m "fix bug 101" +检查合并到master主线 +$ git checkout master +$ cat readme.txt +$ git merge --no-ff -m "merged bug fix 101" issue-101 +$ git branch -d issue-101 +恢复到原dev状态 +$ git checkout dev +$ git status +恢复原现场 +$ git stash list +$ git stash apply +一般用 $ git stash pop +或 git stash drop来删除;另一种方式是用git stash pop,恢复的同时把stash内容也删了 +git stash drop来删除; + #恢复指定stash, 可多次stash + $ git stash apply stash@{0} +end of (Bug分支) + + +Feature分支 +http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/001376026233004c47f22a16d1f4fa289ce45f14bbc8f11000 +准备环境 +$ git checkout -b feature-vulcan +$ vi vulcan.py +$ git add vulcan.py +$ git status +$ git commit -m "add feature vulcan" + +切回dev, +$ git checkout dev +有新内容文件,删除不了,用-D +$ git branch -D feature-vulcan + +小节 +git push origin :[要删除的远程分支名字] +例如要删除 远程的github上的dev分支: +git push origin :dev + + +20:36 2017/2/22 + +end of (Feature分支) +end of (分支管理) + +使用GitHub +20:01 2017/2/27 +git clone git@github.com:michaelliao/bootstrap.git +pull request要主要负责这个项目人才可以更新 +在GitHub上,可以任意Fork开源仓库; +自己拥有Fork后的仓库的读写权限; +可以推送pull request给官方仓库来贡献代码。 +end of (使用GitHub) + +自定义Git +20:01 2017/2/27 +让Git显示颜色,git status测试 +$ git config --global color.ui true +忽略特殊文件 +文件名为 .gitignore +有模板https://github.com/github/gitignore + +# Windows: +Thumbs.db +ehthumbs.db +Desktop.ini + +# Python: +*.py[cod] +*.so +*.egg +*.egg-info +dist +build + +# My configurations: +db.ini +deploy_key_rsa + +文件被忽略,又想添加 +$ git add -f 文件名 +测试一下具体.gitignore文件哪里定义了ignore原则 +git check-ignore -v 文件名 + +end of (忽略特殊文件) + +配置别名 +$ git config --global alias.st status +接下来可用 +$ git st +例子 +$ git config --global alias.co checkout +$ git config --global alias.ci commit +$ git config --global alias.br branch + +用 +$ git ci -m "bala bala bala.." + +撤消上一次修改 +$ git config --global alias.unstage 'reset HEAD' +最后一次提交记录 +$ git config --global alias.last 'log -1' +$ git last + +格式化提交记录 +$ 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 lg + +配置文件 +--system 整个电脑域 +--global 在~/.gitconfig, 当前用户所有项目 +没有--global 在项目目录.git/config + + + + +end of (配置别名) + +搭建Git服务器 +http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/00137583770360579bc4b458f044ce7afed3df579123eca000 + +end of (搭建Git服务器) +end of (自定义Git) +end of (Git) \ No newline at end of file diff --git "a/Git\345\255\246\344\271\240\347\254\224\350\256\260-yuly/\345\233\242\351\230\237\345\220\210\344\275\234\347\232\204\345\210\206\346\224\257-liao1.png" "b/Git\345\255\246\344\271\240\347\254\224\350\256\260-yuly/\345\233\242\351\230\237\345\220\210\344\275\234\347\232\204\345\210\206\346\224\257-liao1.png" new file mode 100644 index 000000000..44e7d22cf Binary files /dev/null and "b/Git\345\255\246\344\271\240\347\254\224\350\256\260-yuly/\345\233\242\351\230\237\345\220\210\344\275\234\347\232\204\345\210\206\346\224\257-liao1.png" differ diff --git "a/Git\345\255\246\344\271\240\347\254\224\350\256\260-yuly/\346\204\237\350\260\242\345\273\226\350\200\201\345\270\210-yuly.txt" "b/Git\345\255\246\344\271\240\347\254\224\350\256\260-yuly/\346\204\237\350\260\242\345\273\226\350\200\201\345\270\210-yuly.txt" new file mode 100644 index 000000000..12176d37e --- /dev/null +++ "b/Git\345\255\246\344\271\240\347\254\224\350\256\260-yuly/\346\204\237\350\260\242\345\273\226\350\200\201\345\270\210-yuly.txt" @@ -0,0 +1,3 @@ +7:25 2017/6/8 +教程通俗易懂,学习明白了很多,感谢老师的辛苦 + by yuly \ No newline at end of file diff --git "a/Git\345\255\246\344\271\240\347\254\224\350\256\260-zd" "b/Git\345\255\246\344\271\240\347\254\224\350\256\260-zd" new file mode 100644 index 000000000..b1c06bfa2 --- /dev/null +++ "b/Git\345\255\246\344\271\240\347\254\224\350\256\260-zd" @@ -0,0 +1 @@ +测试推送,谢谢老师精彩的文章! 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 000000000..aedf9af9b 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 000000000..0ede3462c 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 000000000..728e6118d 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 000000000..ddb6c2a6a --- /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 000000000..445c12bbb --- /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 000000000..f4cb07bbe 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 000000000..a1c08a384 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 000000000..1a4e44f06 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 000000000..76b0df882 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 000000000..eb8411a89 --- /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 000000000..05c0de1a8 --- /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 000000000..3792099e7 --- /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 000000000..1d1983ae5 --- /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_withwindluo/PersonalGitNote(ToBeCintuined).md" "b/Git\345\255\246\344\271\240\347\254\224\350\256\260_withwindluo/PersonalGitNote(ToBeCintuined).md" new file mode 100644 index 000000000..4912e526a --- /dev/null +++ "b/Git\345\255\246\344\271\240\347\254\224\350\256\260_withwindluo/PersonalGitNote(ToBeCintuined).md" @@ -0,0 +1,117 @@ +### 创建版本库 +初始化一个Git仓库,使用`git init`命令。 +添加文件到Git仓库,分两步: +第一步,使用命令`git add file`,注意,可反复多次使用,添加多个文件; +第二步,使用命令`git commit`,完成 +`git commit -m` "修改注释" + +### 基本命令 +`git status` 查看缓冲区状态 +`git diff` 查看修改内容 +`git log` 显示从最远到最近的提交日志 +`git log --pretty=oneline` 显示简单提交日志 + +git 中 HEAD表示当前版本  HEAD^表示上个版本  HEAD^^表示上上个版本  HEAD~N 表示上N个版本 + +`git reset --hard HEAD^`  就可以回退到上一个版本 + +`git reflog` 显示记录的每一次命令 +`git reset --hard commit_id`  可以回退到对应ID的版本 +`git checkout -- file` 可以放弃工作区的修改   + + >命令`git checkout -- readme.txt`意思就是,把`readme.txt`文件在工作区的修改全部撤销,这里有两种情况: + 一种是`readme.txt`自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态; +- 一种是`readme.txt`已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。 +- 总之,就是让这个文件回到最近一次`git commit`或`git add`时的状态。 + +  +>`git reset`命令既可以回退版本,也可以把暂存区的修改回退到工作区。当我们用HEAD时,表示最新的版本。 + +
+输入`rm file`  可以删除文件,然后你就会有两种选择 +- 确实需要删除,则需要再输入`git rm` +- 删错了,则输入`git checkout -- file` 撤销删除 +但是即使是删除了,也可以用`git reset HEAD file` 再次恢复文件 + +### 仓库操作 +`$ ssh-keygen -t rsa -C "youremail@example.com"` 然后一直回车,新建SSH,会出现在默认目录里 **id_ras**是私钥  **id_ras.pub**是公钥 将公钥添加到github里 + +`git push origin master` + +要关联一个远程库,使用命令`git remote add origin git@server-name:path/repo-name.git` 如 `git remote add origin git@github.com:michaelliao/learngit.git` 关联后,使用命令`git push -u origin master`第一次推送master分支的所有内容; +此后,每次本地提交后,只要有必要,就可以使用命令`git push origin master`推送最新修改; + +查看本地仓库已经关联的远程仓库:`git remote -v` +取消关联仓库:`git remote rm origin` + + +`$ git clone git@github.com:michaelliao/gitskills.git` 克隆仓库 + +### 分支 +查看分支:`git branch` +创建分支:`git branch ` +切换分支:`git checkout ` +创建+切换分支:`git checkout -b ` +合并某分支到当前分支:`git merge ` +删除分支:`git branch -d ` + +- 如果分支合并冲突就要在冲突的文件修改,然后在add和commit,合并完成。  +Git会用`<<<<<<<`,`=======`,`>>>>>>>`标记出不同分支的内容 + +- 用带参数的git log也可以看到分支的合并情况: +`git log --graph --pretty=oneline --abbrev-commit` +用git log --graph命令可以看到分支合并图。 + +- Fast forward模式,当使用这种模式进行合并时,删除分支后,会丢掉分支信息。 +可以使用`git merge --no-ff`禁用Ff模式。 +![不使用Ff模式](https://cdn.webxueyuan.com/cdn/files/attachments/001384909222841acf964ec9e6a4629a35a7a30588281bb000/0) +合并分支时,加上--no-ff参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并,而fast forward合并就看不出来曾经做过合并 + + +- 当要切换到其他分支进行工作时,可以用`git stash`保存工作现场。 +  - `git stash list`可以查看保存的工作现场列表。 +  - `git stash pop`可以出栈第一个工作现场,同时删除列表中对应现场。 +  - `git stash apply`可以取出第一个工作现场,但不会删除列表中对应现场,需要`git stash drop`删除。 +  - `git stash apply stash@{n}` 可以删除第n个工作现场 +   + +- 如果要丢弃一个没有被合并过的分支,可以通过`git branch -D ` 强行删除 + + +- **多人协作的工作模式:** +1. 首先,可以试图用`git push origin branch-name`推送自己的修改; +2. 如果推送失败,则因为远程分支比你的本地更新,需要先用`git pull`试图合并; +3. 如果合并有冲突,则解决冲突,并在本地提交; +4. 没有冲突或者解决掉冲突后,再用`git push origin branch-name`推送就能成功! +- 在本地创建和远程分支对应的分支,使用:`git branch --set-upstream-to=origin/ dev`,本地和远程分支的名称最好一致; + +### 标签 +- 命令`git tag `用于新建一个标签,默认为**HEAD**,也可以指定一个commit id:`git tag v1.0 ID号` +- `git tag`查看标签 +- 标签不是按时间顺序列出,而是按字母排序的。可以用`git show `查看标签信息 +- `git tag -a  -m "blablabla..."`可以指定标签信息; +- 命令`git push origin `可以推送一个本地标签; +- 命令`git push origin --tags`可以推送全部未推送过的本地标签; +- 命令`git tag -d `可以删除一个本地标签; +- 命令`git push origin :refs/tags/`可以删除一个远程标签,**冒号之前的空格不能省** +### 遇到的问题 +- >git error: failed to push some refs to git@github.com + +  出现这个错误的原因是因为你有远程库中的文件没有下载下来。所以你需要先运行`git pull origin master`,然后才可以继续运行`git push -u origin master` +- 如何修改git默认目录(未解决) + +- 廖雪峰git教程中: +>本地分支和远程分支的链接关系没有创建,用命令`git branch --set-upstream branch-name origin/branch-name` + + 但git给出的答复是应该用`git branch --set-upstream-to=origin/ dev` + +- 关于ctf_web下 \笔记\ 使用`git status`时会显示乱码解决方案: + 会显示形如 274\232\350\256\256\346\200\273\347\273\223.md 的乱码。  +解决方案:在bash提示符下输入: `git config --global core.quotepath false` core.quotepath设为false的话,就不会对0x80以上的字符进行quote。中文显示正常 + +- GitGui乱码: + 在我们操作系统的宿主目录(我的电脑是 C:\Users\Luo)下有一个 .gitconfig 文件,在这个文件的最后添加 + ``` + [gui] +    encoding = utf-8 +    ``` \ No newline at end of file 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 000000000..bd3b9af48 --- /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/Git\345\270\270\347\224\250\345\221\275\344\273\244.md" "b/Git\345\270\270\347\224\250\345\221\275\344\273\244.md" new file mode 100644 index 000000000..8008933e2 --- /dev/null +++ "b/Git\345\270\270\347\224\250\345\221\275\344\273\244.md" @@ -0,0 +1,25 @@ +# Git 常用命令 + +* git init +* git clone +* git add file +* git commit -m "xxx" +* git log +* git reflog +* git checkout HEAD file +* git checkout branchName +* git checkout -b newBranchName +* git reset HEAD file +* git reset --hard commitId +* git diff +* git status +* git rm +* git stash +* git stash apply +* git stash drop +* git stash list +* git stash pop +* git mearge branchName +* git tag tagName +* git tag list +* git config --global alias.简化名称 "命令" diff --git "a/Git\345\277\203\345\276\2272017" "b/Git\345\277\203\345\276\2272017" new file mode 100644 index 000000000..9ebb4fd2c --- /dev/null +++ "b/Git\345\277\203\345\276\2272017" @@ -0,0 +1 @@ +谢谢廖老师,新技能Get! diff --git "a/Git\346\210\220\351\225\277\346\227\245\350\256\260.txt" "b/Git\346\210\220\351\225\277\346\227\245\350\256\260.txt" new file mode 100644 index 000000000..154d1fe11 --- /dev/null +++ "b/Git\346\210\220\351\225\277\346\227\245\350\256\260.txt" @@ -0,0 +1 @@ +测试下。。 \ No newline at end of file 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 000000000..3c9906301 --- /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 100644 index 000000000..904ff2359 --- /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 000000000..b05f0fffb --- /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 000000000..323292abc --- /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 000000000..527b12441 --- /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 000000000..9a67fdbf8 --- /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 000000000..0e91db7e3 --- /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 100644 index 000000000..f4da9afa4 --- /dev/null +++ b/HelloWorld @@ -0,0 +1 @@ +print "Hello World!" diff --git a/Hevi-Ye.txt b/Hevi-Ye.txt new file mode 100644 index 000000000..928f49709 --- /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 000000000..75e95a435 --- /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 100644 index 000000000..a7006d4ca --- /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 100644 index 000000000..4d5b34148 --- /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 100644 index 000000000..02373e25e --- /dev/null +++ b/HuChengzhen.txt @@ -0,0 +1,2 @@ +跟着这个教程学习,感觉很棒 +我试试怎么pull request diff --git a/HuangJianHong.txt b/HuangJianHong.txt new file mode 100755 index 000000000..9c33aa491 --- /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 000000000..82eb77880 --- /dev/null +++ b/HubQin.txt @@ -0,0 +1 @@ +Thank you very much! diff --git a/Hunter-Chen.txt b/Hunter-Chen.txt new file mode 100644 index 000000000..92dab5566 --- /dev/null +++ b/Hunter-Chen.txt @@ -0,0 +1 @@ +谢谢您的教程,写的很棒。我看了之后掌握了Git的大部分功能。 diff --git a/Hydraz320_2 b/Hydraz320_2 new file mode 100755 index 000000000..643b0dec4 --- /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 000000000..ec9331852 --- /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 000000000..43fe2e13d --- /dev/null +++ b/IT-HowieLi.txt @@ -0,0 +1 @@ +真的感谢廖雪峰老师的教程,通俗易懂,下一个项目就要用git来练手了。感谢老师。 \ No newline at end of file diff --git "a/Ilove-\345\255\246\344\271\240\345\277\203\345\276\227.txt" "b/Ilove-\345\255\246\344\271\240\345\277\203\345\276\227.txt" new file mode 100644 index 000000000..875252626 --- /dev/null +++ "b/Ilove-\345\255\246\344\271\240\345\277\203\345\276\227.txt" @@ -0,0 +1,2 @@ +很感谢廖雪峰老师的学习网站,做得很良心。 +廖老师的讲解十分的清楚易懂。 \ No newline at end of file diff --git a/Introduce.txt b/Introduce.txt new file mode 100644 index 000000000..7d2b7bed3 --- /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 100644 index 000000000..93db8844d --- /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 000000000..38500f54e --- /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/JOJOWOOL b/JOJOWOOL new file mode 100644 index 000000000..58e8f44e6 --- /dev/null +++ b/JOJOWOOL @@ -0,0 +1 @@ +非常感谢。 diff --git a/JacobYChan/learn.txt b/JacobYChan/learn.txt new file mode 100644 index 000000000..37db8241e --- /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 000000000..b6724f097 --- /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 000000000..e744a534c --- /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 000000000..feab92ea5 --- /dev/null +++ b/Jasonscor.txt @@ -0,0 +1 @@ +Very good python course diff --git a/Java.gitignore b/Java.gitignore new file mode 100644 index 000000000..46775e45b --- /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 000000000..974e84265 --- /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 100644 index 000000000..e1a905bf2 --- /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 000000000..ebef02513 --- /dev/null +++ b/Jim43.txt @@ -0,0 +1 @@ +try to pull request bu Jim43 \ No newline at end of file diff --git "a/Jimmy/Git\345\255\246\344\271\240\347\254\224\350\256\260.txt" "b/Jimmy/Git\345\255\246\344\271\240\347\254\224\350\256\260.txt" new file mode 100644 index 000000000..0ec9f4c19 --- /dev/null +++ "b/Jimmy/Git\345\255\246\344\271\240\347\254\224\350\256\260.txt" @@ -0,0 +1,135 @@ +Git 分布式版本控制系统 +创建版本库 +初始化一个Git仓库,使用git init命令。 +添加文件到Git仓库,分两步: +第一步,使用命令git add ,注意,可反复多次使用,添加多个文件; +第二步,使用命令git commit,完成。add完后一起commit +git add . 添加所有改过的文件 +git commit -a commit所有add的文件 +
 +时光穿梭机 +git status 查看状态,有没有被改过 +git diff readme.txt 查看改过哪些内容 +要随时掌握工作区的状态,使用git status命令。
如果git status告诉你有文件被修改过,用git diff可以查看修改内容。
 +在Git中,用git log命令查看历史记录git log / git log --pretty=oneline +在Git中,用HEAD表示当前版本,上一个版本就是HEAD^,上上一个版本就是HEAD^^,上100个版本写成HEAD~100 +git reset --hard HEAD^ 退回到上一个版本 +Git允许我们在版本的历史之间穿梭,使用命令git reset --hard commit_id +穿梭前,用git log可以查看提交历史,以便确定要回退到哪个版本。 +要重返未来,用git reflog查看命令历史,以便确定要回到未来的哪个版本。
 +工作区和暂存区 +工作区:就是电脑里能看到的目录,learngit文件夹就是一个工作区 +版本库Repository:工作区有一个隐藏目录.git,就是Git的版本库。 +Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD +1.用git add把文件添加进去,实际上就是把文件修改添加到暂存区; +2.用git commit提交更改,实际上就是把暂存区的所有内容提交到当前分支。 +第一次修改 -> git add -> 第二次修改 -> git add -> git commit +撤销修改 +场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout -- file。 +场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD file,就回到了场景1,第二步按场景1操作。 +场景3:已经提交了不合适的修改到版本库时,想要撤销本次提交,参考版本回退一节,不过前提是没有推送到远程库。 +删除文件 +当从工作区删掉文件后: +如果要从版本库中删除文件,就用命令git rm删掉,并且git commit +如果删错了,因为版本库里还有,所以可以很轻松地把误删的文件恢复到最新版本:git checkout -- test.txt + +远程仓库 +同一个Git仓库,可以分布到不同的机器上 +GitHub网站,就是提供Git仓库托管服务的,充当服务器 +“有了远程仓库,妈妈再也不用担心我的硬盘了。”——Git点读机 + +添加远程库 +已经在本地创建了一个Git仓库后,又在GitHub创建一个Git仓库,并且让这两个仓库进行远程同步,这样,GitHub上的仓库既可以作为备份,又可以让其他人通过该仓库来协作,真是一举多得。 +要关联一个远程库,使用命令git remote add origin git@github.com:lijianfigting/learngit.git +然后使用命令git push -u origin master第一次推送master分支的所有内容; +此后,每次本地提交后,就可用命令git push origin master 推送最新修改; +从远程库克隆 +先创建远程库,然后,从远程库克隆 +登陆GitHub,创建一个新的仓库,下一步是用命令git clone克隆一个本地库. +如果有多个人协作开发,那么每个人各自从远程克隆一份就可以了。 +Git支持多种协议,包括https,但通过ssh支持的原生git协议速度最快。 + +分支管理 +创建一个属于自己的分支,别人看不到,还继续在原来的分支上正常工作,而我在自己的分支上干活,想提交就提交,直到开发完毕后,再一次性合并到原来的分支上,这样,既安全,又不影响别人工作。 +创建与合并分支 +Git鼓励大量使用分支: +查看分支:git branch +创建分支:git branch +切换分支:git checkout +创建+切换分支:git checkout -b +合并某分支到当前分支:git merge +删除分支:git branch -d +主分支,即master分支。HEAD严格来说不是指向提交,而是指向master,master才是指向提交的 +因为创建、合并和删除分支非常快,所以Git鼓励使用分支完成某个任务,合并后再删掉分支,这和直接在master分支上工作效果是一样的,但过程更安全。 + +解决冲突 +当两个分支中都修改一个文件,再合并时会冲突,当Git无法自动合并分支时,就必须首先解决冲突。解决冲突后,再提交,合并完成。 +用git log --graph命令可以看到分支合并图 + +分支管理策略 +Git分支十分强大,在团队开发中应该充分应用。 +合并分支时,加上--no-ff参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并,而fast forward合并就看不出来曾经做过合并。 + +在实际开发中,我们应该按照几个基本原则进行分支管理: +master分支应该是非常稳定的,仅用来发布新版本,平时不能在上面干活; +干活都在dev分支上,也就是说,dev分支是不稳定的,到某个时候,比如1.0版本发布时,再把dev分支合并到master上,在master分支发布1.0版本; +你和你的小伙伴们每个人都在dev分支上干活,每个人都有自己的分支,时不时地往dev分支上合并就可以了。 + +Bug分支 +修复bug时,我们会通过创建新的bug分支进行修复,然后合并,最后删除; +当手头工作没有完成时,先把工作现场git stash一下,然后去修复bug,修复后,再git stash pop,回到工作现场。 + +Feature分支 +每添加一个新功能,最好新建一个feature分支,在上面开发,完成后,合并,最后,删除该feature分支。 + +多人协作 +远程仓库的默认名称是origin。要查看远程库的信息,用git remote [-v] 可选 +推送分支 +把该分支上的所有本地提交推送到远程库 +本地新建的分支如果不推送到远程,对其他人就是不可见的 + +git push origin master / git push origin dev (dev分支) +master分支是主分支,因此要时刻与远程同步; +dev分支是开发分支,团队所有成员都需要在上面工作,也需要与远程同步;
bug分支只用于在本地修复bug,就没必要推到远程了
feature分支是否推到远程,取决于你是否和你的小伙伴合作在上面开发。
抓取分支 +多人协作的工作模式通常是这样: +首先,可以试图用git push origin branch-name推送自己的修改;
如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并;
如果合并有冲突,则解决冲突,并在本地提交;
没有冲突或解决掉冲突后,再用git push origin branch-name推送就能成功!
 +标签管理 +tag就是一个让人容易记住的有意义的名字,它跟某个commit绑在一起。 +创建标签 +git tag 新建一个标签,默认为HEAD,也可以指定一个commit id; +git tag -a -m "blablabla..."可以指定标签信息;
git tag -s -m "blablabla..."可以用PGP签名标签;
git tag可以查看所有标签。
git show 查看标签信息 +还可以创建带有说明的标签,用-a指定标签名,-m指定说明文字: +git tag -a v0.1 -m "version 0.1 released" 3628164 +还可以通过-s用私钥签名一个标签,签名采用PGP签名 + +操作标签 +git push origin 可以推送一个本地标签;
git push origin --tags可以推送全部未推送过的本地标签;
git tag -d 可以删除一个本地标签;
git push origin :refs/tags/可以删除一个远程标签。
 +使用GitHub +GitHub还是一个开源协作社区,通过GitHub,既可以让别人参与你的开源项目,也可以参与别人的开源项目。 +* 在GitHub上,可以任意Fork开源仓库; +* 自己拥有Fork后的仓库的读写权限; +* 可以推送pull request给官方仓库来贡献代码。 + +自定义Git +我们已经配置了user.name和user.email,实际上,Git还有很多可配置项。 +比如,让Git显示颜色,会让命令输出看起来更醒目: +忽略特殊文件 +在Git工作区的根目录下创建一个特殊的.gitignore文件,然后把要忽略的文件名填进去,Git就会自动忽略这些文件。 +忽略某些文件时,需要编写.gitignore; +.gitignore文件本身要放到版本库里,并且可以对.gitignore做版本管理!
 +配置别名 +git config --global alias.st status : st == status +很多人都用co表示checkout,ci表示commit,br表示branch +--global参数是全局参数,也就是这些命令在这台电脑的所有Git仓库下都有用 +git config --global alias.unstage 'reset HEAD' :git unstage file 撤销修改 +git config --global alias.last 'log -1' :用git last显示最近一次的提交 + +配置文件 +配置Git的时候,加上--global是针对当前用户起作用的,如果不加,那只针对当前的仓库起作用。 +每个仓库的Git配置文件都放在.git/config文件中 +当前用户的Git配置文件放在用户主目录下的一个隐藏文件.gitconfig中 +配置别名也可以直接修改这个文件,如果改错了,可以删掉文件重新配置 + +搭建Git服务器 +既不想公开源代码,又舍不得给GitHub交保护费,那就只能自己搭建一台Git服务器作为私有仓库使用。 +搭建Git服务器非常简单,通常10分钟即可完成;
要方便管理公钥,用Gitosis;
要像SVN那样变态地控制权限,用Gitolite。 diff --git a/Jiyg.txt b/Jiyg.txt new file mode 100755 index 000000000..b2cc15392 --- /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 100644 index 000000000..58e2592d6 --- /dev/null +++ b/JoeZhouWenxuan.md @@ -0,0 +1,2 @@ +this is a test + diff --git a/John-Zong.txt b/John-Zong.txt new file mode 100644 index 000000000..cfd8d87de --- /dev/null +++ b/John-Zong.txt @@ -0,0 +1,71 @@ +Git使用教程笔记 + +一、安装git和提交文件到仓库 + + + * 注册帐号:www.github.com + * 安装git:sudo apt-get install git + * 配置用户名和邮箱 git config --global user.name john-zong git config --global user.email youremail@example.com 当使用了--global参数,表示这台机器上所有的Git仓库都会使用这个配置 + * 创建版本库:在制定的文件目录下执行 git init + * 添加文件到版本库:1.创建文件后, git add reame.txt 添加文件到缓存区;git commit -m 'wrote a readme file' 把文件添加到仓库; 可以多次add不同的文件,一次性commit + + + +二、时光穿梭机 + + * 查看状态:git status 查看当前工作区状态,git diff 查看修改内容 + * 版本回退:git reset --hard HEAD^表示回到上个版本,等价于 git reset --hard commitID;通过git log --pretty=oneline或git reflog查看commitID + * 工作区和暂存区:git add 把文件添加到暂存区;git commit提交修改,把暂存区的内容提交到当前分支 + * 管理修改:每次修改,如果不add到暂存区,那就不会加入到commit中。git diff HEAD -- readme.txt查看工作区和版本库中最新版本的区别 + * 撤销修改:git checkout -- file 直接丢弃工作区的修改;git reset HEAD file 取消提交file文件到暂存区;git reset -- hard commit 版本回退 + * 删除文件:Git中,删除也是一个修改操作,git rm filename; git commit -m 'delete filename',如果在文件夹中误删了文件,git checkout -- filename 即可找回文件 + + +三、远程仓库 + + + * 远程仓库:Github网站提供Git仓库托管服务,本地Git仓库和Github仓库之间的传输通过SSH加密 + * 创建SSH Key: sudo apt-get install openssh-server ;ssh-keygen -t rsa -C 'youremail@example.com',然后一路回车,复制~/.ssh/is_rsa.pub内容 + * Github上添加SSH key:打开Accouent setting ->'SSH Keys',Add SSH key,在文本框粘贴id_rsa.pub内容 + * 添加远程仓库:git remote add orgin git@server-name:path/repo-name.git 关联后,使用git push -u orgin master第一次推送master分支的所有内容;此后每次提交用 git push orgin orgin master + * 从远程仓库克隆:知道仓库地址后,git clone git@server-name:path/repo-name.git + + +四、分支管理 + + * 创建与合并分支:git branch/git brancha /git checkout /git checkout -b /git merge /git branch -d + * 解决冲突:分支和master不一致,git merge feature 会报错,先解决冲突再提交。git log --graph --pretty=oneline --abbrev-commit看分支合并图 + * 分支管理策略:合并分支加上--no-ff参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经合并过,而fast forward合并就看不出来曾经做过合并 git merge --no--ff -m 'merge with no-ff' dev + * bug分支:正在dev分支开发,来了一个代号101的bug,现在dev分支上git stash,保存当前进展,然后去msater创建临时分支 git checkout -b issue-101,修改,添加,提交后,删除issue-101分支;再切换到dec分支 git stash pop 即可恢复当前dev分支开发进展 + * Feature分支:丢弃一个没有被合并过的分支,用 git branch -D name 强行删除 + * 多人协作:[ ] 查看远程库信息,git remote -v + + [ ] 从本地推送分支:git push origin branch-name + [ ] 在本地创建和远程分支对应的分支:git checkout -b branch-name origin/branch-name + [ ] 建立本地分支和远程分支的关联:git branch-set-upstream branch-name origin/branch-name + [ ] 从远程抓取分支,使用git pull ,如果有冲突,要先处理冲突 +五、标签管理 + + * 创建标签:[ ] 创建新标签:git tag 2547826,创建一个新标签,默认为HEAD,也可以指定一个commit id + + [ ] 制定标签信息:git tag -a -m 'balblabla~~' + [ ] 用PGP给标签签名:git tag -s -m 'blablabla~~~' + [ ] 查看所有标签:git tag + + + * 操作标签:[ ] 推送本地标签:git push origin ,推送全部本地标签:git push origin --tags + + [ ] 删除本地标签:git tag -d ,删除远程标签:git push origin:refs/tags/ + + + + + + + + + + + + + diff --git a/JohnTsaiAndroid.txt b/JohnTsaiAndroid.txt new file mode 100644 index 000000000..14ae176bd --- /dev/null +++ b/JohnTsaiAndroid.txt @@ -0,0 +1 @@ +Thank you,Mr Liao. diff --git a/JokerByrant b/JokerByrant new file mode 100644 index 000000000..264a1a543 --- /dev/null +++ b/JokerByrant @@ -0,0 +1 @@ +尝试一下,第一次使用。 diff --git a/JuTuTu.txt b/JuTuTu.txt new file mode 100755 index 000000000..62bee44a3 --- /dev/null +++ b/JuTuTu.txt @@ -0,0 +1 @@ +谢谢您的教程! diff --git a/Jujuxw.txt b/Jujuxw.txt new file mode 100644 index 000000000..bcbb1171e --- /dev/null +++ b/Jujuxw.txt @@ -0,0 +1,5 @@ +​ 看过一些git的教程,因为初学也就只能用用push和pull,这还是我第一次把老师的教程从头到尾看了一遍。惭愧呀~😓😅😓😓 + +​ 这一次,了解到add和commit的区别,了解到工作区与缓存区和远程仓库的区别。终于学会了checkout、branch等等开发中会常用的命令。 + +​ 以前只是简单的传master的主支,没有尝试过写分支,这一次简单的尝试,感觉以后再开发项目中的方便。希望自己能在程序员这个道路上好好的走下去。加油加油。顺便感谢老师的教程,写的真棒!!!👍👍 \ No newline at end of file diff --git a/Julian's file b/Julian's file new file mode 100644 index 000000000..2cf8f467d --- /dev/null +++ b/Julian's file @@ -0,0 +1 @@ +thank you very much diff --git a/Julianshang.txt b/Julianshang.txt new file mode 100755 index 000000000..d84b33cd3 --- /dev/null +++ b/Julianshang.txt @@ -0,0 +1 @@ +最近又把廖老师的教程看了一遍,对于本地的版本控制又有了更深入的认识。 diff --git a/JungleLu b/JungleLu new file mode 100644 index 000000000..e4a93881d --- /dev/null +++ b/JungleLu @@ -0,0 +1 @@ +My name is JungleLu diff --git a/KID-G-two.txt b/KID-G-two.txt new file mode 100644 index 000000000..46c6009c8 --- /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 100644 index 000000000..a04238969 --- /dev/null +++ b/KID-G.txt @@ -0,0 +1 @@ +hello world! diff --git a/Kandane.txt b/Kandane.txt new file mode 100644 index 000000000..afb0a8fd8 --- /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 100644 index 000000000..e69de29bb diff --git a/Kevin--Wu.txt b/Kevin--Wu.txt new file mode 100644 index 000000000..a0e9a7f56 --- /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 100644 index 000000000..8f055d0c7 --- /dev/null +++ b/Kevin.txt @@ -0,0 +1,5 @@ +fd +dsfsdf +dsfdsfdsf +fdsfsf + diff --git a/Kiddingyyc.txt b/Kiddingyyc.txt new file mode 100644 index 000000000..edc43b84c --- /dev/null +++ b/Kiddingyyc.txt @@ -0,0 +1,62 @@ +Hello Mr Liao +Thank you very much +these are my notes +提示:[]里的是指令 +非git 的命令 +[mkdir 文件名] 创建一个文件夹 +[cd] 进入一个文件夹 +[cat] 查看文件内容 +[pwd] 查看当前路径 +[rm] 删除文件 +[rmdir] 删除空的文件夹 + +git 的命令 +[$ git init] 初始化一个git仓库 +[$ git add 文件名] 把文件加到暂存区 +[$ git commit -m "描述"] 把暂存区的内容提交 +[$ git status] 显示所有文件的状态 +[$ git diff 文件名] 只会显示工作区文件内容的改变,如果加到暂存区了,就不会显示内容了 +[$ git log] 显示文件的提交日志 +[$ git log --pretty=oneline] 在一行里显示文件的提交日志 +[$ git reset --hard HEAD^] 版本回退到上一个版本 +[$ git reset --hard HEAD~n] 版本回退到第前n个版本 +[$ git reset --hard 版本commit id] 版本回退到指定的commit id号对应的版本 +[$ git reflog] 显示当前仓库的提交和回退操作指令日志 +[$ git checkout -- ] (注意:--很重要,必加.否则就成了改变分支)把工作区的文件内容修改全部取消,回退到最近的commit|add状态 +[$ git reset <文件名>] 把暂存区的指定的修改给移除 +[$ git rm ] 删除版本库里的文件,并且会把工作区的文件也删除 +[$ git remote add <自定义远程库名> git@github.com:用户名/库名.git] 创建一个远程库连接点 +[$ git remote add <自定义远程库名> https://github.com/用户名/库名.git] 创建一个远程库连接点,但每次都需要输账号密码 +[$ git push -u <自定义远程库名> 远程库的分支名] 把修改提交到远程服务器,第一次加一个-u参数 +[$ git push <自定义远程库名> 远程库的分支名] 把修改提交到远程服务器的对应分支 +[$ git pull --rebase <自定义的远程库名> <分支名>] 从远程库里拉取内容 +[$ git clone git@github.com:用户名/库名.git] 从远程库克隆 +[$ git branch] 查看所有分支,当前分支前有一个*号 +[$ git branch <分支名>] 创建一个新的分支 +[$ git branch -d <分支名>] 删除一个分支 +[$ git merge <分支名>] 在当前HEAD指向的分支里合并指定分支 +[$ git checkout <分支名>] 转换分支,就是转换HEAD指针的指向 +[$ git checkout -b <分支名>] 创建一个新的分支并指向此分支 +[$ git log --graph --pretty=oneline --abbrev-commit] 看提交的结构 +[$ git merge --no-ff -m "描述" <分支名>] 融合分支但是不是快进模式,就是说显示分支的结构 +[$ git stash] 会把当前的工作环境存储起来 +[$ git stash list] 查看已经存储的环境 +[$ git stash apply <存储的工作环境序号>] 会把指定的工作环境恢复,同时还会比较冲突,但不会删除序号 +[$ git stash pop <存储的工作环境序号>] 会把指定的工作环境恢复,同时还会比较冲突,同时删除序号 +[$ git branch -D <分支名>] 强制删除分支 +[$ git remote -v] 显示较详细远程信息 +[$ git remote] 显示简短的远程信息 +[$ git branch --set-upstream 当前分支名 origin/<远程分支名>] 在当前分支和远程分支之间建立一个流桥梁 +[$ git pull] 在已建立流桥梁的情况下,可以拉取远程的最新库 +[$ git tag <默认commit是HEAD>] 在当前最近的一次提交下建立一个标签 +[$ git tag commitId] 在指定的提交下建立一个标签 +[$ git tag -a -m "描述" commitId] 在指定的提交下建立一个标签,并加上描述信息和名字 +[$ git tag -s -m "描述" commitId] 在指定的提交下建立一个标签,并加上描述信息和名字,但是用PGP签名标签 +[$ git tag] 查看所有的标签 +[$ git show ] 查看标签的信息 +[$ git push origin ] 把指定标签推送到远程 +[$ git push origin --tags] 把未提交的标签全部推送到远程 +[$ git tag -d ] 删除标签 +[$ git push origin :refs/tags/] 在远程删除一个标签,注:必须现在本地删除标签 + + diff --git a/KieranRao b/KieranRao new file mode 100644 index 000000000..e02681615 --- /dev/null +++ b/KieranRao @@ -0,0 +1 @@ +谢谢雪峰大大! diff --git a/KiritoSai.md b/KiritoSai.md new file mode 100644 index 000000000..25ba10309 --- /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/Kyrie b/Kyrie new file mode 100644 index 000000000..f2d65044f --- /dev/null +++ b/Kyrie @@ -0,0 +1 @@ +只是试一试,廖老师不用merge diff --git "a/L-3177\347\232\204pull request.txt" "b/L-3177\347\232\204pull request.txt" new file mode 100644 index 000000000..a9588ec9c --- /dev/null +++ "b/L-3177\347\232\204pull request.txt" @@ -0,0 +1 @@ +来自L-3177的pull request diff --git a/LICENSE.txt b/LICENSE.txt new file mode 100755 index 000000000..dee381d73 --- /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 100644 index 000000000..dc36b0247 --- /dev/null +++ b/LYJ_LYJ@126.com @@ -0,0 +1 @@ +看了作者的博客,终于感觉对git有了一些基础理解了,作者提供了这么详细易懂的基础教程,小白再次表示深深的谢意。 diff --git a/LZQSimonLee.txt b/LZQSimonLee.txt new file mode 100755 index 000000000..b102fc160 --- /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 100644 index 000000000..14e24d58c --- /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/LazySheep-Yang.txt b/LazySheep-Yang.txt new file mode 100644 index 000000000..a666f82f6 --- /dev/null +++ b/LazySheep-Yang.txt @@ -0,0 +1 @@ +非常不错的教程,我爱git diff --git a/LearnGitNotes.txt b/LearnGitNotes.txt new file mode 100644 index 000000000..e71a7d748 --- /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 000000000..0f9a1cb0b --- /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