当前位置:网站首页>Git rebase is in trouble. What to do? Waiting line
Git rebase is in trouble. What to do? Waiting line
2020-11-06 20:33:00 【itread01】
We are using git Have you ever made a mistake in the process of ?
I've been through , My first disaster was the use of git rebase Caused by the , Although it was finally solved , But it still scares me a lot . It was like this .
Let's take a look at this picture :
Briefly explain what's in this picture ,C1 Nodes are the smallest common ancestor of all branches . It can be understood as the earliest master edition , And then we checkout Two branches came out , The difference is bugFix and feature. among feature It's a new branch of our development , and bugFix It's repairing bug The branch of .
When we put bugFix After that, hurry up merge master Released , When we released it, we found bugFix There's a little bit of a problem . For example, the file that should not be submitted has been submitted , Plus, we don't use rebase Combined in the form of , So it looks like commit The records are a little messy . So I decided to use rebase Fix the submission record , Use when you're done git push -f Forced update of remote branch .
Because we've been push After , Want to use a new commit If the record covers the old, it must be used -f Push... By force . These operations are routine operations , But I accidentally made a big problem , Almost led to the tragedy later .
I'll sell you something first , Let's think about it for a few seconds , What's the hidden question here ?
rebase The taboo of
The problem here is feature Branch , We can see from the picture that feature Branch is merge 了 C5 Node's . But when we rebase push -f After that ,C5 Nodes don't exist . Let's show you the pictures and you will understand , This is rebase The previous dependency tree :
We rebase And then the dependency tree became like this :
Because of feature I used to merge Over master And rely on C5 Node , and master stay rebase Force push After that, there is no more in the whole link C5 Node . That is to say feature The branch depends on a node that no longer exists , It's not too bad at this time , Because feature The branch hasn't been updated yet , If feature Branch pull once , Then the whole branch will be like this :
That is to say, the same code is in feature Two versions are stored in the branch , And if feature Merge into master After that , You'll find out before push -f Those submissions that were forced to abandon were merged again , And the whole thing commit Of log It's going to be very, very chaotic , It's hard to understand .
If these branches are their own , Then if you pinch your nose , If these branches belong to someone else in the team , It's basically unavoidable to make a mess . If there is one in the group Git The boss knows how to solve this situation. It's OK , Otherwise , It's very difficult to recover completely , It's very likely that one operation has no idea where the deviation is , I don't know how to find it back .
I was fine , I have learned how to deal with this situation when I make trouble , Although still can't avoid stepping on the pit , But fortunately, I came out of the pit in time . Before we look at the method of debonding , Let's start with a question , For rebase What is the root cause of the chaos , How can we avoid ?
To solve rebase Only rebase
Why did we just C8 Once the node pull It will lead to local chaos ? Because we've introduced , When we execute pull When , In fact, it was carried out git fetch and git merge Two steps . So it is equivalent to that we put master The change of the branch merge Once , We depend on rebase Previous changes , Such a merge Naturally, the two versions will be changed merge Together .
To solve this problem , We can't be in C8 Node time pull operation , Because pull Operation contains merge,merge It can lead to mistakes . It is not difficult to solve this problem , We can rebase To master On . When we execute rebase When ,git Will find out that our current branch is unique and master There's no change on the branch , Extract these changes and apply them to master We got a new result on .
So we don't put... In our records C2 and C5 Brought in .
Divergent thinking
Let's think through the above process , What's the conclusion ?
In fact, the conclusion is very simple , Namely rebase Although it's very easy to use, it's also very convenient , But it also has conditions that apply , The biggest condition is that if there are other branches that depend on the current branch , We can't use it at this time rebase, Otherwise, it will cause confusion .
What is the cause of the confusion ? It's essentially us rebase It's time to change commit The record of , Different people have different opinions on this point . There is a group of people who think git You can't tamper with your submission records , The purpose of its existence is to record repo All the changes that have taken place . If you use rebase And so on , Then we can't trace the changes and versions well . There's another person who doesn't think so , They feel that if the change of the record is very confusing, it is very inconvenient for users to read , At this time, it is very necessary to use some methods to repair it . Tools are invented for use .
The two parties are arguing endlessly , Different people have different views , It can be said that it is a problem of values, and it is not too much . I personally prefer the latter on this issue , Since there is such a good tool , Nature should use . Use is not abuse , We need to follow certain rules , It's the only way to make sure you don't make a mess of it . For example, it must not be used when there are other downstream dependencies rebase, Otherwise, it is almost certain that it will cause trouble .
Today's article is here , I wish you every day something to gain . If you still like today's content , A third company, please ~( Like it 、 Concern 、 Forward )
Link to the original text , Seeking attention
This article USES the mdnice Typesetting
版权声明
本文为[itread01]所创,转载请带上原文链接,感谢
边栏推荐
- 【應用程式見解 Application Insights】Application Insights 使用 Application Maps 構建請求鏈路檢視
- How to get started with new HTML5 (2)
- Staying up late summarizes the key points of report automation, data visualization and mining, which is different from what you think
- PHP application docking justswap special development kit【 JustSwap.PHP ]
- [Xinge education] poor learning host computer series -- building step 7 Simulation Environment
- 百万年薪,国内工作6年的前辈想和你分享这四点
- Behind the first lane level navigation in the industry
- How to hide part of barcode text in barcode generation software
- Helping financial technology innovation and development, atfx is at the forefront of the industry
- 美团内部讲座|周烜:华东师范大学的数据库系统研究
猜你喜欢

Isn't data product just a report? absolutely wrong! There are university questions in this category

FastThreadLocal 是什么鬼?吊打 ThreadLocal 的存在!!

A brief history of neural networks

How to hide part of barcode text in barcode generation software

01. SSH Remote terminal and websocket of go language

What are manufacturing and new automation technologies?

文件过多时ls命令为什么会卡住?

DRF JWT authentication module and self customization

Flink的DataSource三部曲之一:直接API

ado.net和asp.net的关系
随机推荐
行为型模式之解释器模式
開源一套極簡的前後端分離專案腳手架
What is the purchasing supplier system? Solution of purchasing supplier management platform
美团内部讲座|周烜:华东师范大学的数据库系统研究
【應用程式見解 Application Insights】Application Insights 使用 Application Maps 構建請求鏈路檢視
Get twice the result with half the effort: automation without cabinet
WeihanLi.Npoi 1.11.0/1.12.0 Release Notes
华为Mate 40 系列搭载HMS有什么亮点?
Application of restful API based on MVC
Kubernetes and OAM to build a unified, standardized application management platform knowledge! (Internet disk link attached)
(1) ASP.NET Introduction to core3.1 Ocelot
(2) ASP.NET Core3.1 Ocelot routing
Network programming NiO: Bio and NiO
How to hide part of barcode text in barcode generation software
electron 實現檔案下載管理器
Introduction to X Window System
Share with Lianyun: is IPFs / filecoin worth investing in?
MeterSphere开发者手册
Free patent download tutorial (HowNet, Espacenet)
Gather in Beijing! The countdown to openi 2020