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兩次提交抓過來放到當前分支下了。
本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。