After branching, where do the columns of child node come from before new column being added by sub-problem?
It is very common to use previously generated columns because they could both be of high quality and not in violation of any branching rule at the child node.
Are they obtained by inheritance of the columns in restricted master problem of parent node which is solved to optimality?
This is one possibility, but not the only one.
Indeed, columns generated in a completely different part of the branch-and-bound tree could still prove useful in your child node, and you don't want to generate them again.
A common approach is to keep a global column pool.
All explored nodes add new columns to this column pool.
Each node keeps a list of column indices which are not compatible with it because they violate some branching constraint.
A new child node would inherit this list from its parent node, and add new indices which are not compatible with the new branching rule which generated the child node.
If so, there must be some inherited columns violating the branching rule, what should we do with these columns in conflict? Are they directly removed?
In the approach I propose above, the columns are not removed but rather "blacklisted" from that particular child node because they violate the branching rule.
Depending on many considerations (how fast it is to solve the pricing problem vs. the master problem, how many columns you are generating, etc.) you might decide that your column pool is growing too big.
A big column pool means that the LP solved at each node might be slow to solve.
In that case, you can establish rules for columns to exit the column pool.
For example, for each column, you could store the sequential B&B node id of the last node in which the column was active.
If the column has been inactive for too long, then you might want to remove it from the column pool.
However, I would only implement such an exit criterion if I had proof or a strong suspicion that the column pool size is becoming a hindrance to the performance of the algorithm.
I would start without such a mechanism.
What if the model becomes infeasible after the removal of these conflicting columns?
This could happen.
Even at the root node, how do you initialise the restricted set of columns to ensure feasibility?
There is no universal answer to this because finding a feasible set of columns could be trivial for some problems and extremely hard for others.
A possible approach is to initialise the column pool with a single "dummy" column.
Such a column should have a huge penalty in the objective function, but its coefficients in the constraints matrix should be such that this single column makes all constraints satisfied.
For example, in your bin packing problem, you could add an initial column with index $j=0$.
You would give this column a large cost in the objective function (something like $\min \; 10^9 x_0 + \sum_{j > 0} x_j$).
You would also set the coefficients $a_{i0} = 1 \; \forall i$.
If $x_0$ was a "real" column, it would correspond to a single knapsack in which you pack all objects.
(Unless your problem is trivial, this solution will violate the knapsack capacity constraint.)
Adding $x_0$ to the column pool ensures that the problem is always feasible.
However, there are a few things you should keep in mind.
First, column $x_0$ shall never be removed from the column pool and shall never be blacklisted by any branching rule.
Second, any optimal solution to the continuous relaxation of your problem which selects column $0$ with $x_0 > 0$ is, in reality, an infeasible solution.
Therefore, if a child node has $x_0 > 0$ in its optimal solution, then that child node is infeasible.
If $x_0 > 0$ at the root node, then the entire problem is infeasible.
Even when you use a dummy column because you cannot ensure that you will have a feasible set of columns, you should strive to add as many good columns as possible to your initial column pool.
If you don't, it is likely that the dual of the continuous relaxation of your problem will be degenerate.
In such a case, LP solvers will most likely return dual values corresponding to an optimal vertex of the dual polytope.
In this case, you have all the duals "accumulate" in one of the dual variables and be 0 in all others.
This leads to pricing subproblems which will yield new columns of "low quality", in the sense that they are unlikely to be selected in the optimal integer solution of the master problem.
In your bin packing example, if you call $\lambda_i$ your dual variables, you might have $\lambda_1 = M$ (where $M$ is a large number) and $\lambda_i = 0$ for all $i > 1$.
Such dual values are quite uninformative when it comes to generating good columns in the subproblem.