您的位置:首页 > 其它

Git常用命令总结

2017-06-29 20:32 295 查看
Git是一种分布式版本控制系统,既然提到了分布式,那肯定也有集中式版本控制系统了,常见的集中式版本控制系统有:CVS和SVN。

对于集中式版本控制系统,版本库是放在中央服务器的,如果我们要对版本库中的文件进行操作,必须首先联网,取得服务器中的最新版本,然后在本地电脑操作完毕之后,再将自己的操作内容推到服务器上。中央服务器类似于图书馆,当小明借了图书A(图书A唯一)后,小红必须等到小明归还图书A后,才能借这本书(是不是感觉像编程语言中的同步模式。。)。

对于分布式版本控制系统,并没有中央服务器,在每个人的电脑上都可以有一份完整的版本库,因此,用户并不需要联网,并且彼此的操作是独立的。分布式版本控制系统通常也有一台充当“中央服务器”的电脑,但这个服务器的作用仅仅是用来方便“交换”大家的修改,没有它大家也一样干活,只是交换修改不方便而已。

在总结Git的常用命令之前,首先在github上创建一个仓库,用来测试Git的常用命令。点击进入仓库

本地一个仓库用来对应于github上的仓库。

mkdir git-practice //首先在本地创建一个目录

cd git-practice // 进入创建的目录中

git init //这个命令主要是将当前目录变为Git可以管理的仓库,在当前目录中会生成一个.git目录,这个目录是用来跟踪管理仓库的,非常重要,不要乱改。。

echo "# git-practice" >> README.md //创建一个文件

git add README.md //将创建的文件添加到本地仓库中(注:其实这个命令是将所做的修改提交到暂存区中,暂存区概念之后会说)

git commit -m "first commit" //将暂存区中的内容提交到仓库中,-m 可以认为对于提交的内容添加一个注释

git remote add origin git@github.com:jiangxr/git-practice.git//用于关联本地仓库和github的远程仓库,让我们本地的修改能够提交到远程仓库中

git push origin master //将本的修改内容提交到上一个命令关联的远程仓库的master分支上


上面介绍的是最基本的一般性操作,能够将我们修改的内容提交到远程的仓库中。。

工作区和暂存区



Git和SVN的一个重要区别是,Git中有暂存区的概念。我们在电脑上直接可以操作的目录就是工作区。而其中的隐藏目录.git其实就相当于版本库。Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD。

常用的命令git add其实就是将所做的修改提交到暂存区中,而git commit其实是将暂存区的所有内容提交到当前分支。上面的一幅图需要理解透彻,大部分命令都是基于这个结构来实现不同的操作。

Git常用命令

添加远程仓库(git remote add)

git remote add origin git@github.com:jiangxr/git-practice.git

从远程仓库克隆(git clone)

git clone git@github.com:jiangxr/git-practice.git

显示工作树的状态(git status)



在图片的显示中,bb.txt文件新创建的,已经使用git add命令提交到暂存区中;README.md文件是之前已经有过提交的记录,现在仅仅进行了修改,没有其他操作;aa.txt文件新创建了,没有其他的任何操作。显示了三种文件的不同状态。

显示最近到最远的提交日志(git log)



回退版本(git reset [–hard|soft|mixed|merge|keep] [< commit > 或 HEAD])

–hard:

替换引用的指向.引用指向新的提交ID;

替换暂存区.替换后,暂存区的内容和引用指向的目录树一致;

替换工作区.替换后,工作区的内容变得和暂存区一致,也和HEAD所指向的目录树内容相同.

–soft:

替换引用的指向.引用指向新的提交ID,即只更改引用的指向,不改变暂存区和工作区.

–mixed:

替换引用的指向.引用指向新的提交ID;

替换暂存区.替换后,暂存区的内容和引用指向的目录树一致;

即更改引用的指向及重置暂存区,但是工作区不变.

取消工作区的修改(git checkout – filename)

这个命令的实质是用暂存区的内容覆盖工作区对应文件的内容。

隐藏当前工作现场(git stash)

如果现在正在branch1分支上进行作业,但是作业进行到一半,有一个急需的bug需要修复,但是完成一半的作业还不能进行提交,可以使用git stash命令将完成一半的作业隐藏起来,然后再创建一个分支修复bug。

git stash list // 显示隐藏的修改内容

git stash pop //恢复隐藏的修改内容,stash内容删除

git stash apply //回复隐藏的内容,stash内容不进行删除

标签操作(git tag)

git tag < name >  //新建一个标签,可以指定commit id。
git tag //查看所有标签信息
git tag push < tagname> //推送一个本地标签
git tag push --tags //推送本地所有未推送的标签
git tag push origin < tagname> //推送标签到远程
git tag -d < tagname> //删除本地的一个标签
git tag push :refs/tags/< tagname> //删除远程的标签


显示尚未暂存的目录更新的内容(git diff)

其实就是比较工作目录和暂存区的区别

git diff --cached // 查看已经暂存起来的文件和上次提交的版本之间的差异
git diff --cached filename // 查看某个暂存的文件和上一次提交的版本之间的差异
git diff 988fasf fadafa //查看两个版本库之间的区别


git rebase

git rebase用于把一个分支的修改合并到当前分支,我们常用的合并分支的命令是git merge。

下面借鉴网上的几张图对比git rebase和git merge之间的区别

如果有两个分支origin(大家把这个理解为分支)和mywork,存在如下的提交情况:



origin分支和mywork分支在C2分支分开了,现在想将origin的C3和C4两次提交合并到mywork分
affd
支上

git merge的合并情况:



git rebase的合并情况:



git merge情况是将下拉的内容和你的修改合并,然后创建一个合并的提交;而git rebase是将mywork分支的每次提交取消掉,并把他们保存为临时的补丁,然后将mywork分支更新为最新的origin分支,然后再应用保存的补丁到mywork分支。

git rebase冲突解决

git add * //解决冲突后,更新index
git rebase --continue //继续rebase操作

git rebase --abort  //这个命令用来终止rebase的行动,将rebase的分支跟新为rebase之前的状态。


上面主要简要的介绍一些比较常用的命令,算是平常用的比较多的了
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息