git 提交代码时发现把同事的代码删了, git 却没有提示 merging 是怎么回事?

2020-04-17 22:43:33 +08:00
 337136897

改了 4 个文件,然后 一顿操作如下: 一:先 pull 代码 ,提示有人提交过代码

qiann@LAPTOP-DHDFP0PP MINGW64 /c/project/chargespot-business-api (feature-init20200401)
$ git pull
remote: Enumerating objects: 852, done.
remote: Counting objects: 100% (852/852), done.
remote: Compressing objects: 100% (340/340), done.
remote: Total 852 (delta 357), reused 748 (delta 312)
Receiving objects: 100% (852/852), 207.41 KiB | 131.00 KiB/s, done.
Resolving deltas: 100% (357/357), completed with 11 local objects.
From https://gitlab.charge-spot.com/backend-group/chargespot-business-api
   7bb0b5eb..ae21cc9d  feature-init20200401 -> origin/feature-init20200401
error: Your local changes to the following files would be overwritten by merge:
        business-device/business-device-biz/src/main/java/com/chargespot/device/service/impl/BatteryServiceImpl.java
Please commit your changes or stash them before you merge.
Aborting
Updating 7bb0b5eb..ae21cc9d

二: add 和 看一下 status

qiann@LAPTOP-DHDFP0PP MINGW64 /c/project/chargespot-business-api (feature-init20200401)
$ git status
On branch feature-init20200401
Your branch is behind 'origin/feature-init20200401' by 61 commits, and can be fast-forwarded.
  (use "git pull" to update your local branch)

Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
        modified:   business-device/business-device-biz/src/main/java/com/chargespot/device/service/impl/BatteryServiceImpl.java

三:commit

qiann@LAPTOP-DHDFP0PP MINGW64 /c/project/chargespot-business-api (feature-init20200401)
$ git commit -m '去掉 log'
[feature-init20200401 c3c59ecc] 去掉 log
 1 file changed, 2 deletions(-)

四:commit 后再 pull 一下

qiann@LAPTOP-DHDFP0PP MINGW64 /c/project/chargespot-business-api (feature-init20200401)
$ git pull
Auto-merging business-device/business-device-biz/src/main/java/com/chargespot/device/service/impl/BatteryServiceImpl.java
Merge made by the 'recursive' strategy.
 .../device/client/DeviceOwnerRelClient.java        |   9 ++
 .../fallback/DeviceOwnerRelClientFallBack.java     |   5 +
 .../com/chargespot/device/dto/DeviceModelDTO.java  |  18 +++
 .../chargespot/device/vo/ExportDeviceListVO.java   |   2 +-
 business-device/business-device-biz/pom.xml        |   2 +-
 .../device/mapper/DeviceOwnerRelMapper.java        |  11 ++
 .../device/service/DeviceOwnerRelService.java      |   8 ++
 .../device/service/impl/BatteryServiceImpl.java    |   4 +-
 .../service/impl/DeviceGroupServiceImpl.java       |   4 +-
 .../service/impl/DeviceOperationsServiceImpl.java  |   2 +-
 .../service/impl/DeviceOwnerRelServiceImpl.java    |  20 ++-
 .../device/service/impl/DeviceServiceImpl.java     |   8 +-
 .../device/web/DeviceOwnerRelController.java       |   5 +
 .../mapper/extend/DeviceOwnerRelMapperExtend.xml   |  18 ++-
 .../chargespot/move/model/BusinessDeviceRelVO.java |   3 +
 .../move/service/impl/CabinetGroupServiceImpl.java |   2 +-
 .../service/impl/MemberCouponsServiceImpl.java     |  55 ++++----
 .../move/service/impl/MoveServiceImpl.java         |  61 +++++----
 .../mapper/extend/CabinetMapperExtend.xml          |   3 +-
 .../mapper/extend/MemberCouponsMapperExtend.xml    |   5 +-
 .../order/service/impl/OrderLendServiceImpl.java   |   1 +
 .../mapper/extend/OrderOwnerMapperExtend.xml       |   4 +-
 .../proxy/client/ProxyAccountClient.java           |   2 +
 .../fallback/ProxyAccountClientFailback.java       |   5 +
 .../chargespot/proxy/model/GetDrawAmountDTO.java   |   6 +
 .../chargespot/proxy/config/param/DramParam.java   |   5 +
 .../chargespot/proxy/handler/MqMessageHandler.java |  13 +-
 .../proxy/mapper/ProxyDrawOrderMapper.java         |   8 ++
 .../proxy/service/ProxyAccountService.java         |   7 ++
 .../proxy/service/ProxyOrderBillService.java       |   3 +-
 .../service/impl/ProxyAccountServiceImpl.java      |  86 ++++++++++++-
 .../service/impl/ProxyDrawOrderServiceImpl.java    |  48 ++++---
 .../proxy/service/impl/ProxyIndexServiceImpl.java  | 139 +++++++--------------
 .../service/impl/ProxyOrderBillServiceImpl.java    |   6 +-
 .../proxy/web/ProxyAccountController.java          |   7 ++
 .../mapper/extend/ProxyDrawOrderMapperExtend.xml   |  38 +++++-
 .../mapper/extend/ProxyOrderBillMapperExtend.xml   |   8 +-
 .../business/job/BusinessDeviceEventJob.java       |  40 +++---
 .../impl/BusinessmenCouponsMemberServiceImpl.java  |  13 --
 .../impl/BusinessmenOwnerRelServiceImpl.java       |   4 +-
 .../service/impl/BusinessmenServiceImpl.java       | 111 ++++++++--------
 41 files changed, 506 insertions(+), 293 deletions(-)
 create mode 100644 business-device/business-device-base/src/main/java/com/chargespot/device/dto/DeviceModelDTO.java

