您的位置:首页 > 其它

Git常用命令

2014-10-31 19:00 225 查看
全文是根据廖雪峰的文件进行压缩得来,原文链接Git教程

一、Git概念介绍

Git是一个开源的分布式版本控制系统,用以有效、高速的处理从很小到非常大的项目版本管理。它是通过追踪文件的改变来达到版本控制的。

1.1  Git版本库

使用Git命令中设计到几个概念:

工作区,版本库,暂存区。



工作区 :如果某个目录下有.git文件,那么该目录下除了.git文件外所有的文件就是该.git所管理的工作区

版本库 :版本库就是.git目录,它里面记录了每个文件的修改信息和分支信息

暂存区 :版本库的一部分,它里面的数据还没有被添加到分支中去

1.2 分支概念

分支是按代码提交时间先后而组成的一个序列。每次提交修改,就会在版本库中形成相应的一个节点。当创建新的git版本库的时候,会默认创建一个master分支。



分支每次提交后,分支就会新增一个节点来记录相关信息,并将HEAD一般指向最新的提交。



当你在工作区做了大量修改后,想将工作区代码回退到之前的某次提交后的状态,可以将HEAD指向那次提交节点即可。



当你想在某个分支的代码基础上做其他开发,但是又不影响该分支,你可以创建新一个新的分支。

创建分支前:所有的提交信息的节点都保存到master分支中

创建分支后:在那个分支做的修改,提交信息就会保存到对应的分支中,在创建分支以后的节点的代码不会有任何关联。这样你在你自己的分支上做某些尝试,不会影响到其他分支的代码,达到安全隔离目的。



二、Git常用命令

2.1 创建Git版本库

#cd gittest //新建一个空目录做测试,其实也可以进入一个已有文件的目录

#git init  //在该目录下生成一个.git的隐藏目录

~/test/gittest$ git init
Initialized empty Git repository in /home/huanggang/test/gittest/.git/   //repository就是仓库或者版本库的意思
2.2 查看状态信息

#git status  //可以用来查看到Git中文件的修改状态:新建文件,删除文件,文件内容改变,修改是否提交到暂存区,修改是否提交到分支。

~/test/gittest$ touch test.txt //新建一个空文件
~/test/gittest$ git status
# On branch master
#
# Initial commit
#
# Untracked files: //未被追踪的文件,即版本库中没有它的任何信息
#   (use "git add <file>..." to include in what will be committed)
#
#       test.txt
nothing added to commit but untracked files present (use "git add" to track)
2.3 提交修改到暂存区

#git add 文件名

~/test/gittest$ git add test.txt
~/test/gittest$ git status
# On branch master
#
# Initial commit
#
# Changes to be committed://文件修改已经保存到暂存区,可以提交到分支
#   (use "git rm --cached <file>..." to unstage)
#
#       new file:   test.txt
#
2.4 提交修改到分支

#git commit  filename  -m “string”  //-m选项是给这次提交添加注释信息,方便以后查看。在工作区的任何改变都必须先使用git add 再使用git commit提交,这样修改才会被版本库记录,否则你的修改信息版本库不知道。

~/test/gittest$ git commit test.txt -m "just test"
[master (root-commit) c293b42] just test
Committer: huanggang <huanggang@SzExdroid5.(none)>
Your name and email address were configured automatically based
on your username and hostname. Please check that they are accurate.
You can suppress this message by setting them explicitly:

git config --global user.name "Your Name"
git config --global user.email you@example.com

After doing this, you may fix the identity used for this commit with:

git commit --amend --reset-author

0 files changed
create mode 100644 test.txt
~/test/gittest$ git status
# On branch master
nothing to commit (working directory clean)//提交后,工作区和版本库无差别了
2.5 查看提交信息

#git log 或者 git reflog  

git log      查看当前分支的当前版本及以前的版本

git reflog 查看当前分支中版本变化信息

2.6 版本回退

# git reset --hard commit_id 或者 git reset --hard  HEAD^  // HEAD指向当前分支的最新版本,上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100。

版本回退之前,需要查看该分支的提交信息

#git log     //查看当前版本及以前的所有提交信息,如果此时版本已经回退到之前的某个提交,那么将看不到最新的提交信息

#git reflog //查看分支中所有版本变化信息

~/test/gittest$ vim test.txt 
version1                                               //新增内容
~/test/gittest$ git add test.txt                       //提交到暂存区
~/test/gittest$ git commit test.txt -m "1th commit"    //提交到版本库
[master 725f09b] 1th commit                            //在master上,该版本节点的前七位编号为:725f09b

~/test/gittest$ vim test.txt 
version2                                               //新增内容
~/test/gittest$ git add test.txt                       //提交到暂存区
~/test/gittest$ git commit test.txt -m "2th commit"    //提交到版本库
[master fa29bf7] 2th commit                            //在master上,该版本节点的前七位编号为:fa29bf7

