@@ -262,7 +262,81 @@ <h2>
262
262
</ h2 >
263
263
264
264
< div class ="block ">
265
- < p > Cool.</ p >
265
+ < p > To share the cool commits you've done with others, you need to push your
266
+ changes to the remote repository. To do this, you run
267
+ < code > git push [alias] [branch]</ code > which will attempt to make your [branch]
268
+ the new [branch] on the [alias] remote. Let's try it by initially pushing
269
+ our 'master' branch to the new 'github' remote we created earlier.</ p >
270
+
271
+ < pre >
272
+ < b > $ git push github master</ b >
273
+ Counting objects: 25, done.
274
+ Delta compression using up to 2 threads.
275
+ Compressing objects: 100% (25/25), done.
276
+ Writing objects: 100% (25/25), 2.43 KiB, done.
277
+ Total 25 (delta 4), reused 0 (delta 0)
278
+ To
[email protected] :schacon/hw.git
279
+ * [new branch] master -> master
280
+ </ pre >
281
+
282
+ < p > Pretty easy. Now if someone clones that repository they will get exactly
283
+ what I have committed and all of it's history.</ p >
284
+
285
+ < p > What if I have a topic branch like the 'erlang' branch we created earlier
286
+ and I just want to share that? You can just push that branch instead.
287
+
288
+ < pre >
289
+ < b > $ git push github erlang</ b >
290
+ Counting objects: 7, done.
291
+ Delta compression using up to 2 threads.
292
+ Compressing objects: 100% (6/6), done.
293
+ Writing objects: 100% (6/6), 652 bytes, done.
294
+ Total 6 (delta 1), reused 0 (delta 0)
295
+ To
[email protected] :schacon/hw.git
296
+ * [new branch] erlang -> erlang
297
+ </ pre >
298
+
299
+ < p > Now when people clone or fetch from that repository, they'll get a 'erlang'
300
+ branch they can look at and merge from. You can push any branch to any
301
+ remote repository that you have write access to in this way. If your branch
302
+ is already on the server, it will try to update it, if it is not, Git will
303
+ add it.</ p >
304
+
305
+ < p > The last major issue you run into with pushing to remote branches is the
306
+ case of someone pushing in the meantime. If you and another developer clone
307
+ at the same time, you both do commits, then she pushes and then you try to
308
+ push, Git will by default not allow you to overwrite her changes. Instead,
309
+ it basically runs < code > git log</ code > on the branch you're trying to push and
310
+ makes sure it can see the current tip of the servers branch in your pushes
311
+ history. If it can't see what is on the server in your history, it concludes
312
+ that you are out of date and will reject your push. You will rightly have to
313
+ fetch, merge then push again - which makes sure you take her changes into
314
+ account.</ p >
315
+
316
+ < p > This is what happens when you try to push a branch to a remote branch
317
+ that has been updated in the meantime:</ p >
318
+
319
+ < pre >
320
+ < b > $ git push github master</ b >
321
+ To
[email protected] :schacon/hw.git
322
+ ! [rejected] master -> master (non-fast-forward)
323
+ error: failed to push some refs to '
[email protected] :schacon/hw.git'
324
+ To prevent you from losing history, non-fast-forward updates were rejected
325
+ Merge the remote changes before pushing again. See the 'Note about
326
+ fast-forwards' section of 'git push --help' for details.
327
+ </ pre >
328
+
329
+ < p > You can fix this by running < code > git fetch github; git merge github/master</ code >
330
+ and then pushing again.
331
+
332
+ < p class ="nutshell ">
333
+ < b > In a nutshell</ b > you run < code > git push [alias] [branch]</ code > to update a
334
+ remote repository with the changes you've made locally. It will take what your
335
+ [branch] looks like and push it to be [branch] on the remote, if possible. If
336
+ someone else has pushed since you last fetched and merged, the Git server will
337
+ deny your push until you are up to date.
338
+ </ p >
339
+
266
340
</ div >
267
341
</ div >
268
342
0 commit comments