The notation suggests (and the OP's comment confirms) that here $H$ is meant to be a parity check matrix of a (presumably binary) linear code, and $G$ a corresponding generator matrix. A quick summary: we are to describe a $k$ dimensional subspace $\mathcal C$ of the $n$-dimensional space $\mathbb{F}_2^n$. A generator matrix $G$ does the job by being a $k\times n$ matrix whose rows form a basis of $\mathcal C$. A parity check matrix does it by giving the matrix $H$ of a linear mapping $\mathbb{F}_2^n\rightarrow \mathbb{F}_2^{n-k}$ carefully designed so that the subspace $\mathcal C$ is the kernel of that mapping. Then, indeed, it follows that $HG^T=0$.
We can perform elementary row operations on either $H$ or $G$ without affecting the subspace $\mathcal C$, so often some kind of a standard form is used. The most common convention (known as systematic encoding) specifies that $G$ be given in the form $ G=(I_k\ \vert\ A), $ where $I_k$ is a $k\times k$ identity matrix and $A$ is a $k\times(n-k)$ matrix. (Because we usually are allowed to permute columns, we can always bring a full rank matrix into this form) Then the matrix $ H=(A^T\ \vert\ I_{n-k}) $ is a matching check matrix (see also the Wikipedia page I linked to). The process is reversible in that the two matrices $H$ and $G$ can switch roles.
So if your matrix $H$ happens to have an identity block at either left or right end, then you can use this recipe. Otherwise you will need to first perform some row operations.