Here's a way that uses NonlinearModelFit[]:
Same function:
f[x_, amplitude_, centroid_, sigma_] := amplitude Exp[-((x - centroid)^2/sigma^2)]
Same form for the data (but numbers are different due to different random seeds):
data1 = Table[{x, RandomReal[{-.1, .1}] + f[x, 1, 1, 1]}, {x, -4, 6, 0.25}]; data2 = Table[{x, RandomReal[{-.1, .1}] + f[x, .5, 1, 2]}, {x, -8, 10, 0.5}];
But lets make this a single dataset by shifting data2 so its maximum x value is slightly less than the minimum x value from data1:
min1 = Min[data1[[All, 1]]]; max2 = Max[data2[[All, 1]]] + 1; data = Join[data2 /. {x_Real, y_Real} :> {x + min1 - max2, y}, data1]; ListLinePlot[data, InterpolationOrder -> 0, AxesLabel -> {"x", "y"}]

Here is a two-Gaussian model fit:
gauss12 = NonlinearModelFit[data, f[x, a1, x1, b1] + f[x, a2, x1 + min1 - max2, b2], {a1, x1, b1, a2, b2}, x]; gauss12["BestFitParameters"] (*{a1 -> 1.00363, x1 -> 0.982859, b1 -> 0.979613, a2 -> 0.56506, b2 -> 1.65061}*)
(Note: you could compare the a1 and a2 parameters with the maximum of each dataset to automate associating the fit parameters with their datasets. You would do this by inspection in the way presented here.)
And,
datpl = ListPlot[{data1, data2}, Joined -> True, PlotRange -> {{-10, 10}, All}, Frame -> True, PlotStyle -> {Black, Red}, Axes -> False, InterpolationOrder -> 0]; Show[{datpl, Plot[{Evaluate[f[x, a1, x1, b1] /. gauss12["BestFitParameters"]], Evaluate[f[x, a2, x1, b2] /. gauss12["BestFitParameters"]]}, {x, -10, 10}, PlotRange -> All, PlotStyle -> {Black, Red}, Frame -> True, Axes -> False]}]

Taking advantage of NonlinearModelFit functionality:
gauss12["ParameterTable"]

EDIT
To address the comment about multiple peaks, use multiple-peak model. For example, two peaks that have the same spacing:
f[x_, amplitudes_, centroids_, sigmas_] := Total[amplitudes MapThread[ Exp[-((x - #1)^2/#2^2)] &, {centroids, sigmas}]]; data1 = Table[{x, RandomReal[{-.1, .1}] + f[x, {1, 0.9}, {1, 3}, {.5, .7}]}, {x, -4, 6, 0.25}]; data2 = Table[{x, RandomReal[{-.1, .1}] + f[x, {.5, .6}, {1, 3}, {0.7, 1.1}]}, {x, -8, 10, 0.5}]; min1 = Min[data1[[All, 1]]]; max2 = Max[data2[[All, 1]]] + 1; data = Join[data2 /. {x_Real, y_Real} :> {x + min1 - max2, y}, data1]; ListLinePlot[data, InterpolationOrder -> 0, AxesLabel -> {"x", "y"}]

Here is the fit using NonlinearModelFit[]:
gauss12 = NonlinearModelFit[data, {f[x, {a11, a12, a21, a22}, {x11, x12, x11 + min1 - max2, x12 + min1 - max2}, {b11, b12, b21, b22}]}, {a11, a12, a21, a22, x11, x12, b11, b12, b21, b22}, x]; datpl = ListPlot[{data1, data2}, Joined -> True, PlotRange -> {{-10, 10}, All}, Frame -> True, PlotStyle -> {Black, Red}, Axes -> False, InterpolationOrder -> 0]; Show[{datpl, Plot[{Evaluate[f[x, {a11, a12}, {x11, x12}, {b11, b12}] /. gauss12["BestFitParameters"]], Evaluate[f[x, {a21, a22}, {x11, x12}, {b21, b22}] /. gauss12["BestFitParameters"]]}, {x, -10, 10}, PlotRange -> All, PlotStyle ->{Directive[Dashed, Black], Directive[Dashed, Red]}, Frame -> True, Axes -> False]}, FrameLabel -> {"x", "y"}]

gauss12["ParameterTable"]

The approach can be extended to three or more datasets and multiple peaks (programmatically, using parameters of the form a[idataset,jpeak], etc.).