参考
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
搞定。
网友评论