美文网首页
git 知识点

git 知识点

作者: Rangethan | 来源:发表于2016-09-11 20:32 被阅读82次

参考
https://github.com/geeeeeeeeek/git-recipes/wiki

git push [远程仓库名] [本地分支名] : [远程分支名]

push本地develop分支到远程origin仓库的dev分支。

git push origin develop:dev

如果终端所在的当前分支就是要push到远程仓库的本地分支的话,一般省略掉本地分支名,直接用以下命令,将本地当前分支push到远程的dev分支上去。

git push origin dev

如果想指定将本地分支上的某个commit push到远程分支上的话,比如将最新一次commit push到远程去,可以用:

git push origin HEAD:dev。

以此类推,push 最新一次commit的前一次可以用:

git push origin  HEAD^:dev

删除掉远程dev分支可用以下命令,该命令可以理解为将本地的空push到远程分支上,即,删除远程分支。

git push origin : dev 

push后面加参数-u:

git push -u origin develop : dev

加上该参数,除了push之外,还做了一件事(由-u参数控制):
Branch develop set up to track remote branch dev from origin
即,创建了track。
这样以后,就可以直接使用“git pull”了,该命令会自动pull远程的dev分支到本地的develop分支上。
若在push时不加-u参数,则在“git pull”时,将会提示:
There is no tracking information for the current branch. Please specify which branch you want to merge with.
也就是,在使用“git pull”时,需要明确指明是从哪个远程分支上去拉:

git pull origin dev

也可以set tracking information for this branch:

git branch --set-upstream-to=origin/dev develop

push后面加参数-f:

git push -f origin HEAD:dev

-f参数即force之意,执行强制push,这样会冲掉远程已提交的版本。

git remote add <shortname> <url>

给本地仓库添加一个远程仓库,<shortname> 给远程仓库起一个简洁的名字,默认用origin这个名字来代表远程仓库,<url>远程仓库的地址。
like this:

git remote add origin https://github.com/Zouyiran/learngit

git remote 列出当前这个本地仓库下所有的远程仓库的名字,比如如果只有origin,那就会显示origin这个远程仓库,如果想看仓库具体的url地址的话,用如下命令:

git remote -v

git checkout -b [本地跟踪分支名] [远程仓库名]/[远程分支名]

checkout是与当前工作区有关的操作命令,用于更新工作区

git checkout -b develop origin/dev

以上命令做了两件事:
首先,创建(由-b参数控制)本地分支track(跟踪)远程分支,Branch develop set up to track remote branch dev from origin.
其次,切换(checkout)到该本地分支上,Switched to a new branch 'develop'.

git checkout -b develop 

以上命令,单纯的在本地创建develop分支,并切换到这个分支上去。

git checkout develop

以上命令,针对本地已经存在develop分支的情况,直接将工作区的内容切为develop分支。

git checkout HEAD

以上命令,将工作区的内容切为当前分支的最新commit。
这个操作适用于,基于最新的commit,本地工作区又做了一些更改,且想放弃这些更改,回到最新commit的状态。

以此类推,

git checkout HEAD^

以上命令,将工作区的内容切为当前分支的最新commit的上一次commit。

git checkout -- <某些文件>

以上命令,将工作区中某些文件的修改抛弃掉,让这些文件与暂存区或者版本库保持一致。
其中,如果暂存区有,就回到与暂存区一致的状态,否则,回到到版本库中最新的commit一致的状态。

git reset <commit version>

看这里

reset是与版本库有关的操作命令。

它会将版本库的HEAD指针定位到某个commit版本上。
比如:HEAD^ 前一个commit,HEAD^^ 前前一个commit,以此类推...

重点介绍三个参数:

  • --soft 只有版本库变了,暂存区和工作区都不会被改变。
  • --mixed (默认)版本库和暂存区变了,工作区不会被改变。
  • --hard 版本库、暂存区和工作目录都被改变,都变成定位到的那个commit版本了。

我一般用默认和--hard这两个比较多。

git revert <commit version>

git revert 比 git reset 要安全,同样是针对本地版本库的操作,它会将撤销commit的操作作为新的commit,添加到之前最新commit之后。

所以,可以这样去理解:

  • git revert:把撤销已有的commit作为新的commit。
  • git reset:纯粹的撤销已有的commit。

git rebase

看这里

理解rebase的关键点在于:
rebase会为当前分支上每一个提交创建一个新的提交,重写了项目历史。

看图说话:

master和feature分支 在feature分支上reabase master分支

可以看出,通过rebase命令,原feature分支上的三次提交都被重新改写了
(图中,通过在每个commit点中间画※号来表示提交的内容跟原来不一样)。
去看diff的话,就可以发现,rebase之后的diff跟rebase之前的同一次commit的diff不一样了。
这很好理解,比如就拿feature分支的第一次commit来说,rebase之前的这次commit是基于第二个白色点的,而rebase之后的这次commit是基于第二个蓝色点的。所以diff当然不一样了。

合并多个commit

看这里
git rebase -i xxxx

修改历史commit信息

修改最近一次commit信息,很简单:

git commit --amend

但是如果要修改历史commit中的某一次提交信息怎么操作?
比如,我想要修改倒数第四次commit中的提交信息。
首先,

git rebase -i HEAD~4

以上命令执行之后,会出现:

pick 762eb478 id: xxx cause: xxx solution: xxx 
pick ba5a91a3 id: xxx  cause: xxx  solution: xxx 
pick 82911374 id: xxx  cause: xxx  solution: xxx 
pick b06e264b id: xxx  cause: xxx  solution: xxx 

这里,我要修改倒数第四次的commit信息,
因此将以上出现信息的第一行中的pick改为edit。然后保存退出。
这时,通过git log,可以发现最后一次commit已经变成之前的倒数第四个了。
再使用:

git commit --amend

来对commit信息进行修改。
修改完成之后,怎么回到当初呢?
使用:

git rebase --continue

搞定。

相关文章

网友评论

      本文标题:git 知识点

      本文链接:https://www.haomeiwen.com/subject/kzguettx.html