Git 的四个工作区域
创建远程库与本地库
1 2 3 4 5
| # https://github.com/xxxx/remote-test.git
$ git init remote-test
|
Git 配置远程库别名
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| $ cd remote-test
$ git remote -v
$ git remote add origin https://github.com/xxxx/remote-test.git
$ git remote rm origin
$ git remote rename origin origin2
|
Git 远程库的 Pull 与 Push 操作
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| $ cd remote-test
$ git pull origin master
$ touch api.json
$ git add api.json
$ git commit api.json -m 'update'
$ git push origin master
|
Git 远程库的 Clone 操作
1 2 3 4 5 6 7 8 9 10
| $ git clone https://github.com/xxxx/remote-test.git
$ git clone https://github.com/xxxx/remote-test.git remote-project
|
Git 远程库的 Fetch 操作
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| $ git fetch origin master
$ git diff master origin/master
$ git diff HEAD FETCH_HEAD
$ git merge origin/master
$ git merge FETCH_HEAD
|
解决 Pull 操作产生的冲突
Pull = Fetch + Merge,也就是说根本问题是 “如何解决合并分支后产生的冲突”
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| # git pull origin master
$ vim api.json <<<<<<< HEAD edit by hot_fix s ======= edit by hot_fix2 >>>>>>> master
$ git add api.json
$ git commit -m 'update message'
|
解决 Push 失败的问题
如果不是基于远程库的最新版本所做的修改,不能进行 Push 操作,必须先将远程库最新版本的文件 Pull 下来再进行 Push 操作。Pull 下来之后如果文件产生冲突,则按照上面” 解决 Pull 操作产生的冲突” 的步骤进行操作。
Git 远程库的分支创建操作
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| $ git branch develop
$ git checkout develop
$ git add --all
$ git commit -am 'create branch develop'
$ git push origin develop
|
SSH 免密码登录 Github
当远程库的地址是基于 HTTPS 协议的时候,每次 Push 操作都需要手动输入 Github 的用户名和密码;Windows 系统下会自动保存凭据(帐号信息),可以避免每次都手动输入帐号信息;而 Linux 下则没有自动保存凭据的功能,因此 Github 官方提供了基于 SSH 免密码登录的方式进行 Push 操作,以此来解决每次都要输入帐号信息的问题;SSH 免密码登录的方式同样适用于 Windows 系统,此方法的局限性在于本地只能操作一个 Github 帐号。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| $ cd ~/.ssh
$ ssh-keygen -t rsa -C xxxx@gmail.com
$ ssh-keygen -t rsa -C xxxx@gmail.com -f id_rsa.github
$ cat id_rsa.pub
$ cd remote-test
$ git remote rm origin
$ git remote add origin git@github.com:xxxx/remote-test.git
$ git push origin master
|
Github Fork 的项目和上游项目同步代码
当成功 Fork 一个项目后,无论怎么修改 Fork 出来的项目,原来的项目(Github 叫做 upstream,一般译作上游项目)是不会受到影响的,这在上游项目来说自然是极好的保护。但是 Fork 出来的项目如何能够及时反映上游项目的变更呢?这就首先需要设置本地项目的 “远程仓库” 属性,即告诉 Git 命令,本地项目的上游项目是哪一个,比如下面针对 weld-core
项目举例。
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
| $ git remote add upstream https://github.com/weld/core
$ git remote -v origin https://github.com/subaochen/core.git (fetch) origin https://github.com/subaochen/core.git (push) upstream https://github.com/weld/core (fetch) upstream https://github.com/weld/core (push)
$ git fetch upstream
$ git branch -a * 2.0 remotes/origin/1.1 remotes/origin/1.2 remotes/origin/2.0 remotes/origin/2.0.0 remotes/origin/2.0.0.Beta5-branch remotes/origin/HEAD -> origin/2.0 remotes/origin/master remotes/upstream/1.1 remotes/upstream/1.2 remotes/upstream/2.0 remotes/upstream/2.0.0 remotes/upstream/2.0.0.Beta5-branch remotes/upstream/2.1 remotes/upstream/2.2 remotes/upstream/2.2.0 remotes/upstream/2.3 remotes/upstream/eap6.2.x remotes/upstream/master remotes/upstream/weld-osgi-2.x
$ git checkout origin/master
$ git merge upstream/master
$ git push origin master
$ git pull upstream master
|
Git 从远程仓库获取特定分支
1 2 3 4 5 6 7 8 9 10
| $ git branch -a remotes/origin/dev remotes/origin/release
$ git checkout -b dev origin/dev
$ git checkout master
|
清空 Github 特定的仓库
清空 Github 特定的仓库,而不是删除并重新创建仓库,同时保留本地仓库原来的所有文件。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| $ mkdir -p /tmp/reset-repo
$ /tmp/reset-repo
$ touch README.md
$ git init $ git add . $ git commit -m "Initial commit"
$ git remote add origin git@github.com:<YOUR ACCOUNT>/<YOUR REPOS>.git
$ git push -u --force origin master
|
.gitignore 常用模板