And Jacob begot Joseph the husband of Mary, of whom was born Jesus who is called Christ.
Now Jesus Himself began His ministry at about thirty years of age, being (as was supposed) the son of Joseph, the son of Heli.
First, a few preliminary comments need to be addressed. Luke’s genealogy is complete, and Matthew’s is merely a selected one. Matthew’s genealogy was not meant to be complete according to Matthew 1:17, where it is specifically broken into groups of 14.
The two genealogies trace through two of David’s sons, and both trace to Abraham. Matthew focuses on the kingly relationship through David and, ultimately, to the Jewish patriarch Abraham. However, Luke doesn’t stop there. He continues to trace Christ’s genealogy back to Adam. Luke focuses more on the humanity of Christ going back to Adam, where sin and death first entered into creation—hence the need for a Savior in the first place.
Another note is that both genealogies are aware of Mary’s virgin birth. For example Matthew says: “Joseph the husband of Mary, of whom (feminine) was born Jesus.” Luke is more obvious in that he says: “being (as was supposed) the son of Joseph.”
With regards to the alleged “two fathers” of Joseph, the explanation of the differences between Matthew 1 and Luke 3 is quite simple. Luke traced Christ’s lineage through Mary, while Matthew traced it through Joseph.
One of the main reasons Matthew is recording Joseph’s lineage is due to Jeconiah (variant spellings: Jechonias, Jehoiakim). He is listed in Matthew 1:11. Because of Jeconiah’s actions, a prophecy came down that none of his descendants would ever sit on the throne of David. Jesus, who forever sits on this throne, could not have been a physical descendant of Jeconiah (Jeremiah 22:30). A virgin birth would obviously prevent this.
This indicates that Matthew’s genealogy is Joseph’s, and this confirms the significance of the feminine verbiage. When Matthew mentioned Joseph’s wife, Mary, at the end of the genealogical list, he used the feminine form for the parent of Jesus. This reveals that Jesus was indeed Mary’s son and not Joseph’s.
When looking at Luke 3, the genealogical list is strictly men from Jesus to Adam, whereas in Matthew’s list, some women were included, such as Tamar, Ruth, and so on. So, if this were a genealogy of Mary, then she would be listed.
Joseph, when he married Mary, became the son of Heli according to the Law of Moses and could legally be included in the genealogy.
Moreover, in the genealogy, Heli is listed as the father of Joseph, who had 2 daughters. The first is Mary, and the other was Zebedee’s unnamed wife (Matthew 27:56; John 19:25). When there were no sons to preserve the inheritance in accordance with the Law of Moses (Numbers 27:1–11; Numbers 36:1–12), the husband would become the son upon marriage to keep up the family name. Therefore, Joseph, when he married Mary, became the son of Heli according to the Law of Moses and could legally be included in the genealogy.
Also, in Luke’s genealogy the form is different from that of Matthew’s. Matthew’s list gives the father and who they begot (Greek gennao). In Luke the form is different, where X is the son of Y. But more precisely, the word son is absent in Greek, but only inserted into English so we can better understand it. The only place where son is used in the Greek is in verse 23 where Jesus was the supposed son of Joseph, of Heli, of Matthat, of Levi, and so on.
Luke is being very precise. Jesus was thought to be the son of Joseph, who was of Heli. Notice that Luke never said that Joseph was the son of Heli in the Greek. This reduces the alleged contradiction to nothing and shows that Luke’s genealogy is Mary’s—with Joseph’s name listed due to inheritance laws—and Matthew’s genealogy is Joseph’s.