如何一个例子玩明白GIT

一个例子玩明白GIT

在这里插入图片描述

GIT的介绍和教程五花八门,但实际需要用的就是建仓、推送、拉取等操作,这儿咱可以通过一个例子熟悉这些操作,一次性搞定GIT的使用方法学习。下面这个例子的内容是内容是建立初始版本库,然后将数据复制到 "远程 "版本库。

开始建仓

创建目录/tmp/example,用于这个例子的练习

$ mkdir /tmp/example
$ cd /tmp/example

在这个目录初始化git仓库

$ git init
Initialized empty Git repository in /tmp/example/.git/

创建一个文件RADME.txt

$ echo "Hello, world" > README.txt

git add filenameREADME.txt添加到仓库中

$ git add README.txt # Similar to Team -> Add to Version Control
$ # git commit # Would prompt for message

git commit把之前的操作从缓存提交到仓库,-m后跟上这次提交的说明,每次提交相当于一个暂时的版本,会有唯一的编号,一般工作中会在完成一部分功能或者修改一部分源文件认为需要存档时提交一次。

$ 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

到这儿我们就有了一个仓库,里面提交了README.txt文件的初始版本。

更新仓库

现在我们看后续的更改如何提交的仓库

先修改README.txt文件

$ echo "Hello, solar system" > README.txt

然后提交,由于仓库里已经包含README.txt文件了,不需要再用git add filenameREADME.txt添加到仓库中,-a表示提交所有更改

$ git commit -a -m "Updated README.txt"
[master 9b1939a] Updated README.txt
 1 files changed, 1 insertions(+), 1 deletions(-)
$ git log --graph --oneline # Shows graph nodes (not much here) and change info
* 9b1939a Updated README.txt
* 0dd1f35 Added README.txt

创建分支

有时候需要做大的改动,要对源文件做多处修改,希望测试后再更新到仓库,这个修改过程中的版本控制可以在新的分支中进行,待分支任务完成后再合并到主线任务中

使用git checkout -b branchname创建并切换到新的分支,这里新的分支名是french

$ git checkout -b french 0dd1f35 
Switched to a new branch 'french'

在新分支中查看并修改文件README.txt,这个修改不会影响主线分支存储的文件内容

$ cat README.txt 
Hello, world
$ echo "Bonjour, tout le monde" > README.txt

git add filenameREADME.txt添加到french分支仓库中

$ git add README.txt # or commit -a
$ git commit -m "Ajouté README.txt"
[french 66a644c] Ajouté README.txt
 1 files changed, 1 insertions(+), 1 deletions(-)

git log --graph --oneline查看修改记录

$ git log --graph --oneline
* 66a644c Ajouté README.txt
* 0dd1f35 Added README.txt

再新建一个分支web
$ git checkout -b web 0dd1f35

$ echo 'git.eclipse.org' > index.html

在分支web中添加文件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 branchname切换回mater分支,也就是我们的主线任务仓库

$ git checkout master

git branch查看我们的任务仓库里有哪些分支,前面标*的分支是我们当前所在的分支

$ git branch # See what branches we've got
  french
* master
  web

合并web分支到当前分支

$ git merge web 
Merge made by recursive.
 index.html |    1 +
 1 files changed, 1 insertions(+), 0 deletions(-)
 create mode 100644 index.html

切换到french分支,合并web分支到french分支

$ git checkout 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

查看french分支的版本记录

$ 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

推送到远程仓库

多人协作的情况下,除了本地仓库以外应该还有一个共享的远程仓库,本地修改推送到远程仓库实现协作。这里我们用一个本地目录充当远程仓库,实际情况的操作与此类似

远程仓库的core.bare属性应该是true,这样才能推送(push)到这个仓库

$ mkdir /tmp/other;cd /tmp/other;
$ git init
$ cd /tmp/other;git config --bool core.bare true 
Initialized empty Git repository in /tmp/other/.git/

在本地添加远程仓库的路径,命名为other,实际情况路径可以是URL

$ git remote add other /tmp/other # could be a URL over http/git

master分支推送到远程仓库other

$ git push other master # push branch 'master' to remote repository '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 # Push all branches to '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

结尾

完事儿,懒得写了

你可能感兴趣的:(从物理定律到编程语言,git,版本管理)