本博客是本人亲身测试,得出的结果在学习中参考了如下博客,非常感谢各位博主的分享
http://blog.csdn.net/hudashi/article/details/7668798 git 分支合并与撤销
http://zengrong.net/post/1746.htm Git查看、删除、重命名远程分支和tag
https://git-scm.com/book/zh/v1/Git-%E5%88%86%E6%94%AF-%E5%88%86%E6%94%AF%E7%9A%84%E8%A1%8D%E5%90%88 分支的衍合(只是了解并未测试,他与merge类似,原理不一样)
http://www.cnblogs.com/sawyerzhu/p/3578268.html 常用命令汇总
简易的命令行入门教程:
git --version 查看当前版本状态
git --clone https://github.com/zce/weapp-demo 这是复制一份到当前文件夹,新文件的名字就是默认的在网络上项目的名
Git 全局设置:
//用户
git config --global user.name "lizhanqi"
//用户邮箱
git config --global user.email "lizhanqihd@163.com"
//查看所有设置
git config --list
//设置的帮助
git config --hlep
克隆仓库 – git clone复制一份项目到本地
git --clone https://github.com/zce/weapp-demo xxxx --depth 1 这个是在复制一份xxx是自己规定下载的文件名,depth是版本历史记录,可以追溯版本历史记录,depth 1是最近一次的提交.
创建 git 仓库:
mkdir nine 创建文件夹
cd nine 进入文件夹
git init 初始化一个本地的版本库
touch README.md 创建了一个 README.md文件
git add README.md 跟踪改动过的指定文件,如果跟踪所有文件, 使用 git add .
git commit -m "first commit" 提交本地版本库,以及备注提交原因
git remote add origin https://git.oschina.net/xxx.git
(//连接远程项目重点:如果这里执行完报错,
提示出错信息:fatal: remote origin already exists.
就是说明你之前已经指定过了该项目的远程位置,如果不知道该位置,可以移除之前的远程位置,
解决办法如下:
1、先输入$ git remote rm origin
2、再输入$ git remote add origin git@github.com:djqiang/gitdemo.git 就不会报错了!
3、如果输入$ git remote rm origin 还是报错的话,error: Could not remove config section 'remote.origin'. 我们需要修改gitconfig文件的内容
4、找到你的github的安装路径,我的是C:UsersASUSAppDataLocalGitHubPortableGit_ca477551eeb4aea0e4ae9fcd3358bd96720bb5c8etc
5、找到一个名为gitconfig的文件,打开它把里面的[remote "origin"]那一行删掉就好了!)
上传到服务器
git push -u origin master 推送到指定远程分支(这里可以是分支如果分支不存在自动创建)//将本地版本库更新到网络版本库
从服务器上拉取代码
git pull origin master 拉到指定远程分支(这里可以是分支如果分支不存在自动创建)//将本地版本库更新到网络版本库
查看提交到本地版本库历史
日志
git log 查看提交历史
git log -p <filename> 查看指定文件提交历史
git blame <filename> 以类表形式查看指定文件提交历史
git log --pretty=format:"%h %s" --graph 查看日志显示提交备注
分支:
git branch -a 查看所有分支包括远程端的
git branch 查看所有本地分支
git branch -r 查看服务器端分支情况
git branch <branchName> 创建一个名为branchName的新分支
git branch -d <branchName> 删除一个名为branchName的本地分支
git branch -m <oldBranchName> <newBranchName> 将名为oldBranchName的分支名称修改为newBranchName
git branch -m <newBranchName> 将正在工作分支名称修改为newBranchName
git checkout <branch/tagname> 切换到指定分支或者标签
git checkout <localBranchName> 切换到名为localBranchName的本地分支上
git checkout <remoteBranchName> 切换到名为remoteBranchName的远程分支上,此时未新建分支,而是处于一个名为no branch的临时分支上,还需要使用git branch -b 来创建一个新分支并将该临时分支挂接到新分支上
git checkout -b <branchName> 创建一个名为branchName的新分支,并切换到该分支上
git merge <branchName> 将名为branchName的分支合并到当前所处在的分支上
git push --delete origin <branchName> 删除远程分支
标签:
git tag 查看所有本地标签
git tag <tagname> 基于最新提交创建标签
git tag -d <tagname> 删除指定的标签
合并命命令
git merge命令示例:
$ git merge branchname 这个命令把分支"branchname"合并到了当前分支里面。
撤销操作
git reset 是常用的版本回退,版本回退到之前版本,版本轨迹里会擦除后面的提交
git revert 也是版本回退,但是是你的仓库内容回退到了之前版本内容,但是版本号没有减,还是增加了一个版本,这个版本就是你回退的操作。
例如:你提交了 v1--->v2--->v3, 现在想回退的v2版本
如果git reset 则版本轨迹变为 v1--->v2
如果git reset 则版本轨迹变为 v1--->v2
如果git revert 则版本轨迹变为 v1--->v2--->v3--->v4 (v4版本内容和v2完全相同)
reset命令有3种方式:
1:git reset --mixed:此为默认方式,不带任何参数的git reset,即时这种方式,它回退到某个版本,只保留源码,回退commit和index信息(这里说的commit就是提交后的版本号和日志,而index是add 后的标记),使用这种方式需要从新使用 add . 后在commit
2:git reset --soft:回退到某个版本,只回退了commit的信息,不会恢复到index file一级。如果还要提交,直接commit即可
1:git reset --mixed:此为默认方式,不带任何参数的git reset,即时这种方式,它回退到某个版本,只保留源码,回退commit和index信息(这里说的commit就是提交后的版本号和日志,而index是add 后的标记),使用这种方式需要从新使用 add . 后在commit
2:git reset --soft:回退到某个版本,只回退了commit的信息,不会恢复到index file一级。如果还要提交,直接commit即可
3:git reset --hard:彻底回退到某个版本,本地的源码也会变为上一个版本的内容
撤销上次的合并
git reset --hard HEAD
或者其他的也可以回退
首先得到你要回退到的版本号:(查看所有提交版本的索引),这里也可以使用 git log 查看提交日志中的版本号全部,或者使用开头一部分,git自己会去寻找(4或5位就差不多,如果有重复的提交失败,可多些几位数)
git reflog (这个是获取每次操作的记录) 这里的操作记录版本号是commit 的版本号一部分
执行回退
git reset --hard yourCommitNum
测试中问题:
1. 打了新分支,新分支中修改了内容,
没有commit就切换到其他分支或者主分支,
那么切换的分支中也有上次的内容,
解决方案:
这就需要我们,修改完分支内容之后commit完了再切换分支,这样分支之间就有了区别
2.远程删除分支后,本地的Git分支-a依然能看到的解决办法。(这个标题点击后进入原文)
解决方案:
使用命令
git remote show origin
,可以查看远程地址,远程分支,还有本地分支与之相对应关系等信息。此时我们可以看到那些远程仓库已经不存在的分支,根据提示,使用
git remote prune origin
命令:好了到此再次查询就ok了
解决后记:一下仅供了解
烟花易冷心易碎 2016/10/17 星期一 15:45:53
@Ed 我看其他的地方说的,prune是删除没有对应的版本分支,fetch 是获取分支的最新版本,与pull类似,只是一个会merge一个不会,我目前看到的结果是这样的不知道对不对,有错误希望指正
E 2016/10/17 星期一 15:48:18
@烟花易冷心易碎 哦我说的不是这个。之前的 git fetch origin 没有效果,有点奇怪。看过文档 git fetch --prune origin 应该和 git remote prune origin 达到一样的效果,因为 git fetch 缺省是指增加不删除
E 2016/10/17 星期一 15:48:36
你说的那个是fetch 和 pull的区别,是没有错的
Git fetch和git pull的区别
血刺青衣庤佺 | 浏览 8738 次 2014-12-30 13:46
2014-12-30 13:51
最佳答案
Git中从远程的分支获取最新的版本到本地有这样2个命令:
1. git fetch:相当于是从远程获取最新版本到本地,不会自动merge
git fetch origin master
git log -p master..origin/master
git merge origin/master
以上命令的含义:
首先从远程的origin的master主分支下载最新的版本到origin/master分支上
然后比较本地的master分支和origin/master分支的差别
最后进行合并
上述过程其实可以用以下更清晰的方式来进行:
git fetch origin master:tmp
git diff tmp
git merge tmp
从远程获取最新的版本到本地的test分支上
之后再进行比较合并
2. git pull:相当于是从远程获取最新版本并merge到本地
git pull origin master
上述命令其实相当于git fetch 和 git merge
在实际使用中,git fetch更安全一些
因为在merge前,我们可以查看更新情况,然后再决定是否合并
结束