1. 程式人生 > >Git 使用過程中遇到的問題以及解決辦法

Git 使用過程中遇到的問題以及解決辦法

git 是專案當中最常用的程式碼管理庫,熟練的使用git不是萬能的,但不能熟練的使用git是萬萬不能的,歸納了一下真正開始在多人協作的程式碼庫中提交自己的程式碼時遇到的問題。

git fetch 失效的問題

在專案工程中,主要使用的是兩個分支,一個是主分支master,一個是開發分支develop,我們一般在develop中進行開發,master分支中用來存重大版本的程式碼。當需要獲取最新的程式碼時,使用git fetch 或者 $ git fetch origin develop:develop 命令從遠端develop分支上拉取最新的程式碼。

但有時候這個命令會失效,拉取不到最新的程式碼,出現這樣的錯誤提示

fatal: Refusing to fetch into current branch refs/heads/develop of non-bare repository
fatal: The remote end hung up unexpectedly

這種時候,先切換到master分支,然後再從master分支fetch分支develop上的程式碼,就能夠成功了。

$ git fetch origin develop:develop
fatal: Refusing to fetch into current branch refs/heads/develop of non-bare repository
fatal: The remote end
hung up unexpectedly $ git checkout master Switched to branch 'master' Your branch is up-to-date with 'origin/master'. $ git fetch origin develop:develop From 172.20.10.91:developers/android_do_as 5ee9941..ff421cf develop -> develop

究其原因,就和fatal的提示一樣,在非bare的git倉庫中,如果你要同步的本地跟蹤分支是當前分支,就會出現拒絕fetch的情況。也就是說不可以在非bare的git倉庫中通過fetch快進你的當前分支與遠端同步。

git 錯誤提交或者錯誤的合併瞭解決方案

第一次在程式碼庫中提交程式碼,心情比較激動,直接本地多次提交之後,就和遠端分支給merge了。命令看起來是這麼用的,但這樣就會在程式碼線上弄出一條新線,而不是一條線,多麼醜啊。還好沒有push到遠端去,所以就要看看如何解決,把它弄成一條線了。

當已經錯誤的提交,或者是錯誤的合併已經產生了,首先,要想辦法回到過去,我多想回到過去,再回到你的身邊。

$ git reflog
ff421cf [email protected]{0}: checkout: moving from master to develop
efaaa61 HEAD@{1}: checkout: moving from develop to master

首先用git reflog 命令,看看最近自己做過什麼,哪裡是自己想回去的地方。

$ git reset --hard 72b075e
$ git clean --f

然後再使用 reset命令,複製自己想要去的地方的雜湊碼,穿越時光回到過去。順便 clean 一下,保持清潔。

這樣你就能去到任何你想去的地方,so happy。

但如何把多個提交合併成一個提交呢?為了保持程式碼樹的乾淨漂亮,在本地的多次提交儲存,弄成一次提交再推到遠端去可能會更加好一點,所以可以是用 rebase 命令進行衍合。

在自己多次提交的本地分支上進行衍合一般不會出現衝突,找準本地分支的第一次提交的雜湊碼值,或者數清楚自己提交了幾次用rebase命令就可以將多次提交合併成一次提交

$ git rebase -i head~11

使用這個命令之後,會進入到vim模式,將自己需要的提交資訊設定為p,其他的設定為s,最後使用:wq退出儲存即可。

# Rebase 6a2eb6d..f7d0bd7 onto 6a2eb6d
#
# Commands:
#  p, pick = use commit
#  r, reword = use commit, but edit the commit message
#  e, edit = use commit, but stop for amending
#  s, squash = use commit, but meld into previous commit
#  f, fixup = like "squash", but discard this commit's log message
#  x, exec = run command (the rest of the line) using shell
#
# These lines can be re-ordered; they are executed from top to bottom.
#
# If you remove a line here THAT COMMIT WILL BE LOST.
#
# However, if you remove everything, the rebase will be aborted.
#
# Note that empty commits are commented out

這是對命令的提示。

但最好還是不要面對需要這樣使用rebase的情景,應該好好使用commit 命令的引數。比如:

git commit --amend

