$ mkdir /tmp/example
$ cd /tmp/example
$ git init
Initialized empty Git repository in /tmp/example/.git/
$ echo "Hello, world" > README.txt
$ git commit #默认不会提交
# On branch master
#
# Initial commit
#
# Untracked files:
# (use "git add <file>..." to include in what will be committed)
#
# README.txt
nothing added to commit but untracked files present (use "git add" to track)
$ git add README.txt #纳入版本管理
$ git commit -m "Added README.txt" #提交并带说明
[master (root-commit) 0dd1f35] Added README.txt
1 files changed, 1 insertions(+), 0 deletions(-)
create mode 100644 README.txt
$ echo "Hello, solar system" > README.txt #修改README文件
$ git commit
# On branch master
# Changed but not updated:
# (use "git add <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# modified: README.txt
#
no changes added to commit (use "git add" and/or "git commit -a")
$ git commit -a -m "Updated README.txt"
[master 9b1939a] Updated README.txt
1 files changed, 1 insertions(+), 1 deletions(-)
$ git log --graph --oneline # 图形化显示日志,下面合并分支,图形化就更明显了
* 9b1939a Updated README.txt
* 0dd1f35 Added README.txt
$ git checkout -b french 0dd1f35 # 创建并切换至分支french,注意0dd1f35为一天提交记录的id,每个人实践会不一样。
Switched to a new branch 'french'
$ cat README.txt
Hello, world
$ echo "Bonjour, tout le monde" > README.txt
$ git add README.txt #或者使用git commit -a -m "Ajouté README.txt"
$ git commit -m "Ajouté README.txt"
[french 66a644c] Ajouté README.txt
1 files changed, 1 insertions(+), 1 deletions(-)
$ git log --graph --oneline
* 66a644c Ajouté README.txt
* 0dd1f35 Added README.txt
$ git checkout -b web 0dd1f35 # 创建并切换至分支web,0dd1f35与上述french已有
$ echo '<a href="http://git.eclipse.org">git.eclipse.org</a>' > index.html
$ git add index.html
$ git commit -m "Added homepage"
[web d47e30c] Added homepage
1 files changed, 1 insertions(+), 0 deletions(-)
create mode 100644 index.html
$ git checkout master
$ git branch #查看拥有哪些分支
french
* master
web
$ git merge web # 把web归并进master分支上
Merge made by recursive.
index.html | 1 +
1 files changed, 1 insertions(+), 0 deletions(-)
create mode 100644 index.html
$ git checkout french # 切换至分支french
Switched to branch 'french'
$ git merge web #跟上述归并类似
Merge made by recursive.
index.html | 1 +
1 files changed, 1 insertions(+), 0 deletions(-)
create mode 100644 index.html
$ git log --graph --oneline #现在可以图形化显示日志,多么形象的展示分支和归并
* e974231 Merge branch 'web' into french
|\
| * d47e30c Added homepage
* | 66a644c Ajouté README.txt
|/
* 0dd1f35 Added README.txt
$ git checkout master
$ git log --graph --oneline
* e3de4de Merge branch 'web'
|\
| * d47e30c Added homepage
* | 9b1939a Updated README.txt
|/
* 0dd1f35 Added README.txt
$ (mkdir /tmp/other;cd /tmp/other;git init)
$ (cd /tmp/other;git config --bool core.bare true) #该命令告诉git,/tmp/other为裸库,我可以“push”进去。
Initialized empty Git repository in /tmp/other/.git/
$ git remote add other /tmp/other # 可以使用URL http或git,如github提供那样
$ cd /tmp/example
$ git push other master # 将master分支推送到远程版本库'other'
Counting objects: 11, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (7/7), done.
Writing objects: 100% (11/11), 981 bytes, done.
Total 11 (delta 1), reused 0 (delta 0)
Unpacking objects: 100% (11/11), done.
To /tmp/other
* [new branch] master -> master
$ git push --all other # 推送所以分支到远程版本库‘other’
Counting objects: 8, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (5/5), 567 bytes, done.
Total 5 (delta 0), reused 0 (delta 0)
Unpacking objects: 100% (5/5), done.
To /tmp/other
* [new branch] french -> french
* [new branch] web -> web
$ cd /tmp/other #切换回目录/tmp/other
$ git config --bool core.bare false # 允许这个库可以被checkout文件
$ ls # 查看现在other目录下有哪些文件
$ git branch
french
* master
web
$ git checkout web #获取other库下面的web分支
$ ls #现在再查看下other目录下有哪些文件
README.txt index.html
$ echo '<h1>Git rocks!</h1>' >> index.html
$ git commit -a -m "Added Git Rocks!"
[web 510621a] Added Git Rocks
1 files changed, 1 insertions(+), 0 deletions(-)
$ cd /tmp/example # 倒回刚刚那目录
$ git pull other web # Pull回在other下修改的web分支,注意,此时是example目录(库)所处的分支为master,即之前和web归并过得master,现在又和修改后的web归并。(此处该结合下面的log图形化日志慢慢思考,相信我,你会想通的。)
remote: Counting objects: 5, done.
remote: Compressing objects: 100% (3/3), done.
remote: Total 3 (delta 0), reused 0 (delta 0)
Unpacking objects: 100% (3/3), done.
From /tmp/other
* branch web -> FETCH_HEAD #FETCH_HEAD为example目录(库)的最新状态
Merge made by recursive.
index.html | 1 +
1 files changed, 1 insertions(+), 0 deletions(-)
$ git log --graph --oneline #嗒哒,重头戏~
* 146932f Merge branch 'web' of /tmp/other
|\
| * 510621a Added Git Rocks
* | e3de4de Merge branch 'web'
|\ \
| |/
| * d47e30c Added homepage
* | 9b1939a Updated README.txt
|/
* 0dd1f35 Added README.txt