~/test/gittest$ vim test.txt 
version3                                               //新增内容
~/test/gittest$ git add test.txt                       //提交到暂存区
~/test/gittest$ git commit test.txt -m "3th commit"    //提交到版本库
[master d8a578d] 3th commit                            //在master上,该版本节点的前七位编号为:d8a578d

~/test/gittest$ vim test.txt
version1                                               //当前版本的文件内容
version2
version3
~/test/gittest$ git log                                //查看当前分支的版本提交信息
commit d8a578dc7266e3e9a7ed667eddb3f33534769751
Author: huanggang <huanggang@SzExdroid5.(none)>
Date:   Fri Oct 31 15:21:55 2014 +0800

    3th commit

commit fa29bf7a0abd0c0e6d6246a606309dfb4ceb95f1
Author: huanggang <huanggang@SzExdroid5.(none)>
Date:   Fri Oct 31 15:21:35 2014 +0800

    2th commit

commit 725f09b434b64607aab18bdc4765b34a8e897ee7
Author: huanggang <huanggang@SzExdroid5.(none)>
Date:   Fri Oct 31 15:20:49 2014 +0800

    1th commit

commit c293b42ae115ab8287e615337eb9af94b468e113
Author: huanggang <huanggang@SzExdroid5.(none)>
Date:   Fri Oct 31 13:50:34 2014 +0800

    just test

~/test/gittest$ git reset --hard fa29bf7                   //回退到前一次版本
~/test/gittest$ vim test.txt                               //此时文件的内容
version1
version2
~/test/gittest$ git reset --hard c293b42a                  //回退到前前一次版本
~/test/gittest$ vim test.txt                               //此时文件的内容
version1

2.7 创建分支

 git checkout -b branch_name //创建分支并切换,它的分支的创建是基于当前分支

 git branch branch_name          //创建一个分支

 git checkout branch_name      //切换到指定分支

 git branch -d branch_name      //删除指定分支

 git branch                                     //列出该版本库管理的所有分支,正在编译的分支前有*

~/test/gittest$ git checkout -b test_branch
Switched to a new branch 'test_branch'          //创建新的分支并切换

~/test/gittest$ git branch
master
* test_branch
~/test/gittest$ ls
test.txt                                        //在master的基础上建立的分支,所以它包含test.txt文件
~/test/gittest$ touch test1.txt                 //新建文件
~/test/gittest$ git add test1.txt               //添加到暂存区
~/test/gittest$ git commit test1.txt -m "test1" //添加到版本库
[test_branch f76f313] test1                     //提交添加到test_branch分支

~/test/gittest$ git checkout master
Switched to branch 'master'                     //切换到主分支
~/test/gittest$ ls
test.txt                                        //看不到test1.txt文件
~/test/gittest$ git checkout test_branch
Switched to branch 'test_branch'                //切换到测试分支
~/test/gittest$ ls
test1.txt  test.txt                             //目录下有新添加的文件
2.8 撤销修改

当我们对某个文件进行修改,觉得又不合适的时候,就要撤销修改了。撤销修改按时间点分为3种。

第一种:当文件修改后,没有使用git add提交

git checkout  --filename  //对某个文件,取消至上次git add之后的所有在工作区的修改

git checkout  -- .                //当前目录中所有文件执行撤销动作

第二种:当文件已经使用git add提交到暂存区后

git reset HEAD filename  //将文件从暂存区撤销掉,重新放回工作区

git checkout -- filename

第三种:使用git commit将修改提交到版本库

git reset --hard HEAD^    //将工作区返回到上次提交的状态,即版本回退

//-------第一种情况-------
~/test/gittest$ vim test.txt
version1
version2
version3
version4 //新增的行
~/test/gittest$ git checkout -- test.txt
~/test/gittest$ vim test.txt
version1
version2
version3

//-------第二种情况-------
~/test/gittest$ vim test.txt
version1
version2
version3
version4 //新增的行
~/test/gittest$ git add test.txt
~/test/gittest$ git reset HEAD test.txt
Unstaged changes after reset:
M       test.txt
~/test/gittest$ git checkout -- test.txt
~/test/gittest$ vim test.txt
version1
version2
version3

//-------第三种情况-------
~/test/gittest$ vim test.txt
version1
version2
version3
version4 //新增的行
~/test/gittest$ git add test.txt
~/test/gittest$ git commit  test.txt -m "version4"
[master 7b73b4f] version4
~/test/gittest$ git reset --hard HEAD^
HEAD is now at f61699b version3
~/test/gittest$ vim test.txt
version1
version2
version3

2.9创建标签

标签是用来修饰分支的每次提交

git tag name     //将当前分支的当前版本命令为name

git tag                 //查看当前分支当前版本的tag信息

git show name //查看某个tag的详细信息

2.10 查看区别

git diff                                     是查看工作区的文件从上次git add之后的修改

git diff --cached                    查看已经提交到暂存区的文件和它上次commit时候的区别

git diff HEAD                         显示工作区和版本库之间的区别

git diff HEAD   filename      显示工作区和版本库之间的某个文件的区别
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  git