程序员小白学习Git用法
runoob Git:http://www.runoob.com/git/git-tutorial.html
runoob Github:http://www.runoob.com/w3cnote/git-guide.html
What is git
Git是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。
Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。
Git 与常用的版本控制工具 CVS, Subversion 等不同,它采用了分布式版本库的方式,不必服务器端软件支持。工作区、暂存区和版本库
git创建仓库
- git init:用 git init 在目录中创建新的 Git 仓库。 你可以在任何时候、任何目录中这么做,完全是本地化的。
git基本操作
- git clone:使用 git clone 拷贝一个 Git 仓库到本地,让自己能够查看该项目,或者进行修改。
- git add:git add 命令可将该文件添加到缓存。
- gid add. 添加当前项目中的所有文件。
- git status 命令用于查看项目的当前状态。
- A: 你本地新增的文件(服务器上没有)
- C: 文件的一个新拷贝.
- D: 你本地删除的文件(服务器上还在).
- M: 文件的内容或者mode被修改了.
- R: 文件名被修改了
- T: 文件的类型被修改了
- U: 文件没有被合并(你需要完成合并才能进行提交)。
- X: 未知状态(很可能是遇到git的bug了,你可以向git提交bug report)
- ?:未被git进行管理,可以使用git add file1把file1添加进git能被git所进行管理
- 在.git中创建新文件,git status=?的是未管理的文件,用git add可以添加到缓存区,然后git commit同步到仓库中。
- git diff: 执行 git diff 来查看执行 git status 的结果的详细信息。
- git diff 命令显示已写入缓存与已修改但尚未写入缓存的改动的区别。git diff 有两个主要的应用场景:
- 尚未缓存的改动:git diff
- 查看已缓存的改动: git diff –cached
- 查看已缓存的与未缓存的所有改动:git diff HEAD
- 显示摘要而非整个 diff:git diff –stat
- git commit: 使用 git add 命令将想要快照的内容写入缓存区, 而执行 git commit 将缓存区内容添加到仓库中
- git reset HEAD: 执行 git reset HEAD 以取消之前 git add 添加,但不希望包含在下一提交快照中的缓存。(本次先不提交)
- git rm: 要从 Git 中移除某个文件,就必须要从已跟踪文件清单中移除,然后提交。
- git rm -f: 如果删除之前修改过并且已经放到暂存区域的话,则必须要用强制删除选项
- git rm –cached: 如果把文件从暂存区域移除,但仍然希望保留在当前工作目录中,换句话说,仅是从跟踪清单中删除,使用 –cached 选项即可。
- git rm -r *: 递归删除
- git mv: git mv 命令用于移动或重命名一个文件、目录、软连接。
- git rm: 要从 Git 中移除某个文件,就必须要从已跟踪文件清单中移除,然后提交。
git分支管理
- git branch: 列出分支
- git branch (branchname):新建分支
- git checkout -b (branchname) : 新建分支并切换到该分支下
- git branch -d (branchname):删除分支
- git checkout (branchname):切换分支
- git merge:分支合并
- 主分支未必是默认 master
- 在主分支上执行: git merge (需要合并的branchname)
- 合并冲突:合并并不仅仅是简单的文件添加、移除的操作,Git 也会合并修改。
- 系统默认把2个文件内容merge在1个文件中
- 1 手动修改那个文件,并保存,此时通过git status看到的文件状态是UU
- 2 git add filename,手动把该文件添加到缓存区,此时该文件状态是M
- 3 git commit 手动commit
- 系统默认把2个文件内容merge在1个文件中
- git查看提交历史
- git log 查看所有变更历史
- git log –online 查看每次迭代的内容,用desc描述
- git log –reverse –oneline ,用 ‘–reverse’参数来逆向显示所有日志
- git log –author=Linus –oneline -5, 指定作者
- 指定日期,如果你要指定日期,可以执行几个选项:–since 和 –before,但是你也可以用 –until 和 –after。
- https://git-scm.com/docs/git-log
- git log 查看所有变更历史
- git标签
- 如果你达到一个重要的阶段,并希望永远记住那个特别的提交快照,你可以使用 git tag 给它打上标签。
- git tag
Github
- github简明教程:http://www.runoob.com/w3cnote/git-guide.html
- 绑定git repo:git remote add origin git@github.com:tianqixin/runoob-git-test.git
- 提交到git:git push -u origin master
- 查看当前有哪些远程库:git remote -v
- 提取远程仓库:Git 有两个命令用来提取远程仓库的更新
- 从远程仓库下载新分支与数据:git fetch。该命令执行完后需要执行git merge 远程分支到你所在的分支。
- 从远端仓库提取数据并尝试合并到当前分支:git merge。该命令就是在执行 git fetch 之后紧接着执行 git merge 远程分支到你所在的任意分支。
- git fetch origin
- git merge origin/master
- 推送到远程仓库:git push [alias] [branch]
- 先 git commit -m ‘value’ 到本地仓库
- 删除远程仓库:git remote rm [alias]
- alias 是在仓库创建时设置的,如:git remote add origin git@github.com:xxx.git
- 删除后使用git remote -v 查看当前的仓库
git pull, fetch, clone的区别:
- 第一次备份仓库,若目录下没有文件夹,直接clone
- pull = fetch + merge
- git rebase
- git pull = git fetch + git merge
- git pull – rebase = git fetch + git rebase
- 区别:https://blog.csdn.net/TTKatrina/article/details/79288238
Git Basic Concepts
https://www.kalvin.cn/video/user/id-RonaldoYaoqi.html
Repository
- .git is so-called git repositor,存储变更记录,里面都是BLOG(binary large object)
- 二进制文件的含义,38个16进制数
git objecttype : BLOB
- each version of a file is presented as a blob.
- a blob holds a file’s data but does not contain any metadata about the file or even its name.
git objecttype : COMMIT
- 记录每一次提交的作者,修改文件的parents等
git objecttype : Tree
- 记录BLOB的定义着,path namesdeng
Branch
温习一下VI的三种编辑模式
命令行模式 (command mode/一般模式)
- 任何时候,不管用户处于何种模式,只要按一下“ESC”键,即可使Vi进入命令行模式;我们在shell环境(提示符为$)下输入启动Vi命令,进入编辑器时,也是处于该模式下。
- 在该模式下,用户可以输入各种合法的Vi命令,用于管理自己的文档。此时从键盘上输入的任何字符都被当做编辑命令来解释,若输入的字符是合法的Vi命令,则Vi在接受用户命令之后完成相应的动作。但需注意的是,所输入的命令并不在屏幕上显示出来。若输入的字符不是Vi的合法命令,Vi会响铃报警。
文本输入模式 (input mode/编辑模式)
- 在命令模式下输入插入命令i(insert)、附加命令a (append)、打开命令o(open)、修改命令c(change)、取代命令r或替换命令s都可以进入文本输入模式。在该模式下,用户输入的任何字符都被Vi当做文件内容保存起来,并将其显示在屏幕上。在文本输入过程中,若想回到命令模式下,按”ESC”键即可。
末行模式 (last line mode/指令列命令模式)
- 末行模式也称ex转义模式。
- Vi和Ex编辑器的功能是相同的,二者主要区别是用户界面。在Vi中,命令通常是单个键,例如i、a、o等;而在Ex中,命令是以按回车键结束的正文行。Vi有一个专门的“转义”命令,可访问很多面向行的Ex命令。在命令模式下,用户按“:”键即可进入末行模式下,此时Vi会在显示窗口的最后一行(通常也是屏幕的最后一行)显示一个“:”作为末行模式的提示符,等待用户输入命令。多数文件管理命令都是在此模式下执行的(如把编辑缓冲区的内容写到文件中等)。末行命令执行完后,Vi自动回到命令模式。