1、先在本地分支git rebase -i来合并提交
可参考此链接
上面的提交顺序是前面的先于后面的提交(即第一行的提交是第二行的父提交)
将需要压缩的提交pick改为s后esc、wq后会跳出下面的修改,提交信息后保存退出
上面可以看到我将两条commit合并成了一条commit
2、切换回master分支git pull拿下最新的提交
4、git pull再git push
git常用指令
git branch branch_name 创建分支
git branch 查看本地分支
git branch -a 查看本地和远程分支
git checkout branch_name 切换分支
git checkout – file_name 撤销修改
git checkout -b 新建并切换到此分支
git merge branch_name 合并指定分支到当前分支
git branch -d branch_name 删除本地分支
添加链接描述
30分钟教你轻松使用Git做代码管理
1、将指定本地分支推送到指定远程分支
git push < 远程主机名 > <本地分支名 >: <远程分支名>
git push origin master:refs/for/master
git push origin HEAD: refs/for/master
2、 git push origin master
3、 git push origin :refs/for/master == git push origin --delete master
4、git push origin
5、git push
添加链接描述
Git分支管理技巧-使用rebase让你的分支笔直生长
Rebase
廖雪峰的git教程
git rebase -i
添加链接描述
Git 基础 - 撤消操作
git reset HEAD是从暂存区到工作区的撤销(详细的请看后面的链接)
git checkout是从本地版本库到工作区的撤销
Git 基础 - 远程仓库的使用
从远程仓库拉取到本地:
git clone
git fetch + git merge或git pull
git fetch 命令只会将数据下载到你的本地仓库——它并不会自动合并或修改你当前的工作。 当准备好时你必须手动将其合并入你的工作。
推送到远程仓库:
git push < remote > < branch >
git push origin master
只有当你有所克隆服务器的写入权限,并且之前没有人推送过时,这条命令才能生效。 不然的话要先git pull合并之后使得远程仓库的最新commit id是本地的父系commid id。
如果当前分支跟踪了远程仓库的某个分支则直接git pull后可默认推到到跟踪的分支。
git clone复制远程仓库的所有文件及其提交历史(commit id),会在当前目录新建一个目录(目录名默认为url的最后一个目录名或者自定义目录名),目录有一个隐藏目录.git,除了这个.git外的这个目录下所有文件都是工作区的内容。也就是git clone之后工作区有远程仓库的所有内容;
我们可以通过-b 来指定要克隆的分支名,比如
git clone -b master2 ../server
表示克隆名为master2的这个分支,如果省略-b 表示克隆master分支。
git fetch是将远程仓库最新内容拉取到本地版本库,实质上是改变FETCH_HEAD,.git目录下有一个FETCH_HEAD的文件,每一行指向某个远程分支的最新提交。git fetch后需要git merge后才会出现在工作区;
git pull等同于git fetch和git merge直接将远程仓库的内容拉取到本地工作区,不过前提是要先合并,自动合并不了的话需要手动合并冲突,过程是:git satsh、git pull、 git stash pop、 git diff。(.git里除了stage/index和local repository外还有一个stash栈区)
git clone、git pull和git fetch的用法和区别
untracked:工作区新建的文件,本地仓库没有记录,没add
unstaged(changes not staged for committed):工作区修改过的内容没add
changes to be committed:add进暂存区的文件没有commit
暂存区的文件可以git commit提交到本地仓库或者git reset HEAD < file >让文件变成unstaged状态。
本地工作区的文件可以git push到远程仓库或者git checkout – < file >将版本库中的文件检出到工作区discard changes(放弃修改)
git reset本质是改变HEAD和当前branch的指向
注意: 如果改变了文件名是恢复不了的
###撤销git add
git reset HEAD#撤销本地当前所有的add操作
git reset HEAD -fileName#撤销本地当前某个文件/目录的add操作
####撤销git commit
git reset --soft HEAD^#撤销 git commit,撤回上个版本(撤销当前commit/撤回一次)
git reset --soft HEAD~1
git reset --soft HEAD~2#撤回二次(限于两次commit操作)
#####撤销本地修改
git reset --hard HEAD
git reset --hard HEAD^ #回退上一个版本,回滚到上一个版本,工作区、暂存本地库都回退到上一个版本
git add和git commit 撤销操作
添加链接描述