标签:git基本的工作流程
Git使用40个16进制字符的SHA-1 Hash来唯一标识对象 如:e98757d0598ab6eeaf1df0d87dd00826048bd80b
git 有4种对象
1、blob 表示文本文件,二进制文件或者是链接文件
2、tree
3、commit 大多数情况,commit 代表是一个历史提交
4、tag:指向一个固定的一个历史提交
cd /Users/hairongchen/Documents/git
输入:
hairongchen:git (master #)$ git init drama_non_bar_repo
显示:表示为我们创建了一个文件夹,里面还带了一个.git目录
Initialized empty Git repository in /Users/hairongchen/Documents/git/drama_non_bar_repo/.git/
进入这个文件夹:
hairongchen:git (master #)$ cd drama_non_bar_repo/.git/
hairongchen:.git (GIT_DIR!)$
看到命令提示符提示,这是git工作区间。以下是git工作所需要目录和文件
hairongchen:.git (GIT_DIR!)$ ls
HEAD config hooks objects
branches description info refs
hairongchen:.git (GIT_DIR!)$
再退出来,然后创建一个裸仓库,发现没有创建一个.git目录
hairongchen:.git (GIT_DIR!)$ cd ../..
hairongchen:git (master #)$ git init --bare drama_bare_repo
Initialized empty Git repository in /Users/hairongchen/Documents/git/drama_bare_repo/
hairongchen:git (master #)$
再进入这个目录看一下,发现和上面创建一样,但没有在.git目录里面,这是因为它不带工作区,repo只有git工作所需的文件和目录
hairongchen:git (master #)$ cd drama_bare_repo
hairongchen:drama_bare_repo (BARE:master)$ ls
HEAD config hooks objects
branches description info refs
退出
hairongchen:drama_bare_repo (BARE:master)$ cd ../..
对于已经有的工作环境,怎么加入git 管理呢?
hairongchen:Documents (master #)$ cd git
创建一个已有的文件夹,再进入文件夹
hairongchen:git (master #)$ mkdir git_init_repo
hairongchen:git (master #)$ cd git_init_repo/
再输入git init 就为我们初始化好了,如下:
hairongchen:git_init_repo (master #)$ git init
Initialized empty Git repository in /Users/hairongchen/Documents/git/git_init_repo/.git/
hairongchen:git_init_repo (master #)$
hairongchen:git_init_repo (master #)$ cd ..
hairongchen:git (master #)$ git clone git_bare_repo/ git_clone_repo
fatal: repository ‘git_bare_repo/‘ does not exist
hairongchen:git (master #)$ git clone drama_bare_repo/ git_clone_repo
Cloning into ‘git_clone_repo‘...
warning: You appear to have cloned an empty repository.
done.
如果是远程的仓库,不需要加后面的一个路径参数,它使用一个repo名称就可以了
3)有了git仓库,就可以进行git的基本流程了
git 仓库有三个区域:
working directory :工作区,我们时常编辑代码的地方,它维护着一个树型结构
staging area:暂存区,是工作区与历史仓库中间的一个缓存,它代表着是你提交的一个工作
状态,维护着是一个虚拟人一个树型结构
history repository;历史仓库,是我们前提到的commit指向的一个树型结构
git的工作就是围绕这三个区域进行的
我们从working directory 添加文件到staging area里,然后把staging area里提交到history repository里
我们也可以从history repository里 checkout 这个工程到working directory 里。
大部分时间我们都时往staging area暂存区添加东西,然后把staging area里提交到history repository里,常用
1.git add 2.git commit
查看工作区与暂存区的区别来确保提交是我们所需要的呢?
用 3.git status
怎么来删除staging area区不需要的东西呢?
用4.git rm,
有时我们从工作区working directory 中重命名文件或移动文件,然后再把他们添加到暂存区里面
用5. git mv
最后是6.gitignore, 来确保我们工作区里一些不希望添加到暂存区和历史区中的文件添加进去
下面来进行演示:
创建一个仓库,并创建两个文件,添加到暂存区中
hairongchen:Documents (master #)$ git init git_basic
Initialized empty Git repository in /Users/hairongchen/Documents/git_basic/.git/
hairongchen:Documents (master #)$ cd git_basic
hairongchen:git_basic (master #)$ touch a
hairongchen:git_basic (master #)$ touch b
hairongchen:git_basic (master #)$ git add
Nothing specified, nothing added.
hairongchen:git_basic (master #)$ git add a b
再用git status 看一下:
hairongchen:git_basic (master #)$ git status
On branch master
Initial commit
Changes to be committed:
(use "git rm --cached <file>..." to unstage)
new file: a
new file: b
这两个文件是一个初始的提交,再有git commit 提交,那么这两个文件就提交到历史记录中去了如:
hairongchen:git_basic (master #)$ git commit -m "Initial commit"
[master (root-commit) 51686d4] Initial commit
2 files changed, 0 insertions(+), 0 deletions(-)
create mode 100644 a
create mode 100644 b
修改一下a文件
hairongchen:git_basic (master)$ vim a
用git status来看一下,显示a文件修改了,但没有保存到暂存区里面,也就是说它还没被准备提交
hairongchen:git_basic (master *)$ git status
On branch master
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: a
no changes added to commit (use "git add" and/or "git commit -a")
用git add a 添加到暂存区中,再用git status, 告诉我们a已经准备提交了:
hairongchen:git_basic (master *)$ git add a
hairongchen:git_basic (master +)$ git status
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
modified: a
再用git commit - “modify a” 进行提交:
hairongchen:git_basic (master +)$ git commit -m"mofify a"
[master 269ab6e] mofify a
1 file changed, 1 insertion(+)
删除文件
我们删除a文件,用git rm a ,它将工作工区各暂存区全删除:
hairongchen:git_basic (master)$ git rm a
rm ‘a‘
hairongchen:git_basic (master +)$ ls
b
hairongchen:git_basic (master +)$ git status
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
deleted: a
它告诉我们,当我们git commit 命令时, 就相当于这个历史里就没有a文件了
我们原还一下:
hairongchen:git_basic (master +)$ git reset HEAD a
Unstaged changes after reset:
D a
hairongchen:git_basic (master *)$ ls
b
hairongchen:git_basic (master *)$ git checkout a
hairongchen:git_basic (master)$ ls
a b
如果我们只删除暂存区里的文件,而不删除工作里的文件呢?
用git rm — cached a :
hairongchen:git_basic (master)$ git rm --cached a
rm ‘a‘
hairongchen:git_basic (master +)$ git status
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
deleted: a
Untracked files:
(use "git add <file>..." to include in what will be committed)
a
显示它还没有一个跟踪的文件
我们可以用git add 重新加到暂存区:
hairongchen:git_basic (master +)$ git add a
有时候我们的文件被重命名或移动路径:
把a 重命名为c:
hairongchen:git_basic (master)$ git mv a c
hairongchen:git_basic (master +)$ git status
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
renamed: a -> c
它告诉我们这里有一个reset操作,实际上git 并没有文件的命名和移动操作,实际是一种操作的组合
我们修改回去 git mv c a
直接在自己的工作区修改:
hairongchen:git_basic (master +)$ git mv c a
hairongchen:git_basic (master)$ mv a c
hairongchen:git_basic (master *)$ git status
On branch master
Changes not staged for commit:
(use "git add/rm <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
deleted: a
Untracked files:
(use "git add <file>..." to include in what will be committed)
c
no changes added to commit (use "git add" and/or "git commit -a”)
它告诉我们说a被删除了,还没有被暂存,同时有一个c 文件,没有被纳入跟踪
再次输入git add a c :
hairongchen:git_basic (master *)$ git add a c
hairongchen:git_basic (master +)$ git status
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
renamed: a -> c
最后是6.gitignore, 来确保我们工作区里一些不希望添加到暂存区和历史区中的文件添加进去
进入一个目录:
cd ../git_ignore_demo/
vim .gitignore
*.[oa] #以o 和a 结尾的文件 不要添加到git 仓库中
*~ #vim 中间文件
*.pyc #所有的pyc不要中入git 仓库中
!test.pyc #test.pyc要纳入git 仓库中,告诉git 这个文件不要被忽略
\!text.py #对于文件名中有!时,在前加\ !text.py不要被忽略
foo/ #以/结尾代表是一个目录,这样子的话,就匹配不到foo文件了
**/res #匹配0个或多个目录
#如果其他文件都不需要都可以加进来
build/
Documenation/
src/
.DS_Store
用 git status查看
用git add .gitingore 加入进入,用于整个仓库的共享
git commmit -m “add ignore"
版权声明:本文为博主原创文章,未经博主允许不得转载。
标签:git基本的工作流程
原文地址:http://blog.csdn.net/baitxaps/article/details/47386917