您的位置:首页 > 其它

git常用指令整理

2016-10-25 23:15 281 查看
工作区、版本库和暂存区

工作区:就是你在电脑里能看到的目录,比如我的learngit文件夹就是一个工作区。

版本库:工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库。

暂存区:Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD。

我们把文件往Git版本库里添加的时候,是分两步执行的:

第一步是用git add把文件添加进去,实际上就是把文件修改添加到暂存区;

第二步是用git commit提交更改,实际上就是把暂存区的所有内容提交到当前分支。

因为我们创建Git版本库时,Git自动为我们创建了唯一一个master分支,所以,现在git commit就是往master分支上提交更改。

*简单理解:需要提交的文件修改通通放到暂存区,然后,一次性提交暂存区的所有修改。*

常用查看指令

git status 查看仓库当前的状态

git diff 文件名查看对文件做什么修改

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

git log –pretty=oneline 简化日志输出的显示信息,commit id很长

git reflog 记录你的每一次命令,最先显示的是这个命令执行之后的版本的版本号的前七位,这样就算你清屏了或者重启了,也能找到某个版本的版本号,就可以轻松回退到那个版本

git branch 查看当前所在的分支。git branch命令会列出所有分支,当前分支前面会标一个*号

git log –graph –pretty=oneline –abbrev-commit用带参数的git log可以看到分支的合并情况。用git log –graph命令可以看到分支合并图

git remote 查看远程库的信息

git remote -v 显示更为详细的信息

撤销修改和版本回退

git checkout – 文件名把没暂存(即没add)的干掉,或者说,丢弃工作区,回到到暂存状态

git reset HEAD 文件名把暂存的状态取消,工作区内容不变,但状态变为“未暂存”。

简单来说,没有add过的修改,只需要git checkout – 文件名即可撤销;add 过的修改,先git reset HEAD 文件名变成没add 过的修改,再git checkout – 文件名撤销。操作示例可以看这张图

git reset –hard HEAD^ 会回退到上一个版本

git reset –hard 某版本号前几位通过命令行上的历史信息(假如你没清屏的话),找到某版本 的版本号回到指定版本。不一定要全部的版本号,就像这个命令的例子,只要前面的约7、8位这样就可以。

常用修改指令

git add readme.txt添加,但是不提交

git commit -m “提交描述”提交,只有add后提交才有效。”改文件->add文件->再改->提交”,则第二次修改无效,不会被提交,只会成功提交第一次的修改。

*分支管理*

创建和合并分支

git checkout -b dev创建一个新的分支:dev,并且会切换到dev分支。所以这条命令有两个作用。git checkout命令加上-b参数表示创建并切换,相当于以下两条命令:git branch dev和git checkout dev

git branch dev,新建分支是新建指针,指向当前commit

git checkout dev切换到dev分支

git checkout masterdev分支的工作完成,我们就可以切换回master分支(此时在dev分支的修改在master上是看不到的)

git merge dev 这是在master分支上执行的命令,作用是:把dev分支上的工作成果合并到master分支上

git branch -d dev 删除已合并的分支。删除分支就是删除指针

git branch -D devGit友情提醒,dev分支还没有被合并,如果删除,将丢失掉修改,如果要强行删除,需要使用git branch -D dev命令

git rebase master变基。在当前分支(非master)下执行该命令,则相当于把当前分支和mater分支合并,和merge操作类似,但提交历史不同,rebase操作的log更干净。具体可参考Git 分支 - 变基

解决冲突

假设在master分支和feature1分支对同一文件做了修改

git merge feature1 在master分支上执行该命令,与feature1分支合并。这种情况下,Git无法执行“快速合并”,只能试图把各自的修改合并起来,但这种合并就可能会有冲突,果然冲突了!Git告诉我们,readme.txt文件存在冲突,必须手动解决冲突后再提交。git status也可以告诉我们冲突的文件

合并分支时,如果可能,Git会用Fast forward模式,但这种模式下,删除分支后,会丢掉分支信息。如果要强制禁用Fast forward模式,Git就会在merge时生成一个新的commit,这样,从分支历史上就可以看出分支信息

git merge –no-ff -m “merge with with no-ff” dev准备合并dev分支,注意–no-ff参数表示禁用Fast forward,因为本次合并要创建一个新的commit,所以加上-m参数,把commit描述写进去

bug分支

Git还提供了一个stash功能,可以把当前工作现场“储藏”起来,等以后恢复现场后继续工作

git stash保存工作现场

git stash list 查看工作现场

git stash apply 恢复工作现场,但是恢复后,stash内容并不删除,有多个工作现场时可以git stash apply stash@{0}恢复特定的现场

git stash drop删除stash的内容

git stash pop恢复的同时也把stas内容删除了
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  git