git fetch命令默认是将github中获取最新的版本到本地分支,默认是获取最新的origin/master,然后比较本地的master分支和origin/master分支的差别,进行差异合并。
更一般的命令:
$ git fetch origin <remote branch>:<local branch> #分支 5.3.5.5 git pullgit pull命令是两个命令的合并
$ git pull origin <remote branch>:<local branch> #equal $ git fetch <remote branch>:<local branch> $ git merge <remote branch> #on local branch 5.3.6 git reset和git revertgit reset和git revert命令是用来撤销变更的,常用命令如下(关于HEAD的解释,请看分支一节):
$ git reset #取消所有暂存文件 $ git reset HEAD <file> #取消某一暂存文件、 $ git reset HEAD~n #回溯n个提交 $ git reset --hard HEAD~n #强制回溯n个提交 $ git revert HEAD~n #新的提交与HEAD~(n+1)的内容一模一样使用git reset命令回溯到某个历史提交,不会保留后面的提交历史,而git revert命令则是创建与回溯历史一样的提交。
5.3.7 git别名有一个小技巧可以使你的 Git 体验更简单、容易、熟悉:别名。可以通过 git config文件来轻松地为每一个命令设置一个别名。以下是一些实例。
$ git config --global alias.co checkout $ git config --global alias.br branch $ git config --global alias.ci commit $ git config --global alias.st status这样,就可以用git co代表git commit,git br代表git branch等等。取消别名使可使用如下命令:
$ git config --global alias.unstage 'reset HEAD --' 5.3.8 git tagGit 可以给历史中的某一个提交打上标签,以示重要。比较有代表性的是人们会使用这个功能来标记发布结点。经常可以看某些软件库经常发x.x.x版本。
$ git log --pretty=format:"%h %s" b976c0a delete README.md b4d7987 add some info 2ae267c fix one error 405cd1b add hello everyone edb1d60 first commit $ git tag v1 b976c0a $ git push origin v1通过以上命令,就可以在远程仓库tag下有v1版本,如图所示(ps:我多tag了一个v2):
一般我们总会有些文件无需纳入Git的管理,也不希望它们总出现在未跟踪文件列表。通常都是些自动生成的文件,比如日志文件,或者编译过程中创建的临时文件等。在这种情况下,我们可以创建一个名为.gitignore的文件,列出要忽略的文件模式。
文件.gitignore 的格式规范如下:
• 所有空行或者以 # 开头的行都会被 Git 忽略。
• 可以使用标准的 glob 模式匹配。
• 匹配模式可以以(/)开头防止递归。
• 匹配模式可以以(/)结尾指定目录。
• 要忽略指定模式以外的文件或目录,可以在模式前加上惊叹号(!)取反。
所谓的 glob 模式是指 shell 所使用的简化了的正则表达式。 星号(*)匹配零个或多个任意字符;[abc] 匹配任何一个列在方括号中的字符(这个例子要么匹配一个a,要么匹配一个b,要么匹配一个c);问号(?)只匹配一个任意字符;如果在方括号中使用短划线分隔两个字符,表示所有在这两个字符范围内的都可以匹配(比如 [0-9] 表示匹配所有 0 到 9 的数字)。使用两个星号(*) 表示匹配任意中间目录,比如a/**/z可以匹配a/z, a/b/z 或 a/b/c/z等。
.gitignore 文件的例子:
# no .a files *.a # but do track lib.a, even though you're ignoring .a files above !lib.a # only ignore the TODO file in the current directory, not subdir/TODO /TODO # ignore all files in the build/ directory build/ # ignore doc/notes.txt, but not doc/server/arch.txt doc/*.txt # ignore all .pdf files in the doc/ directory doc/**/*.pdfTIP: GitHub 有一个十分详细的针对数十种项目及语言的 .gitignore 文件列表,你可以在https://github.com/github/gitignore 找到它.
5.3.10 LICENSE文件这一小节是最后加上的,可能会与后面的章节的LICENSE冲突,这点注意一下就好。
LICENSE文件是一种开源许可证,即授权条款。开源软件并非完全没有限制。最基本的限制,就是开源软件强迫任何使用和修改该软件的人承认发起人的著作权和所有参与人的贡献。任何人拥有可以自由复制、修改、使用这些源代码的权利,不得设置针对任何人或团体领域的限制;不得限制开源软件的商业使用等。而许可证就是这样一个保证这些限制的法律文件。