git学习笔记

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 commitgit add时的状态。

 

 

 

7.git reset HEAD <file>.

用命令git reset HEAD file可以把暂存区的修改撤销掉(unstage),重新放回工作区; 修改重放回工作区后,使用命令git checkout -- file进一步撤销工作区修改 。git reset命令既可以回退版本,也可以把暂存区的修改回退到工作区。当我们用HEAD时,表示最新的版本.

 

 

8.删除文件后的操作

当使用操作系统命令删除了某个文件后,git 是知道该文件被删除的,这时工作区和版本库不一致。

  1. 这时我们有一个选择,就是确实要从版本库中删除该文件,那就用命令git rm删掉,并且git commit;现在,文件就从工作区和版本库中都被删除了,恢复一致状态。
  2. 删除操作也是修改操作,使用git checkout -- file 恢复到上次的git commit 。也就是可以把该file恢复过来。

 

9.远程仓库

  1. 添加远程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.分支管理

  1. 创建分支

    默认只有一个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部分分支的内容进行合并时会遇到冲突,这时需要手动解决,然后再次提交修改

posted @ 2017-07-03 23:44  andypengx  阅读(154)  评论(0编辑  收藏  举报