命名来源(from维基百科)
林纳斯·托瓦兹自嘲地取了这个名字“git”,该词源自英国俚语,意思大约是“混账”。
“I’m an egotistical bastard, and I name all my projects after myself. First Linux, now git.”
主要功能(from维基百科)
git是用于Linux内核开发的版本控制工具。与CVS、Subversion一类的集中式版本控制工具不同,它采用了分布式版本库的作法,不需要服务器端软件,就可以运作版本控制,使得源代码的发布和交流极其方便。git的速度很快,这对于诸如Linux内核这样的大项目来说自然很重要。git最为出色的是它的合并追踪(merge tracing)能力。
实现原理(from维基百科)
git和其他版本控制系统(如CVS)有不少的差别,git本身关心文件的整体性是否有改变,但多数的CVS或Subversion系统则在乎文件内容的差异。因此git更像一个文件系统,直接在本机上获取数据,不必连接到主机端获取数据。
1、默认存放git密钥的地方
l ~/.ssh
2、生成密钥命令
ssh-keygen -t rsa
3、克隆项目
git clone [email protected]:ZAndy/PProject.git (SSH方式访问仓库)
4、查看所有分支
git branch
5、创建一个分支
git branch 分支名
6、从当前分支创建新的分支,并且切换到newbranch2
git checkout -b newbranch2
7、切换分支
git checkout 分支名
8、上传新的分支
(fatal: The current branch newbranch has no upstream branch.
To push the current branch and set the remote as upstream, use
git push --set-upstream origin newbranch
9、创建一个新的文件并提交
- 创建一个文件Branch.java
- git add Branch.java
- git commit -a(同步到本地git仓库。必须要在打开的文件中输入内容,不然无法提交)
- git push(提交到远程git仓库)
10、合并分支
- 先切换到主分支 git checkout master
- git merge newbranch
- git push
11、提交当前修改的内容
git commit -m story (必须在-m后面添加内容才能提交)
12、HEAD指向当前节点的父节点或者更上一层
git checkout master^
13、git rebase,第二种合并分支的方法
好处:可以创建一个更好的提交线路
目标:把newbranch分支rebase到master上
- git checkout -b newbranch 创建一个newbranch分支,并切换到newbranch
- git commit -m newbranchcommit 提交分支
- git checkout master 切换到master主分支
- git commit -m mastercommit 提交主分支
- git checkout newbranch 切换到newbranch分支
- git rebase master 合并到主分支
14、Git目录
在.git目录下存储着项目所有的历史和元信息的目录-包括所有的对象(commits,trees,blobs,tags),这些对象指向不同的分支。每个项目只能有一个.git目录。
- HEAD —— 这个git项目当前处在哪个分支里
- config —— 项目的配置信息,git config命令会改动它
- description —— 项目的描述信息
- hooks/ —— 系统默认钩子脚本目录
- index —— 索引文件
- logs/ —— 各个refs的历史信息
- objects/ —— Git本地仓库的所有对象(commits,trees,blobs,tags)
- refs/ —— 标识你项目的每个分支指向了哪个提交(commit)。
15、查看远程分支
git branch -r
16、拉取远程分支
git checkout -b 本地分支名 origin/远程分支名
17、 删除分支
git branch -D 分支名
18、恢复到某个版本
git reset a326430 —hard (a326430是commit号)
19、查看某次commit的修改内容
git show
20、查看某个文件的修改历史
git log -p
21、查看所有分支(本地和远程)
git branch -a