1. 初始化本地仓库
参考之前的博客,不再赘述。
2. 在GitHub上创建仓库
右上角点击加号,new repository:
输入一些信息:
点击创建,就进入了这个页面:
我们找到远程库的地址,我们可以看到,有两种方式 一种是HTTPS的地址,还有一种SSH的地址,我们先用HTTPS的地址:
将地址复制下来。
以后我们每次提交的时候,都需要用到这个地址,可是每次我们都打这么长一串有点麻烦,所以我们可以在本地将地址保存,然后通过别名来访问。
查看别名:
本地Git,查看所有的远程地址的别名git remote -v
:
veeja@VeejaPC MINGW64 /e/code/Test (master)
$ git remote -v
我们现在还没有,所以没有输出任何信息。
添加别名:
使用git remote add 别名 地址
来添加并查看:
veeja@VeejaPC MINGW64 /e/code/Test (master)
$ git remote add test https://github.com/VeejaLiu/Test.git
veeja@VeejaPC MINGW64 /e/code/Test (master)
$ git remote -v
test https://github.com/VeejaLiu/Test.git (fetch)
test https://github.com/VeejaLiu/Test.git (push)
我们看到有两个别名,后面的括号里分别是fetch和push,fetch代表可以从仓库拉取,push代表可以向仓库推送。
3. 推送操作
新建一个文件,添加一些内容:
add && commit:
veeja@VeejaPC MINGW64 /e/code/Test (master)
$ git add demo.txt
veeja@VeejaPC MINGW64 /e/code/Test (master)
$ git commit -m "add file:demo.txt"
[master (root-commit) 5a98c03] add file:demo.txt
1 file changed, 1 insertion(+)
create mode 100644 demo.txt
接下来我们开始往仓库推送:
使用 git push 仓库别名 分支
,
对应我们这个例子,就是git push test master
:
如果中途弹出对话框,让我们输入密码,我们就输入自己的GitHub密码即可:
结果:
veeja@VeejaPC MINGW64 /e/code/Test (master)
$ git push test master
Enumerating objects: 3, done.
Counting objects: 100% (3/3), done.
Delta compression using up to 4 threads
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 220 bytes | 220.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
To https://github.com/VeejaLiu/Test.git
* [new branch] master -> master
我们返回GitHub刷新一下页面,可以看到,我们推送的demo.txt已经存在与仓库中了:
4. 克隆操作
上面讲了如何推送的操作,如果我们是团队协作,另一个人可能就需要从仓库拉取代码:
直接在文件夹下面,进行git clone 仓库地址
就可以了:
新出现的文件夹也是有完整的内容的:
我们进入该文件夹下,查看一下远程仓库的别名:
veeja@VeejaPC MINGW64 /g/code
$ cd Test/
veeja@VeejaPC MINGW64 /g/code/Test (master)
$ git remote -v
origin https://github.com/VeejaLiu/Test.git (fetch)
origin https://github.com/VeejaLiu/Test.git (push)
克隆操作帮我们完成了:
- 初始化本地仓库
- 将远程库内容完整的克隆到本地
- 帮我们给仓库起一个别名
5. 抓取操作
我们在另一个本地库里面,新建了一个文件demo2,add 、commit、 push
:
我们回到原来的本地库,是还没有修改的:
我们使用 git fetch
命令来从远程获取代码库。
veeja@VeejaPC MINGW64 /e/code/Test (master)
$ git fetch test master
remote: Enumerating objects: 4, done.
remote: Counting objects: 100% (4/4), done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 3 (delta 0), reused 3 (delta 0), pack-reused 0
Unpacking objects: 100% (3/3), 257 bytes | 21.00 KiB/s, done.
From https://github.com/VeejaLiu/Test
* branch master -> FETCH_HEAD
5a98c03..8ef5107 master -> test/master
veeja@VeejaPC MINGW64 /e/code/Test (master)
$
抓取操作只是将远程库的内容下载到本地,但是并不会将远程库的内容添加到工作区,我们现在的文件夹下面还是没有新的内容的:
抓取后,可以去远程库看看内容是否正确:
veeja@VeejaPC MINGW64 /e/code/Test (master)
$ git checkout test/master
Note: switching to 'test/master'.
You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.
If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:
git switch -c <new-branch-name>
Or undo this operation with:
git switch -
Turn off this advice by setting config variable advice.detachedHead to false
HEAD is now at 8ef5107 add demo2
veeja@VeejaPC MINGW64 /e/code/Test ((8ef5107...))
$ ll
total 2
-rw-r--r-- 1 veeja 197121 57 Jan 29 09:36 demo.txt
-rw-r--r-- 1 veeja 197121 20 Jan 29 10:16 demo2.txt
veeja@VeejaPC MINGW64 /e/code/Test ((8ef5107...))
$ cat demo2.txt
demo2.txtdemo2.txt
veeja@VeejaPC MINGW64 /e/code/Test ((8ef5107...))
$
如果我们发现内容都正确,就可以进行合并操作了。
切换回主分支,并进行合并操作:
veeja@VeejaPC MINGW64 /e/code/Test ((8ef5107...))
$ git checkout master
Previous HEAD position was 8ef5107 add demo2
Switched to branch 'master'
veeja@VeejaPC MINGW64 /e/code/Test (master)
$ git merge test/master
Updating 5a98c03..8ef5107
Fast-forward
demo2.txt | 1 +
1 file changed, 1 insertion(+)
create mode 100644 demo2.txt
veeja@VeejaPC MINGW64 /e/code/Test (master)
$
其实拉取的操作可以直接一步完成,就是使用 pull操作,可以理解为 pull操作就等于 fetch + merge操作。
6. 冲突的解决
如果遇到冲突,需要拉取远程代码,然后手动合并代码,再进行add commit操作,重新push到远程仓库。跟本地的冲突合并有些类似,就不再赘述。