1 安装Git
1.1 Windows
从官网下载, 直接默认安装即可。
2  从远程仓库克隆开始一个项目
2.1  一个基本操作的示例
GitLab上已创建了空白的仓库,先克隆远程仓库到本地
| 1
 | $ git clone git@gitlab.xxx.net:leon.li/git-demo.git
 | 
创建一个README.md文件,并提交到本地仓库。
| 12
 3
 4
 
 | $ cd git-demo/$ touch README.md
 $ git add README.md
 $ git commit -m "create readme."
 
 | 
推送到远程master分支。
| 12
 3
 4
 5
 6
 
 | $ git pushCounting objects: 3, done.
 Writing objects: 100% (3/3), 207 bytes | 103.00 KiB/s, done.
 Total 3 (delta 0), reused 0 (delta 0)
 To gitlab.xxx.net:leon.li/git-demo.git
 * [new branch]      master -> master
 
 | 
2.2  创建develop分支并推送到远程
在我们现行的项目Git规范下,一般有两个分支,master和develop。
我们先看看本地和远程有哪些分支。
| 12
 3
 
 | $ git branch -a* master
 remotes/origin/master
 
 | 
我们先在本地创建一个develop分支。
| 12
 3
 4
 5
 
 | $ git branch develop$ git branch -a
 develop
 * master
 remotes/origin/master
 
 | 
可以看到,我们已成功创建了develop分支。
先切换到develop分支。
| 12
 
 | $ git checkout developSwitched to branch 'develop'
 
 | 
再推送到远程develop(此时远程还没有develop分支)。
| 12
 3
 4
 5
 6
 7
 8
 9
 
 | $ git push -u origin developTotal 0 (delta 0), reused 0 (delta 0)
 remote:
 remote: To create a merge request for develop, visit:
 remote:   http://gitlab.xxx.net/leon.li/git-demo/merge_requests/new?merge_request%5Bsource_branch%5D=develop
 remote:
 To gitlab.xxx.net:leon.li/git-demo.git
 * [new branch]      develop -> develop
 Branch 'develop' set up to track remote branch 'develop' from 'origin'.
 
 | 
2.3  用Git Flow创建develop分支
如果你安装了Git Flow, 那么可以以下面的姿势来玩。
此时本地已创建了develop分支,并自动切换到develop了。
再推送到远程。
| 1
 | $ git push -u origin develop
 | 
3 从本地仓库开始一个项目
如果项目的远程仓库还没有创建,我们可能需要从本地仓库开始一个项目。
| 12
 3
 
 | $ mkdir git-demo2$ cd git-demo2
 $ git init
 
 | 
本地仓库建好了。
创建一个README.md,并提交到本地仓库。
| 12
 3
 4
 5
 6
 
 | $ touch README.md$ git add README.md
 $ git commit -m "create readme."
 [master (root-commit) 1f72271] create readme.
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 README.md
 
 | 
假设此时远程仓库已经建好了,添加远程仓库。
| 1
 | $ git remote add origin git@gitlab.xxx.net:leon.li/git-demo2.git
 | 
再推送到远程仓库。
| 12
 3
 4
 5
 6
 7
 
 | $ git push -u origin masterCounting objects: 3, done.
 Writing objects: 100% (3/3), 206 bytes | 206.00 KiB/s, done.
 Total 3 (delta 0), reused 0 (delta 0)
 To gitlab.xxx.net:leon.li/git-demo2.git
 * [new branch]      master -> master
 Branch 'master' set up to track remote branch 'master' from 'origin'.
 
 | 
4  常用Git命令
4.1 配置
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 
 | git config --list
 
 git config --global http.proxy 'socks5://127.0.0.1:1080'
 git config --global https.proxy 'socks5://127.0.0.1:1080'
 
 git config --global http.https://github.com.proxy socks5://127.0.0.1:1080
 git config --global https.https://github.com.proxy socks5://127.0.0.1:1080
 
 git config --global --unset http.proxy
 git config --global --unset https.proxy
 
 git config --global http.postBuffer 524288000
 
 | 
