1.创建git可以管理的仓库
#切换到要创建仓库的目录
$ mkdir gittest
$ cd gittest/
#创建git仓库
$ git init
Initialized empty Git repository in C:/gittest/.git/
$ ls -a
./ ../ .git/
$ ll
total 7
-rw-r--r-- 1 px222 197609 157 7月 2 21:46 config
-rw-r--r-- 1 px222 197609 73 7月 2 21:46 description
-rw-r--r-- 1 px222 197609 23 7月 2 21:46 HEAD
drwxr-xr-x 1 px222 197609 0 7月 2 21:46 hooks/
drwxr-xr-x 1 px222 197609 0 7月 2 21:46 info/
drwxr-xr-x 1 px222 197609 0 7月 2 21:46 objects/
drwxr-xr-x 1 px222 197609 0 7月 2 21:46 refs/
2.添加文件到git仓库
#使用命令git add <file>
,添加文件到git的暂存区。可反复多次使用,添加多个文件
$ git add readme.txt
#要随时掌握工作区的状态,使用git status
命令。
$ git status
On branch master
Initial commit
Changes to be committed:
(use "git rm --cached <file>..." to unstage)
new file: readme.txt
#提交更改,实际上就是把暂存区的所有内容提交到当前分支。
$ git commit -m "git readme"
[master (root-commit) a800ccb] git readme
1 file changed, 2 insertions(+)
create mode 100644 readme.txt
3.git diff
$ 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: readme.txt
no changes added to commit (use "git add" and/or "git commit -a")
# 使用git diff 查看文件变更的内容
$ git diff readme.txt
diff --git a/readme.txt b/readme.txt
index a6125e4..213b003 100644
--- a/readme.txt
+++ b/readme.txt
@@ -1,2 +1,3 @@
hello git,this is my first time use!
+git is distributed version control system
i very like git
4 git reset 操作版本回退
#使用git log 查看 我们提交历史
$ git log commit 515343f4454fe165710bd61bda3634e9384be177 Author: peng xuan <px2222_1@hotmail.com> Date: Sun Jul 2 22:56:47 2017 +0800 add hate commit 0de38ca81795b63059bf3a981e0860713ce3528c Author: peng xuan <px2222_1@hotmail.com> Date: Sun Jul 2 22:54:24 2017 +0800 about python commit 834c8c6a9c91aec59dca12fb14004e57dc328d61 Author: peng xuan <px2222_1@hotmail.com> Date: Sun Jul 2 22:49:30 2017 +0800 add a line about distribute commit a800ccbcb8decb8386c121174b8462f3b9e89f78 Author: peng xuan <px2222_1@hotmail.com> Date: Sun Jul 2 22:13:09 2017 +0800 git readme
#上面输出的内容太多,可以加--pretty=oneline参数
$ git log --pretty=oneline
515343f4454fe165710bd61bda3634e9384be177 add hate
0de38ca81795b63059bf3a981e0860713ce3528c about python
834c8c6a9c91aec59dca12fb14004e57dc328d61 add a line about distribute
a800ccbcb8decb8386c121174b8462f3b9e89f78 git readme
#回退到上个版本,也就是"about python" 那个commit
上一个版本就是HEAD^
,上上一个版本就是HEAD^^
,当然往上100个版本写100个^
比较容易数不过来,所以写成HEAD~100
$ git reset --hard head^
HEAD is now at 0de38ca about python
#除了使用head^这种版本指定方法外,还是可以直接使用版本号,也就是commit id,使用git log 看到那一长串id就是commit id
#现在我们后悔了,想重新回到回退之前的那个版本,这时只要我们窗口没有关,找到那个commit id 即可,如下所示,版本号不必要写全
$ git reset --hard 515343f
HEAD is now at 515343f add hate
5.git reflog 显示命令历史记录
$ git reflog 515343f HEAD@{0}: reset: moving to 515343f 0de38ca HEAD@{1}: reset: moving to head^ 515343f HEAD@{2}: commit: add hate 0de38ca HEAD@{3}: commit: about python 834c8c6 HEAD@{4}: commit: add a line about distribute a800ccb HEAD@{5}: commit (initial): git readme
6. git checkout -- <file>
命令git checkout -- readme.txt
意思就是,把readme.txt
文件在工作区的修改全部撤销,这里有两种情况:
一种是readme.txt
自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;
一种是readme.txt
已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。
总之,就是让这个文件回到最近一次git commit
或git add
时的状态。
7.git reset HEAD <file>.
用命令git reset HEAD file
可以把暂存区的修改撤销掉(unstage),重新放回工作区; 修改重放回工作区后,使用命令git checkout -- file进一步撤销工作区修改 。git reset命令既可以回退版本,也可以把暂存区的修改回退到工作区。当我们用HEAD
时,表示最新的版本.
8.删除文件后的操作
当使用操作系统命令删除了某个文件后,git 是知道该文件被删除的,这时工作区和版本库不一致。
- 这时我们有一个选择,就是确实要从版本库中删除该文件,那就用命令
git rm
删掉,并且git commit;现在,文件就从工作区和版本库中都被删除了,恢复一致状态。
- 删除操作也是修改操作,使用git checkout -- file 恢复到上次的git commit 。也就是可以把该file恢复过来。
9.远程仓库
- 添加远程githup仓库
#or create a new repository on the command line echo "# cmdb" >> README.md git init git add README.md git commit -m "first commit"
#https协议,关联本地仓库的master分支到远程仓库
git remote add origin https://github.com/px22222/cmdb.git
#ssh协议
git remote add origin git@github.com:px22222/cmdb.git
#关联远程仓库后,第一次推送本地仓库的master分支的所有内容到关联的远程仓库
git push -u origin master
#本地仓库有新的提交后,推送修改到远程仓库 git push origin master #or push an existing repository from the command line git remote add origin https://github.com/px22222/cmdb.git git push -u origin master
2.从远程仓库克隆
git clone git@github.com:px22222/perfect_crm.git
#获取最新修改内容
git pull origin master
10.分支管理
- 创建分支
默认只有一个master分支,当我们创建新的分支,例如dev
时,Git新建了一个指针叫dev
,指向master
相同的提交,再把HEAD
指向dev
,就表示当前分支在dev
上,示意图如下
#创建分支命令 $ git checkout -b dev Switched to a new branch 'dev'
#-b 参数表示创建并切换到dev分支,相当于如下2条命令
$ git branch dev
$ git checkout dev
Switched to branch 'dev'
#查看当前所在分支
$ git branch
* dev
master
#在新的分支对内容进行修改,然后提交修改
$ git add README.md
$ git commit -m "add a line on dev branch"
[dev f848502] add a line on dev branch
1 file changed, 1 insertion(+)
$ git status
On branch dev
nothing to commit, working directory clean
#切换到master分支发现README.md的内容并没有变化,那是因为我们提交点在dev分支上,而master分支的提交点并没有变化
$ git checkout master
Switched to branch 'master'
#如果想要看到修改的内容,我们需要把dev分支和master分支合并
$ git merge dev
Updating 1ba58b8..f848502
Fast-forward
README.md | 1 +
1 file changed, 1 insertion(+)
#注意到上面的Fast-forward
信息,Git告诉我们,这次合并是“快进模式”,也就是直接把master
指向dev
的当前提交,所以合并速度非常快。

#如果觉得分支已经没用,可以删除分支
$ git branch -d dev
Deleted branch dev (was f848502).
2. 解决分支合并冲突
当在不同的分支对同一部内容进行了修改,然后对这2部分分支的内容进行合并时会遇到冲突,这时需要手动解决,然后再次提交修改