1 安装Git
1.1 Windows
从官网下载, 直接默认安装即可。
2 从远程仓库克隆开始一个项目
2.1 一个基本操作的示例
GitLab上已创建了空白的仓库,先克隆远程仓库到本地
1
| $ git clone git@gitlab.xxx.net:leon.li/git-demo.git
|
创建一个README.md文件,并提交到本地仓库。
1 2 3 4
| $ cd git-demo/ $ touch README.md $ git add README.md $ git commit -m "create readme."
|
推送到远程master分支。
1 2 3 4 5 6
| $ git push Counting 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。
我们先看看本地和远程有哪些分支。
1 2 3
| $ git branch -a * master remotes/origin/master
|
我们先在本地创建一个develop分支。
1 2 3 4 5
| $ git branch develop $ git branch -a develop * master remotes/origin/master
|
可以看到,我们已成功创建了develop分支。
先切换到develop分支。
1 2
| $ git checkout develop Switched to branch 'develop'
|
再推送到远程develop(此时远程还没有develop分支)。
1 2 3 4 5 6 7 8 9
| $ git push -u origin develop Total 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 从本地仓库开始一个项目
如果项目的远程仓库还没有创建,我们可能需要从本地仓库开始一个项目。
1 2 3
| $ mkdir git-demo2 $ cd git-demo2 $ git init
|
本地仓库建好了。
创建一个README.md,并提交到本地仓库。
1 2 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
|
再推送到远程仓库。
1 2 3 4 5 6 7
| $ git push -u origin master Counting 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 配置
1 2 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 分支
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
| 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 远程仓库
1 2 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 查看日志
1 2 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 提交/合并/撤销
1 2 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
1 2 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 标签
1 2 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之后的修改
1 2
| git reset --hard 80921b6cddb3f6465f50cadbef5bc33aeb0d48f git push -f
|
修改最近一次commit的message
1
| git commit --amend -m "New commit message" --no-edit
|
将commit从某个分支拷贝到另外一个分支
1 2 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”
1 2 3 4 5
| $ git config --global --unset http.proxy $ git config --global --unset https.proxy
$ git config --local http.postBuffer 1073741824
|
7. 推荐阅读