五:再 add 并且看一下 status(在这里提示修改是正确的,4 个文件)

qiann@LAPTOP-DHDFP0PP MINGW64 /c/project/chargespot-business-api (feature-init20200401)
$ git add .
gi
qiann@LAPTOP-DHDFP0PP MINGW64 /c/project/chargespot-business-api (feature-init20200401)
$ git status
On branch feature-init20200401
Your branch is ahead of 'origin/feature-init20200401' by 2 commits.
  (use "git push" to publish your local commits)

Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
        modified:   business-device/business-device-biz/src/main/java/com/chargespot/device/service/impl/BlackListBatteryServiceImpl.java
        modified:   business-device/business-device-biz/src/main/java/com/chargespot/device/service/impl/DeviceOperationsServiceImpl.java
        modified:   business-device/business-device-biz/src/main/java/com/chargespot/device/service/impl/DeviceOwnerRelServiceImpl.java
        modified:   business-device/business-device-biz/src/main/java/com/chargespot/device/service/impl/DevicePreWarningDataServiceImpl.java


最后再 commit 和 push

qiann@LAPTOP-DHDFP0PP MINGW64 /c/project/chargespot-business-api (feature-init20200401)
$ git commit -m '去 log'
[feature-init20200401 9e87e2c6] 去 log
 4 files changed, 6 insertions(+), 20 deletions(-)

qiann@LAPTOP-DHDFP0PP MINGW64 /c/project/chargespot-business-api (feature-init20200401)
$ git push origin
Enumerating objects: 66, done.
Counting objects: 100% (66/66), done.
Delta compression using up to 12 threads
Compressing objects: 100% (33/33), done.
Writing objects: 100% (42/42), 20.74 KiB | 1.22 MiB/s, done.
Total 42 (delta 20), reused 0 (delta 0)
remote:
remote: To create a merge request for feature-init20200401, visit:
remote:   https://gitlab.charge-spot.com/backend-group/chargespot-business-api/merge_requests/new?merge_request%5Bsource_branch%5D=feature-init20200401
remote:
To https://gitlab.charge-spot.com/backend-group/chargespot-business-api.git
   ae21cc9d..9e87e2c6  feature-init20200401 -> feature-init20200401


,然后看了下,把同事代码删了

是我操作不对吗?为什么会这样,大哥们

1332 次点击
所在节点    问与答
2 条回复
msg7086
2020-04-18 08:53:23 +08:00
新手入门我总是建议请老老实实从一个优秀的 GUI 开始。等你知道了 working directory / stash / stage / commit / merge / merge back / rebase 了以后,再要想比如说装个 B,再考虑纯 CLI 的情况。
比如 git pull 这样的命令只能处理最简单的拉取情况。如果你要拉取有冲突的 commit,情况会复杂得多,光一个 add 一个 commit 是远远不够的,需要首先根据场景看要做 rebase 还是 merge,然后根据具体操作去做 3-way conflict resolve 。

你现在的情况是 working directory 有更改,没进 stage 也没上 commit,更没 stash,于是产生了 local change conflict 。然后你做了 add 和 commit,这时候如果你有图形界面的话你可以看到状态是这样的。

origin/feature-init20200401 -> 7bb0b5eb --- 60 多个提交 ---> ae21cc9d
feature-init20200401 -> 7bb0b5eb -> c3c59ecc

然后你又做了 pull --merge,和一个 commit,变成了

feature-init20200401 -> 7bb0b5eb -> c3c59ecc -(merge ae21cc9d) -> 9e87e2c6

先不论结果怎么样,中途这条分支叉出来叉进来再叉回去,会让人无法看清每一个提交的用处和每一处修改的位置,万一提交后出了问题,也很难去单独隔离出某一段提交然后回滚。比如你这里,一处修改分了两次提交,一次在 merge point 之前,一次在之后,就很难去隔离测试。

比较好的做法是,先 stash,然后签出 ae21cc9d,然后 stash pop 并 resolve conflict,然后再做一个单独的「去 log 」提交。
另一种做法是,先 commit,然后做 pull rebase,在 rebase 过程中 resolve conflict,然后把 rebase 过的 commit 给 push 上去。
两种做法的结果是完全相同的。

如果你司没有针对 git 的学习过程的话,建议大家聚在一起好好学一下。瞎基尔用 git 是对 git 强大能力的一种浪费。正确使用 git 会大幅提高源代码管理效率的。

至于你说把同事代码删了是怎么回事,这个也只需要开个 GUI 工具,往上回溯一下看看每个提交的 diff 就知道怎么回事了。无非是 merge 的时候出了问题吧。
337136897
2020-04-20 02:12:36 +08:00
@msg7086 感谢大佬的回复,好详细,学习了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/663597

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX