Git五個常見問題及解決方法


一、刪除遠程倉庫上被忽略的文件

由於種種原因,一些本應該被忽略的文件被我們誤操作提交到了遠程倉庫了。那么我們該怎么刪除這些文件呢?

以誤提交了.idea目錄為例,我們可以通過下面的步驟處理:

1)我們首先應該清除暫存區的.idea文件,執行命令

# -r代表刪除的是文件或者文件夾   --cached 只清除暫存區不清除工作區的
git rm -r --cached .idea

2)在 .gitignore 文件,添加需要忽略的文件。

.idea

之后在提交,就會刪除.idea相關文件

git commit -m '提交信息'
git push

git rm 與 git rm --cached 的區別

git rm : 同時從工作區暫存區刪除文件。即本地的文件也被刪除了。

git rm --cached : 從暫存區刪除文件。但是本地文件還存在,只是不希望這個文件被版本控制。

上面的 .idea文件 顯然我自己工作區是不能刪除的,只能刪除暫存區,所以需要加上 --cached

如圖


二、代碼開發一半,有新任務了

當你正在巴拉巴拉開發某個需求的時候,你只完成了一半。這時,你又接到了另外一個需求,急需進行開發,之前那個需求可以先放一放。你又不想把它 git commit 提交到版本庫,也就是說工作區或者暫存區中有一些你並不想提交到版本庫的代碼。

這個時候又該怎么辦呢?

你就可以使用 git stash 命令來解決這個問題。

  1. 首先,將工作區暫存區中的修改,存儲到堆棧
# -u 表示還要存儲工作區中新增的文件,如果不加u只會存儲工作區中已經存在的文件的修改
git stash save -u "需求 a 只完成了一半"

這樣,工作區和暫存區就都干凈了。

我們也可以查看堆棧中的 stash 列表。(由於我們只 git stash 存儲了一次,故堆棧中只有一個 stash)

$ git stash list
stash@{0}: On main: 需求 a 只完成了一半

也可以查看,stash中存了哪些內容

git stash show

2) 然后,就可以在當前的 dev 分支中,優先完成需求 b

如果需求 b 已開發完成,就將其提交到版本庫。

git add .
git commit -m "需求 b 已完成"
# 推送到遠程的 dev 分支
git push origin dev

3) 最后,我們將堆棧中的 stash 彈出,應用到當前的工作區

git stash pop

繼續完成需求 a 中未完成的工作。如果需求 a 也完成了,也將其提交到版本庫。

git add .
git commit -m "需求 a 也完成"
# 推送到遠程的 dev 分支
git push origin dev

這就大功告成。


三、git pull代碼沖突

當你提交代碼的時候,想先 pull一下代碼時你發現

$ git pull
error: Your local changes to the following files would be overwritten by merge:
        src/main/java/com/open/demo/beans/AppReqParmVO.java
Please commit your changes or stash them before you merge.
Aborting

很明顯你本地修改的代碼與他人修改提交的有沖突了。文件都告訴你了 AppReqParmVO.java

如何解決?

1)先把本地代碼存儲起來

git stash

2)然后再去pull遠程代碼

$ git pull
Updating 5b82c67..3d844c3
Fast-forward
 src/main/java/com/open/demo/beans/AppReqParmVO.java | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

發現已經不報錯了,能夠正常 pull下來。

3)最后再把本地存儲的代碼釋放出來

$ git stash pop
Auto-merging src/main/java/com/open/demo/beans/AppReqParmVO.java
CONFLICT (content): Merge conflict in src/main/java/com/open/demo/beans/AppReqParmVO.java

釋放出來,這里也告訴你有沖突,然后手動解決下沖突,就可以正常提交了。


四、合並分支發生的沖突

上面的問題是同一分支,拉取代碼引起的沖突,而這里是在兩個分支進行合並的時候,出現了沖突。

比如現在有兩個分支,你在dev修改了一個文件后提交成功,而master分支也改了同一個文件也提交成功了,這個時候當你將dev合並到master的時候,你發現合並不了,出現沖突了,這種問題實際開發中也挺常見的。

這里在dev合並到master發生沖突

1)、從dev切到master分支

git checkout master

2)、合並dev

git merge dev

如果有沖突那么就會告訴你哪些文件沖突

$ git merge dev
Auto-merging src/main/java/com/open/demo/beans/AppReqParmVO.java
CONFLICT (content): Merge conflict in src/main/java/com/open/demo/beans/AppReqParmVO.java
Automatic merge failed; fix conflicts and then commit the result.

那你只需找到當前沖突文件,解決沖突即可。

<<<<<<< HEAD
    private final   long serialVersionUID = -1206184202179044275L;
=======
    private  long serialVersionUID = -1206184202179044275L;
>>>>>>> dev

修改完重新提交就可以了。


五、master修改代碼,推送到dev

你在master修改代碼,卻需要把修改后代碼推送到dev遠程分支上

1)、在master上

   git add .
   git commit -m "本次提交說明"

2)、切換到dev分支

git checkout dev

3)、合並master

git merge master

4)、推送到主倉庫

git push

如果dev分支提交代碼 需要重新 add 和 commit。

聲明: 公眾號如需轉載該篇文章,那麻煩在文章的頭部 聲明是轉至公眾號: 后端元宇宙。尊重作者辛苦勞動果實嘛。同時也可以問本人要該文章markdown原稿和原圖片。其它情況一律禁止轉載哦!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM