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的隐藏目录
#git status //可以用来查看到Git中文件的修改状态:新建文件,删除文件,文件内容改变,修改是否提交到暂存区,修改是否提交到分支。
#git add 文件名
#git commit filename -m “string” //-m选项是给这次提交添加注释信息,方便以后查看。在工作区的任何改变都必须先使用git add 再使用git commit提交,这样修改才会被版本库记录,否则你的修改信息版本库不知道。
#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 //查看分支中所有版本变化信息
2.7 创建分支
git checkout -b branch_name //创建分支并切换,它的分支的创建是基于当前分支
git branch branch_name //创建一个分支
git checkout branch_name //切换到指定分支
git branch -d branch_name //删除指定分支
git branch //列出该版本库管理的所有分支,正在编译的分支前有*
当我们对某个文件进行修改,觉得又不合适的时候,就要撤销修改了。撤销修改按时间点分为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^ //将工作区返回到上次提交的状态,即版本回退
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概念介绍
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 显示工作区和版本库之间的某个文件的区别