使用這個命令,會將本次提交寫到上次的提交中去,就不會產生多條的提交資訊。

git rebase 中的衝突處理

在合併程式碼的過程中,可以使用merge,也可以使用rebase,如果使用merge,合併之後推上遠端就會有兩條線,但使用rebase就只會產生一條線,變得簡潔而優雅,所以在合併程式碼的過程中建議儘量使用rebase命令。

在合併程式碼中可能會遇到衝突,當提示有衝突時,我們可以使用外部的圖形化衝突處理工具來處理衝突。這裡使用的是KDiff3來處理衝突。

  1. 安裝Kdiff3 軟體。(最好使用預設路徑)
  2. 新增kdiff3到git mergetool裡。 git config --global merge.tool kdiff3
  3. 新增kdiff3路徑到 git global config裡。git config --global mergetool.kdiff3.path "C:\Program Files\KDiff3\kdiff3.exe"
  4. 以後merge發生衝突時:git mergetool 來做圖形化merge。進入編輯衝突。

帶問號的才是衝突。當兩者都需要儲存時,右擊標記處,選完B後,再次右擊,選擇C。A是最原始的程式碼,B是自己的,C是別人的。

在這裡需要注意的是,首先要設定好kDiff3的預設編碼,和自己的工程編碼一樣,要不解決完衝突之後還要解決亂碼問題。。。。



原文連結:http://www.jianshu.com/p/955ddee023bb

相關推薦

oracle啟動/停止的幾種方法以及 啟動和停止過程出錯的解決辦法

一、啟動幾種方法: 1、 sqlplus /nolog connect /as sysdba startup 2、 sqlplus /nolog connect /as sysdba startup nomount alter database mount alter database o

Unity3D 5.x 啟動過程 License Error 解決辦法

新安裝了Unity3D的最新版本5.4 ,啟動過程中執行"Check License"步驟的時候報錯,"License Error" ,說我沒有License。 Unity3D不是對普通使用者免費嗎?幹嘛不讓我用啊? 這讓我鬱悶了好久。我是按照“註冊帳號--下載--安裝--

LoadRunner 使用過程問題及解決辦法記錄

1.web_find()插入檢查點回放錯誤 Action.c(83): Error -27985: There is no context for HTML-based functions. A previous function may not have used "Mo

