人人都会用的几个命令
1 | 创建repository |
人人都知道的几个概念
工作区、版本库、暂存区
- 工作区: 执行
git init
命令的这个目录 - 版本库: 工作区中有一个
.git
隐藏目录,这个目录是版本库,版本库中有git为我们创建的第一个分之master
,以及指向master
的指针叫HEAD
// HEAD是文件吗??? - 暂存区: 版本库中
index
目录或叫stage
目录,可以简单理解为,需要提交的文件修改通通放到暂存区,然后,一次性提交暂存区的所有修改。
Git的文件管理
Git跟踪并管理的是修改,而非文件1
2
3
4
5
6
7
8
9
10
11
12
13工作区 -> 暂存区 -> 仓库
git add把文件从工作区>>>>暂存区,git commit把文件从暂存区>>>>仓库,
git diff 查看工作区和暂存区差异(修改了还未暂存的变化)
git diff --cached 查看暂存区和仓库差异(所有暂存了还未提交的变化)
git diff HEAD -- readme.txt 查看工作区和仓库的差异
git add的反向命令git checkout,撤销工作区修改,即把暂存区最新版本转移到工作区,
git commit的反向命令git reset HEAD,就是把仓库最新版本转移到暂存区。
撤销修改
1 | 让文件回到最近一次git commit或 git add时的状态 |
删除文件
若一个文件存在与仓库中,你将文件在工作区删除后
如果你是想提交操作,即删除仓库中的这个文件,使用这个命令
1
2git rm test.txt
git commit -m "delete test.txt"如果你删错了,想在工作区复原文件,使用这个命令
1
git checkout -- test.txt
远程仓库
现在的情景是,你已经在本地创建了一个Git仓库,又想在GitHub创建一个Git仓库,并且让这两个仓库进行远程同步,这样,GitHub上的库既可以作为备份,又可以让其他人通过该仓库来协作,真是一举多得。
在github创建仓库
把一个已有的本地仓库与之关联,然后,把本地仓库的内容推送到GitHub仓库
git remote add origin git@github.com:XXXXXX/XXXXX.git
将本地库的所有内容推送到远程分支,此时是第一次推送需要加
-u
命令git push -u origin master
未来需要将本地的提交推送至github使用命令
git push origin master
现在,假设我们从零开发,那么最好的方式是先创建远程库,然后,从远程库克隆
首先,登陆GitHub,创建一个新的仓库,名字叫gitskills
我们勾选Initialize this repository with a README,这样GitHub会自动为我们创建一个README.md文件。创建完毕后,可以看到README.md文件
执行命令clone工程下来1
$ git clone git@github.com:michaelliao/gitskills.git
分支管理
创建与合并分支
1 | git创建新分支,并切换到分支中 |
处理冲突
1 | 在某次合并操作中 |
BUG分支
现在的情景是,当你需要创建一个分支issue来修复BUG,但是当前正在dev上进行的工作还没有提交,而且也不能提交时,Git提供了一个stash功能,可以把当前工作现场“储藏”起来,等以后恢复现场后继续工作;
使用
git stash
命令暂存使用
git status
命令查看当前工作区是否干净创建BUG修复分支完成任务,比如此时是在master分支做修改
1
2
3
4
5
6
7
8
9
10
11git checkout master
git checkout -b issue-101
fixed bug ...
git commit -m "fix bug 101"
git checkout master
git merge --no-ff -m "merged bug fix 101" issue-101切换回dev分支继续之前的任务
1
2
3git checkout dev
git status恢复stash区域的环境,使用
git stash list
命令看看1
2git stash list
stash@{0}: WIP on dev: f52c633 add merge- 使用
git stash apply
恢复,但是恢复后,stash内容并不删除,你需要用git stash drop
来删除; 使用
git stash pop
,恢复的同时把stash内容也删了你可以多次stash,恢复的时候,先用git stash list查看,然后恢复指定的stash,用命令
$ git stash apply stash@{0}
- 使用
如果刚刚修复的BUG在此dev分支也存在,可以不合并分支,使用cherry-pick
命令复制一个特定的提交到当前分支1
2
3
4
5 git branch
* dev
master
git cherry-pick 4c805e2
多人协作
使用
git remote
命令查看远程库信息。或者使用git remote -v
命令查看等详细的信息使用
git push origin master
推送分支到远程库获取远程库其他分支(dev)到本地
git checkout -b dev origin/dev
,本地完成开发推送到远程分支1
2
3
4
5$ git add env.txt
$ git commit -m "add env"
$ git push origin dev
1 | 因此,多人协作的工作模式通常是这样: |
标签管理
创建标签
使用git tag <name>
就可以在当前分支创建一个新标签1
git tag v1.0
使用git tag
命令查看所有标签,标签是按照字母排序显示1
2 git tag
v1.0
为历史提交创建一个tag1
git tag v0.9 f52c633
维护标签
命令git push origin <tagname>
可以推送一个本地标签;
命令git push origin --tags
可以推送全部未推送过的本地标签;
命令git tag -d <tagname>
可以删除一个本地标签;
命令git push origin :refs/tags/<tagname>
可以删除一个远程标签。