git add README test.rb LICENSE
git commit -m 'The initial commit of my project'
执行 git commit 后的步骤
做些修改后再次提交,那么这次产生的提交对象会包含一个指向上次提交对象(父对象)的指针。
master
分支并不是一个特殊分支,它就跟其它分支完全没有区别git init
命令默认创建它git branch testing
这会在当前所在的提交对象上创建一个指针
HEAD
的特殊指针git branch
命令仅仅创建一个新分支,并不会自动切换到新分支中去git checkout testing
这样 HEAD 就指向 testing 了
polo@B-J5D1MD6R-2312 watermarker % git checkout newtest2
M test.py
A test1..3.txt
A test1.txt
D test111.txt
A test3.txt
切换到分支 'newtest2'
polo@B-J5D1MD6R-2312 watermarker % git log
commit 6652c6d6c439cb23ef6aaff79eeccbf3213a9a0b (HEAD -> newtest2, tag: 1.2, origin, newtest3)
切换分支后查看提交历史
可以看到指向最新提交对象的分支有三个:origin、newtest2、newtest3,当前 HEAD 指向的分支是 newtest2,因为刚刚切换到 newtest2 了
那么,这样的实现方式会给我们带来什么好处呢?修改后再 提交一次
vim test.rb
git commit -a -m 'made a change'
testing 分支会往前移动,但是 master 分支却没有,因为每次 git commit 提交新内容之后,只有 HEAD 指向的分支会自动往前移动,其他分支不会动的
git checkout master
master
分支master
分支所指向的快照内容(旧内容)再次修改并提交
vim test.rb
git commit -a -m 'made other changes'
git log --oneline --decorate --graph --all
它会输出你的提交历史、各个分支的指向以及项目的分支分叉情况
git log --oneline --decorate --graph --all
* c2b9e (HEAD, master) Made other changes
| * 87ab2 (testing) Made a change
|/
* f30ab Add feature #32 - ability to add new formats to the central interface
* 34ac2 Fix bug #1328 - stack overflow under certain conditions
* 98ca9 initial commit of my project