乐趣区

关于java:Git五个常见问题及解决方法

<img src=”http://www.image.jincou.com/9d8c6147fd11459bb598833a27576030″ width=”600″ height=”354″>

一、删除近程仓库上被疏忽的文件

因为种种原因,一些本应该被疏忽的文件被咱们误操作提交到了近程仓库了。那么咱们该怎么删除这些文件呢?

以误提交了.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

如图

<img src=”http://www.image.jincou.com/b6ad296935d249148411c6e123971e50″ width=”400″ height=”438″>

二、代码开发一半,有新工作了

当你正在巴拉巴拉开发某个需要的时候, 你只实现了一半。这时,你又接到了另外一个需要,急需进行开发, 之前那个需要能够先放一放。你又不想把它 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 原稿和原图片。其它状况一律禁止转载哦!

本文由博客一文多发平台 OpenWrite 公布!

退出移动版