一、创建git仓库
# 将当前目录初始化为git仓库,等价于:git init .
$ git init
$ git init repo-dir # 将指定的目录初始化为git仓库 (如果指定的目录不存在,则创建)
二、创建分支、添加内容、提交内容
$ git branch -l # 列出所有存在的分支 (本地)
$ git branch -a # 列出所有分支 (本地和远程)
# 刚创建的仓库没有任何分支,第一次执行 "git add something" 后,会生成一个分支master分支,但是并未正则创建,第一次commit提交后会真正的创建master分支。
# 创建个文件并输入一点内容 "vim hello.c" 输入一点内容
$ git add hello.c # 向当前分支添加文件
$ git add . # 添加当前目录下的所有文件 (包括当前目录下的子目录中的文件)
$ git status # 查看当前状态 (会有 On branch master,此时用 git branch -l查看,还是没有任何分支)
$ git commit -m "添加第一个文件" # 此时已经生成了第一个分支:master (此时执行 "git branch -l" 可以看到master分支了)
$ git branch # 查看当前位于哪个分支上
$ git branch new-branch-name # 创建一个分支,如果new-branch-name已经存在,则报错。
# tips:git branch branch-name,
# 1. 是基于当前分支创建新的分支,branch_name分支 与 当前所在分支的内容一样。
# 2. 只是创建一个新分支,并不会切换。
$ git branch -d test # 删除本地分支 test。
# 切换分支
$ git checkout branch-name # 切换分支
$ git checkout -b new-branch-name # 创建并切换分支
$ git log # 查看当前分支的提交记录
三、将本地git仓库,上传到 gitee 或 github
在github上创建一个仓库,并配置SSH key。(如何在github上创建仓库,以及如何配置SSH key,请自行百度)
# 将本地仓库与github上的仓库关联起来
# git remote add origin https://github.com/phoenix19900219/jni-demo.git
$ git remote add origin https://gitee.com/stone100/jni-demo.git
############################################
############################################
# 由于github抽风, 下面这段不是正常流程 (后面改用gitee)
$ git pull # pull前需要把当前分支与远程分支关联起来,另外要使用--rebase来合并本地与远程的内容,避免远程分支的内容把本地内容给覆盖了
remote: Enumerating objects: 5, done.
remote: Counting objects: 100% (5/5), done.
remote: Compressing objects: 100% (4/4), done.
remote: Total 5 (delta 0), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (5/5), 4.70 KiB | 687.00 KiB/s, done.
From https://github.com/phoenix19900219/jni-demo
* [new branch] main -> origin/main
There is no tracking information for the current branch.
Please specify which branch you want to merge with.
See git-pull(1) for details.
git pull <remote> <branch>
If you wish to set tracking information for this branch you can do so with:
git branch --set-upstream-to=origin/<branch> master
# github上创建git仓库时,创建的默认分支是main
$ git branch -a # 发现了一个远程分支:remotes/origin/main
* master
remotes/origin/main
# 创建一个main分支并切换到main分支上
$ git checkout -b main
# 将当前分支与远程分支关联起来
$ git branch --set-upstream-to=origin/main
$ git pull --rebase
$ git remote # 查看关联的远程仓库有哪些
$ git remote remove origin # 删除远程仓库
############################################
############################################
# 拉取远程仓库origin上的master分支,并与当前分支合并
$ git pull --rebase origin master
# git push 命令的格式如下:
# git push <远程主机名> <本地分支名>:<远程分支名>
# git push # 如果只有一个远程主机(远程仓库),那么远程仓库可省略,默认的本地分支为当前分支,默认的远程分支为本地分支所关联的那个分支。
# 本地分支如何关联远程分支??
$ git branch -a # 列出本地和远程分支,输出如下:
* master
remotes/origin/master
$ git branch -u remotes/origin/master # 将当前分支与远程分支remotes/origin/master关联起来
# git branch 的参数:
# -u, --set-upstream-to <upstream>
# change the upstream info
# --unset-upstream unset the upstream info
# 说明:
# -u, --set-upstream-to 设置当前分支关联的远程分支
# --unset-upstream 取消当前分支关联的远程分支
# remote仓库如果是多个则需要指明
# git push origin # 指明remote仓库为origin
# git push origin master # 指明远程仓库和远程分支
$ git push origin master:remotes/origin/master # 指明远程仓库, 本地分支, 远程分支
四、从github上clone一个项目到本地
# git clone 远程仓库名
# 如:
$ git clone https://gitee.com/stone100/jni-demo.git
五、把远程仓库内容更新到本地
# 1. 关联远程仓库
$ git remote add orgin <remote-repo-url>
# 2. 关联某个远程仓库的某个分支
$ git branch -u remote-branch-name # 可以使用 "git branch -a" 查看远程分支的名称
# 3. 拉取并合并
$ git branch --rebase origin master
# 当然,你也可以使用 git fetch + git merge 的方式,来实现更新同步。
# 关于:rebase 和 merge 的区别:
# https://www.cnblogs.com/kevingrace/p/5896706.html
六、总结
在本地建立一个git仓库并推送到gitee或github上的流程:
# 1. 初始化git仓库
$ git init git-demo
# 2. 添加一点东西 并 提交
$ git add hello.cpp
$ git commit -m "第一提交"
# 3. 在gitee 或 github 上创建一个repository
# 4. 将本地仓库与gitee或github上的仓库关联起来
$ git remote add origin https://gitee.com/stone100/jni-demo.git
# 5. 把当前分支与远程仓库的分支关联起来
$ git branch -u remotes/origin/master # 使用 "git branch -a" 来查看远程分支的名称
# 6. 拉取远程分支内合并到本地分支
$ git pull --rebase origin master
# 7. 将本地内容推送到远程仓库
$ git push origin master:remotes/origin/master