
一、刪除遠程倉庫上被忽略的文件
由於種種原因,一些本應該被忽略的文件被我們誤操作提交到了遠程倉庫了。那么我們該怎么刪除這些文件呢?
以誤提交了.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
命令來解決這個問題。
- 首先,將工作區和暫存區中的修改,存儲到堆棧。
# -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原稿和原圖片。其它情況一律禁止轉載哦!