git常用命令

以下命令都只本地版本库(commit之后)
git add ..
git comit -m "注释"
git log --pretty=oneline  查看版本提交历史
git log --graph --pretty=oneline --abbrev-commit  查看分支合并情况
git reset --hard HEAD^  回退到上个版本 HEAD当前版本 HEAD^^上上个版本 
git reset --hard 3628164   3628164 commit id 使用id号直接回退
git reflog 记录每一次的命令
git status 查看状态

管理修改 git管理的是修改不是文件
git diff HEAD -- readme.txt命令可以查看工作区和版本库里面最新版本的区别
git diff
这里分为两种情况,一种是当暂存区中有文件时,另一种是暂存区中没有文件。
(1)当暂存区中没有文件时,git diff比较的是,工作区中的文件与上次提交到版本库中的文件。
(2)当暂存区中有文件时,git diff则比较的是,当前工作区中的文件与暂存区中的文件。

撤销工作区的修改
git checkout -- file可以丢弃工作区的修改
命令git checkout -- readme.txt意思就是,把readme.txt文件在工作区的修改全部撤销,这里有两种情况:
一种是readme.txt自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;
一种是readme.txt已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态

撤销暂存区的修改
git reset HEAD file可以把暂存区的修改撤销掉(unstage),重新放回工作区
假设你不但改错了东西,还从暂存区提交到了版本库,怎么办呢?还记得版本回退一节吗?可以回退到上一个版本。不过,这是有条件的,就是你还没有把自己的本地版本库推送到远程

场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout -- file。
场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD file,就回到了场景1,第二步按场景1操作。
场景3:已经提交了不合适的修改到版本库时,想要撤销本次提交,参考版本回退一节,不过前提是没有推送到远程库

删除,也是一个修改操作 
add commit之后,工作区删了文件,有两种办法
一是确实要从版本库中删除该文件,那就用命令git rm删掉,并且git commit
另一种情况是删错了,因为版本库里还有呢,所以可以很轻松地把误删的文件恢复到最新版本,git checkout -- test.txt

添加到远程库
1 git remote add origin git@github.com:michaelliao/learngit.git
远程库的名字:origin  michaelliao:GitHub账户名
2 git push -u origin master  本地库的所有内容推送到远程库上
把本地库的内容推送到远程,用git push命令,实际上是把当前分支master推送到远程
由于远程库是空的,我们第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。
3 git push origin master  从现在起,只要本地作了提交,就可以通过命令

分支管理
git branch dev 创建分支
git checkout dev 切换分支
git checkout -b dev  创建并且切换分支
git branch 查看当前分支
需要把dev提交的内容并到master主分支上
1 git checkout master
2 git merge dev  命令用于合并指定分支到当前分支
git branch -d dev 删除分支
Fast forward模式
git merge dev 使用Fast forward模式,但这种模式下,删除分支后,会丢掉分支信息。
git merge --no-ff -m "merge with no-ff" dev 强制禁用Fast forward模式,Git就会在merge时生成一个新的commit,这样,从分支历史上就可以看出分支信息。
合并分支时,加上--no-ff参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并,而fast forward合并就看不出来曾经做过合并。

分支冲突
git log --graph --pretty=oneline --abbrev-commit  查看分支合并情况
当Git无法自动合并分支时,就必须首先解决冲突。解决冲突后,再提交,合并完成。
用git log --graph命令可以看到分支合并图
merge之后出现冲突,说明当前的工作区有修改,只要将当前工作区的修改删掉即可,最后add commit

bug分支
git stash  可以把当前工作现场“储藏”起来,等以后恢复现场后继续工作--工作区
git stash list 查看是否有工作现场
Git把stash内容存在某个地方了,但是需要恢复一下,有两个办法:
一是用git stash apply恢复,但是恢复后,stash内容并不删除,你需要用git stash drop来删除;
另一种方式是用git stash pop,恢复的同时把stash内容也删了
修复bug时,我们会通过创建新的bug分支进行修复,然后合并,最后删除;
当手头工作没有完成时,先把工作现场git stash一下,然后去修复bug,修复后,再git stash pop,回到工作现场。

Feature分支
开发一个新feature,最好新建一个分支;
如果要丢弃一个没有被合并过的分支,可以通过git branch -D <name>强行删除。
    
多人协作  
git remote 查看远程库的信息
git remote -v 查看远程库的详细信息,可以看到抓取和推送的origin的地址
git push origin master  推送分支,就是把该分支上的所有本地提交推送到远程库
git checkout -b dev origin/dev  创建远程origin的dev分支到本地
git pull 最新的提交从origin/dev抓下来
git branch --set-upstream dev origin/dev  指定本地dev分支与远程origin/dev分支的链接
    
因此,多人协作的工作模式通常是这样:
1 首先,可以试图用git push origin branch-name推送自己的修改;
2 如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并;
3 如果合并有冲突,则解决冲突,并在本地提交;
4 没有冲突或者解决掉冲突后,再用git push origin branch-name推送就能成功!
如果git pull提示“no tracking information”,则说明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream branch-name origin/branch-name。
  
小结
查看远程库信息,使用git remote -v;
本地新建的分支如果不推送到远程,对其他人就是不可见的;
从本地推送分支,使用git push origin branch-name,如果推送失败,先用git pull抓取远程的新提交;
在本地创建和远程分支对应的分支,使用git checkout -b branch-name origin/branch-name,本地和远程分支的名称最好一致;
建立本地分支和远程分支的关联,使用git branch --set-upstream branch-name origin/branch-name;
从远程抓取分支,使用git pull,如果有冲突,要先处理冲突。
    
标签管理 默认标签是打在最新提交的commit上的
git tag v1.0 打新的标签
git tag 查看所有标签
git tag v0.9 6224937 给commit id是6224937打标签
git show v0.9 查看标签信息
git tag -a v0.1 -m "version 0.1 released" 3628164 -a指定标签名,-m指定说明文字
git show v0.1  可以看到说明文字
git tag -d v0.1 删除标签
git push origin v1.0  推送某个标签到远程
git push origin --tags 一次性推送全部尚未推送到远程的本地标签
如果标签已经推送到远程,要删除远程标签
1 本地删除 git tag -d v0.9
2 从远程删除,但是格式如下:git push origin :refs/tags/v0.9

git add . :他会监控工作区的状态树,使用它会把工作时的所有变化提交到暂存区,包括文件内容修改(modified)以及新文件(new),但不包括被删除的文件。
git add -u :他仅监控已经被add的文件(即tracked file),他会将被修改的文件提交到暂存区。add -u 不会提交新文件(untracked file)。(git add --update的缩写)
git add -A :是上面两个功能的合集(git add --all的缩写)

:w   保存文件但不退出vi
:w file 将修改另外保存到file中,不退出vi
:w!   强制保存,不推出vi
:wq  保存文件并退出vi
:wq! 强制保存文件,并退出vi
q:  不保存文件,退出vi
:q! 不保存文件,强制退出vi
:e! 放弃所有修改,从上次保存文件开始再编辑

git pull命令的作用是,取回远程主机某个分支的更新,再与本地的指定分支合并。它的完整格式稍稍有点复杂。

$ git pull <远程主机名> <远程分支名>:<本地分支名>
比如,取回origin主机的next分支,与本地的master分支合并,需要写成下面这样。

$ git pull origin next:master
如果远程分支是与当前分支合并,则冒号后面的部分可以省略。

$ git pull origin next


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值