一、一些基本操作介绍
1 创建仓库
选择一个合适的目录,通过 git init
命令把这个目录变成Git可以管理的仓库:
$ git init
然后会发现当前目录下多了一个.git
的目录(默认隐藏),这个目录就是Git的版本库,是Git来跟踪管理版本和分支的,一般不需要手动修改。
2 把文件添加到仓库
- 选择待添加的文件。
$ git add readme.md
$ git add . # 上传当前文件夹所有文件
- 用命令
git commit -m"<message>"
告诉Git,把文件提交到仓库
$ git commit -m "wrote a readme file"
这里的message
相当于版本的标志,要起成有意义的名字
注: 可以多次add
不同的文件,最后一次性commit
。
$ git add file1.txt
$ git add file2.txt file3.txt
$ git commit -m "3 files are added."
此时可以用 git status
查看当前文件区的状态:
$ git status
On branch master
nothing to commit, working tree clean
# 说明当前分支下所有文件均已commit,工作区是“干净”的
3 从远程库克隆
在本地的合适目录下,使用git clone [你要克隆的远程仓库地址]
命令克隆。
注意到,GitHub给出的地址不止一个。实际上,Git支持多种协议,默认的git://
使用ssh,但也可以使用https等其他协议。
$ git clone https://github.com/user-name/repo-name.git
$ git clone git@github.com/user-name/repo-name.git
克隆结束后,目录下自动会有一个.git
的隐藏目录,因为是clone来的,所以.git
文件夹里存放着与远程仓库一模一样的版本库记录。clone操作是一个从无到有的克隆操作,再次强调不需要git init
初始化。
注:基于ssh协议进行远程仓库连接,经常出现意想不到的坑(比如Please make sure you have the correct access rights
and the repository exists.),所以建议都用http协议。
4 把本地库的内容推送到远程库
- 将已有的本地仓库关联远程库。
$ git romote add origin [你要上传的远程仓库地址]
如出现 fatal: remote origin already exists
. 意思是仓库名重复,需要先移除已有关联:
# 查看当前关联
$ git remote -v
# 移除关联origin
$ git remote rm origin
# 也可以尝试修改远程仓库的简写名
$ git remote rename origin old-origin
- 用
git push
命令把本地库的内容推送到远程
$ git push -u origin master
这里实际上是把本地当前分支master推送到远程。
由于远程库是空的,我们第一次推送master分支时,加上了-u
参数,Git不但会把本地的master分支内容推送到远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。
5 删除文件
考虑已经在工作区删除了文件,那么,一般在git操作中有两种场景:
(1)彻底删除
此时工作区和版本库就不一致了,所以先从版本库中删除该文件,然后用commit提交新版本。
$ git rm readme.md
$ git commit -m "remove readme.md"
(2)撤销删除
此时可以从版本库中还原出删除前最近版本的文件
$ git checkout -- readme.md
6 分支管理基本操作
# 查看当前所有分支(分支树)
$ git branch
# 创建分支
$ git branch <name>
# 切换分支
$ git checkout <name>
# 或者
$ git switch <name>
# 创建+切换分支(建议使用)
$ git checkout -b <name>
# 或者
$ git switch -c <name>
# 合并某分支到当前分支
$ git merge <name>
# 删除分支
$ git branch -d <name>
7 分支推送与拉取
- 推送分支
把该分支上的所有本地提交推送到远程库。
git push的一般形式为git push <远程主机名> <本地分支名> <远程分支名>
。
一般远程分支默认与本地分支相同。推送时,指定本地分支,这样,Git就会把该分支推送到远程库对应的远程分支上。
$ git push origin <branch-name>
- 抓取分支
拉取远程分支更新到本地仓库的操作。
git pull的一般形式为git pull <远程主机名> <远程分支名>:<本地分支名>
将远程主机origin的master分支拉取过来,与本地的branchtest分支合并。
比如远程仓库里的学习资料有了新版本,需要把新版本的内容获取下来然后再与本地分支merge(合并)。默认情况下是把远程仓库的master分支拉去到本地当前分支:
$ git pull origin
事实上,git pull = git fetch + git merge
,即:
$ git pull origin master:branchtest
# 等价于
$ git fetch origin master:brantest
$ git merge brantest
如果想要更加可控一点的话推荐使用fetch + merge。
二、实际应用操作举例
1 从本地仓库推送文件到自己分支的远程仓库的全过程
辅助理解的阅读推荐:git使用的简易指南
# 选择一个合适的目录,新建仓库
$ git init
# 将已有的本地仓库关联远程库
$ git romote add origin [你要上传的远程仓库地址]
# 创建+切换分支
$ git checkout -b <name>
$ git pull origin <name> # 若远程库有更新,则需先抓取分支,拉取远程分支更新到本地仓库的操作。
$ git add . # 上传当前文件夹所有文件
$ git commit -m "update" # 告诉Git,把文件提交到仓库
$ git status # 查看当前文件区的状态
$ git push origin <name> # 把本地分支推送到远程库对应的远程分支上
2 关于Gitlab的ip地址变更后的操作记录
git remote rm origin # 先删除
git remote add origin http://github.com/tencent-project/test.git # 再添加新的git地址
# 然后再从本地仓库推送文件到自己分支的远程仓库
$ git pull origin <name> # 若远程库有更新,则需先抓取分支,拉取远程分支更新到本地仓库的操作。
$ git add . # 上传当前文件夹所有文件
$ git commit -m "update" # 告诉Git,把文件提交到仓库
$ git status # 查看当前文件区的状态
$ git push origin <name> # 把本地分支推送到远程库对应的远程分支上