4.2 分支
| 12
 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
 
 | git branch
 
 git branch -a
 
 git branch br1
 
 git checkout br1
 
 git checkout -b br1
 
 git fetch origin
 git checkout br1
 
 git branch -d br1
 
 git push origin :br1
 
 git push origin :refs/heads/release_3.2.2
 
 git branch --set-upstream-to=origin/dev
 
 git diff br1..br2
 
 git diff ..br2
 
 git branch -m 3.4.0 download_opt
 
 
 git branch -m 3.4.0 download_opt
 git push -u origin download_opt:3.4.0
 git push origin :3.4.0
 
 | 
4.3 远程仓库
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 
 | git clone git@gitlab.xxx.net:leon.li/git-demo.git
 
 git clone git@gitlab.xxx.net:leon.li/git-demo.git --depth=1
 
 git pull --unshallow
 
 git remote add origin git@gitlab.xxx.net:leon.li/git-demo2.git
 
 git remote set-url origin new.git.url/here
 
 git remote show origin
 
 git remote prune origin
 
 git push origin develop
 
 git push -u origin develop
 
 git push -f
 
 | 
4.4 查看日志
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 
 | git log calculate.js
 git log --pretty=oneline calculate.js
 
 git log --pretty=format:"%h%x09%an%x09%ad%x09%s"
 
 
 
 
 
 
 git log --name-status HEAD^..HEAD
 
 git log -1
 git show ${commit_id}
 
 | 
4.5 提交/合并/撤销
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 
 | git checkout .
 
 git checkout -- book.cpp
 
 
 
 git reset --soft HEAD^
 
 git reset --hard 80921b6cddb3f6465f50cadbef5bc33aeb0d48f
 
 git reset --hard origin/branch_name
 
 git commit --amend -m "New commit message"
 
 git merge --squash br1
 git commit -m "new commit log"
 
 git merge --no-ff br1
 
 | 
4.6 submodule
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 
 | git submodule
 
 git submodule add git@github.com:codelibs/libdxfrw.git party3/libdxfrw
 
 git submodule add -b branch_name git@github.com:codelibs/libdxfrw.git party3/libdxfrw
 
 git submodule init
 
 git submodule update
 
 git submodule update --init --recursive
 
 git submodule deinit -f party3/libiconv
 git rm -f party3/libiconv
 git commit -m "removed submodule"
 rm -rf .git/modules/party3/libiconv/
 
 | 
4.7 标签
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 
 | git tag release_3.2.3
 
 git tag release_3.2.0 4ece098e
 
 git push origin release_3.2.3
 
 git tag -d release_3.2.3
 
 git push origin :refs/tags/release_3.2.3
 
 git checkout -b <New Branch Name> <TAG Name>
 
 | 
4.8 其他
5. 常见应用场景
回滚到某次commit, 且不保留那次commit之后的修改
| 12
 
 | git reset --hard 80921b6cddb3f6465f50cadbef5bc33aeb0d48fgit push -f
 
 | 
修改最近一次commit的message
| 1
 | git commit --amend -m "New commit message" --no-edit
 | 
将commit从某个分支拷贝到另外一个分支
| 12
 3
 
 | git checkout <目标分支>git cherry-pick --no-commit <要拷贝的commit_hash>
 git cherry-pick --no-commit <start_commit_hash>^..<end_commit_hash>
 
 | 
6. 常见问题
push到远程仓库时出现错误”error: RPC failed; HTTP 502 curl 22 The requested URL returned error: 502”
| 12
 3
 4
 5
 
 | $ git config --global --unset http.proxy
 $ git config --global --unset https.proxy
 
 $ git config --local http.postBuffer 1073741824
 
 | 
7. 推荐阅读