aboutsummaryrefslogtreecommitdiff
path: root/cheatsheet.txt
blob: 92bee2e8dbaae39f65305f029b0ca1d2e9d4130a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
Tag

  git tag -a x.y.z -m "Tag version x.y.z"

Squash multiple commits into one

  git rebase -i HEAD~<N>

  http://www.gitready.com/advanced/2009/02/10/squashing-commits-with-rebase.html

Change commit message

  git commit --amend

Revert uncommited changes

  git reset --hard HEAD

Copy commit from one branch to the other

  # On the source branch
  git log -1
  git cout <target-branch>
  git cherry-pick <commit-id> 

Setup remote repository

  On remote:

  1. Use the server/mkrepo.sh script:

     mkdrepo.sh <name>
     mkdrepo.sh --private <name>

     <name> is without the .git suffix.

  On local:

  1. git remote add origin scm.codesynthesis.com:/var/scm/proj/proj.git
  2. git push --tags origin master
  3. # blow the local project and do clone
     git clone scm.codesynthesis.com:/var/scm/proj/proj.git [name]

Delete a branch from a remote repository

  git push origin :experimental

  Find a ref that matches experimental in the origin repository (e.g.
  refs/heads/experimental), and delete it.

  Using the push.sh script:

  ./push.sh :<name>

Rebasing

  Local (e.g., from a feature branch to master):
 
  git rebase <src> [<dst>]
  
  If <dst> is not specified, current branch is used. If <dst> is
  specified, it is checked out.

  Remote (e.g., merge someone else's changes):

  git fetch
  git rebase origin[/master]
  git push --tags origin

Submodules

  git config --global status.submoduleSummary true
  git config --global diff.submodule log

  git submodule update --init  # init and update
  git clone --recursive        # same as doing above manually

  git submodule update --remote [sub] # update submodule(s) (to remote master)
                                      # --rebase
  
  git fetch
  git checkout <commit-sha1> # As above but to specific commit.

  git pull             # fetches submodules, but does not update
  git submodule update # must be done explicitly (--init --recursive)!

  # Making changes, first make sure up-to-date with remote
  #
  git cout master # in submodule, to make changes, commit/push must be on both!

  # If already made changes (in sub/):
  git stash
  git cout master
  git stash pop

  # Remove submodule.
  #
  git submodule deinit sub
  git rm sub # then commit