pytorch 卷積神經網路(alexnet)訓練問題以及解決辦法(更新

上一篇部落格中使用的是pytorch中的預訓練模型效果較好。https://blog.csdn.net/pc1022/article/details/80440913這篇部落格是自己訓練 卷積神經網路,最開始以簡單的alexnet進行訓練。對alexnet程式碼有三個版本的:

Git 使用過程遇到的問題以及解決辦法

git 是專案當中最常用的程式碼管理庫,熟練的使用git不是萬能的,但不能熟練的使用git是萬萬不能的,歸納了一下真正開始在多人協作的程式碼庫中提交自己的程式碼時遇到的問題。 git fetch 失效的問題 在專案工程中,主要使用的是兩個分支,一個是主分支master,一個

Git使用出現的錯誤以及解決辦法積累

1.問題情境:昨晚上在上傳程式碼的時候,commit程式碼以後沒有進行push就放在那裡,今天修改了新的模組以後,上傳程式碼時出現瞭如下錯誤: commit is not possible because you have unmerged files h

SQL Server事務日誌已滿的原因以及解決辦法

錯誤描述:資料庫的事務日誌已滿。若要查明無法重用日誌中的空間的原因 ,請參閱sys.databases 中的 log_reuse_wait_desc 列 。   首先引入一下事務日誌的概念(來自百度百科):   事務日誌是一個與資料庫檔案分開的檔案

微博分享sdk4.0 遇到的坑以及解決辦法彙總

最近剛轉正,公司真的很忙,上一個月加班成常態,關鍵還是12點以後,打破我工作以來加班最晚記錄:凌晨2點。當然越忙對於我們來說也是有益處的,可以多學到很多東西。 公司專案用的微博的sdk 還是挺老的,大家都知道,早版本的微博sdk 存在一個問題就是使用了隱式的i

關於win7 環境下安裝docker容器的步驟 以及過程的問題解決

首先,docker是相容win7 和更低版本的系統的,提供了docker tool 工具 , 預設安裝路徑一直下一步 因為碼頭工人是用去語言寫的,託管在GIT中上,所以搬運工依賴git的環境

SQL 查詢遇到的問題,以及解決辦法

資料庫連線 在資料庫連線時 ,最初在每次開始連線資料庫後,都沒有關閉,導致當我們如果在同一個Action 裡面執行太多的次數連線時候,MySQL 會因為太多連線而拒絕 連線,原因是Too many connection.因此需要每次連線之後需要關閉 錯

can't resolve host-使用GIT 請求遠端倉庫時出現的問題以及解決辦法

問題: can't resolve host-使用GIT 請求遠端倉庫時出現的問題,因以及解決,貼不出截圖,出現這問題的原因不明,大致上應該是更改了網路代理引起的 解決: 因我不知道其他人是怎麼解決該問題的,我也是誤打誤撞,記錄一下,供大家參考: winsock的百度

android安卓手機(小米 MI3聯通版)安裝Ubuntu(Linux發行版)過程遇到的坑以及解決辦法

原創部落格,轉載請註明出處,歡迎轉載。以下是我用閒置的舊手機小米3聯通版根據網上教程安裝Ubuntu過程,以及各種問題的解決辦法:(請直接跳到第三步:使用Linux Deploy安裝ubuntu)一、預備工作:1.下圖是我的手機配置、系統、記憶體、CPU等:2.安裝必備APP

ubuntu安裝Redis Desktop Manager出現的問題以及解決辦法

2. sudo dpkg -i redis-desktop-manager_0.8.3-120_amd64.deb 然後報錯:dpkg: 依賴關係問題使得 redis-desktop-manager 的配置工作不能繼續: redis-desktop-manager 依賴於

CCS編譯常常遇到的問題以及解決辦法

1、warning: creating .stack section with default size of 400 (hex) words. 這是因為沒有在Project---Build Option---Linker中-stack沒有設定值。 2、warnin

VS2015配置git過程更新bin/debug資料夾及斷點失效的解決

Bin/debug資料夾中的檔案需要被Git管理問題:VS預設的.gitIgnore檔案是預設不同步bin/debug資料夾的,但是也許我們會在bin/debug資料夾裡面放置一些需要啟動的其他exe或者配置屬性檔案,就需要把這些檔案也進行團隊管理。辦法:修改儲存庫設定裡面的

python3.xlambda表示式遇到的一些問題以及解決辦法

lambda表示式 在python3中 使用reduce,map會和2.x版本有很多區別 想正常展示結果,需要一些一些動作。 map函式,不再返回 陣列,需要轉換 例如 map(lambda x: x ** 2, [1, 2, 3, 4, 5]) 將會顯示成: <ma

.Net Core3.1SameSite的使用方法、遇到的問題以及解決辦法

一、關於SameSite的介紹 1.  什麼是SameSite? SameSite是瀏覽器請求中Set-Cookie響應頭新增的一種屬性,它用來標明這個 cookie 是否是“同站 cookie”,同站 cookie 只能在本域名中使用的cookie,不能作為第三方 cook

【安裝Python環境】之“安裝 setuptools ”時出現的問題以及解決辦法

ace python環境 str ots tar oot bsp users 默認 安裝Python環境時,還需要安裝“setuptools 與 pip”,但是安裝setuptools時出現了幾個問題,如下: setuptools 與 pip 下載地址如下:https://

Git】常見錯誤提示解決辦法和常用方法

log image 解決 遠程 添加 logs 遠程倉庫 錯誤 ima 1.添加遠程倉庫時提示fatal: remote origin already exists. 先刪除遠程倉庫,再添加遠程倉庫 最後再push 2.修改本地文件(比如README.md)後,更新到g

MySQL學習筆記16分組復制的幾個常見問題以及解決辦法

創建數據庫 restart 文件 create read_only exe port nbsp slave MySQL分組復制提供的功能很強大,但是有時會出現一些問題,或者使用上存在一些限制主要包括: (1)分組復制的限制。 (a)存儲引擎只能是InnoDB。 (b)二進制