You have not concluded your merge (MERGE_HEAD exists).
Please, commit your changes before you can merge.
错误的原因是以前pull下来的代码不能自动合并而导致的,必须先撤销合并在pull。
1) 撤销合并
git merge –abort [Since git version 1.7.4]
git reset –merge [prior git versions]
2) 解决冲突.
3) add and commit the merge.
4) git pull now should work fine.
在没有保存本地文件修改下执行pull命令时,git会提示使用stash或者commit命令,也就是有两种解决方案。第一就是先add然后commit,最后执行pull,有冲突就解决。另一种就是使用stash命令。
1) 先将本地修改存储起来
$git stash
使用用git stash list可以看到保存的信息
2) 执行pull命令
3) 还原暂存的内容
$git stash pop stash@{0}
系统提示如下类似的信息:
Auto-merging c/environ.c
CONFLICT (content): Merge conflict in c/environ.c
意思就是系统自动合并修改的内容,但是其中有冲突,需要解决其中的冲突。
4) 解决文件中冲突的的部分
打开文件解决冲突。解决完成之后,就可以正常的提交了。
[rejected] master -> master (fetch first)
原因是没有同步远程的master,所以我们需要先同步一下
1) 首先pull一下
2) 如果有冲突就解决冲突并提交,最后push即可。
3) 如果没有冲突那么直接进行push即可。
error: RPC failed; result=22, HTTP code = 411搜索
fatal: The remote end hung up unexpectedly
fatal: The remote end hung up unexpectedly
原因是:默认 Git 设置 http post 的缓存为 1MB,使用命令将git的缓存设为500M:
git config http.postBuffer 524288000
再尝试push操作,问题解决,部署成功!
打开项目中隐藏的.git文件夹,找到config配置文件,在后天添加如下配置:
[http]
postBuffer = 524288000
在处于游离状态的时候,使用 git status命令查看的时候,将不会看到任何的创建的本地分支
1) 创建一个临时分支
$git branch temp commit_id
//commit_id的值可以查看终端的命令 根据不同情况执行不同的查询语句
2) 切换回工作分支,并合并刚刚新建的分支
$git checkout dev
$git merge temp
$git push
3) 最后删掉之前创建的分支
$git branch -d temp
git checkout – file;撤销对工作区修改;这个命令是以最新的存储时间节点(add和commit)为参照,覆盖工作区对应文件file;这个命令改变的是工作区。
git reset HEAD – file;清空add命令向暂存区提交的关于file文件的修改(Ustage);这个命令仅改变暂存区,并不改变工作区。
git reset –mixed;此为默认方式,不带任何参数的git reset,就是这种方式,它回退到某个版本,只保留源码,回退commit和stage信息。
git reset –soft;回退到某个版本, 只回退了commit的信息,不会恢复stage(如果还要提交,直接commit即可)。
git reset –hard;彻底回退到某个版本, 本地的源码也会变为上一个版本的内容。
开发时我们将代码从开发分支合并到测试分支,有时并不希望把配置文件同时被和并进来,我们可以使用.gitattributes文件在合并时忽略某些文件,使用.gitattributes来告诉git对项目特定的文件使用不同的merge strategies,一个.gitattributes文件如下:
src/com/bcx/push/PushUtils.java merge=ours
src/com/nd/push/PushUtils.java merge=ours
src/com/dkw/push/PushUtils.java merge=ours
src/com/pet/push/PushUtils.java merge=ours
要想使.gitattributes有效,使用前应做如下设置:
git config --global merge.ours.driver true
• git reset是直接删除指定的commit,把HEAD向后移动了一下
• git revert是一次新的特殊的commit,HEAD继续前进,本质和普通add commit一样,仅仅是commit内容很特殊:提交的内容是与前面普通commit文本变化的反操作。
由于reset方式HEAD指针后移,推送到远端时需要有强制更新权限或者删除分支权限。
1) 修改历史提交记录
git commit –amend
该命令与下面的语句等价
//将branch的头指针向前移动一个commit,--soft选项使得index和workspace tree的内容保持移动之前不变
git reset --soft HEAD^
//-c选项使得新提交的log message重用ORIG_HEAD指向的commit使用的log message,但允许用户编辑
git commit -c ORIG_HEAD
ORIG_HEAD,用于指向前一个操作状态,每次的commit或者pull或者reset,git 都会把老的HEAD拷贝到.git/ORIG_HEAD,通过对ORIG_HEAD的引用可 以指向前一次的操作状态
2) Git reset –soft HEAD~5这个命令,把这5条commit当做一次提交。这对于重塑历史非常有用。
3) 修改提交树
Rebase命令可以把已存在的提交,放到重新开始的一个分支上。Git rebase master 将当前所在分支的提交放到master分支上。Rebase命令能够让你优化仓库历史的清晰度。
git rebase –i HEAD~3
//3代表最后三次提交
执行该命令会在终端出现一个交互页面(vim的编辑窗口),我们将第2,3行pick改为squash,这个意义为将最后三次的提交压缩到倒数第三次的提交。
然后我们保存退出,git会一个一个压缩提交历史,如果有冲突,需要修改,修改的时候要注意,保留最新的历史,不然我们的修改就丢弃了。
//保存修改
git add .
//继续下一次rebase
git rebase --continue
直到三次压缩完成后,提交到远程仓库。
git cherry-pick C2 C4
执行上面的命令,Git 就将被C2 C4两次提交抓过来放到当前分支下了。