Git 简单使用步骤
记录 Git 应用的逻辑步骤和常用命令
开始篇
使用 Git 管理项目(不一定是代码)有两种方式开始,第一种从远程到本地,即先建立远程库后 git clone
到本地目标路径,此种方式用于新建一个空项目之后与本地路径关联起来。第二种从本地到远程,即先建立本地项目并可以任意先编辑,待到准备同步到远程库时,依次使用指定命令初始化本地仓库、将文件新增至版本库、提交更改、关联远程库、推送至远程库。
第一种方式逻辑上感觉比较“顺”,第二种方式更适合工作还没有具体规划,先在本地任意编辑,待到合适时候再创建并推送上远程库。
第二种方式的逻辑与命令:
cd xxx (切换到要创建 Git 管理的根目录)
git init(初始化,将当前目录设置为 Git 可管理的目录)
git add <file> (将文件添加到版本库,即将该文件纳入管理范围)
git commit -m <comment> (提交所有 add 到版本库)
git push <远程库名称> <分支名称> (将 commit 之后的内容更新到远程库)
关系篇
有一个图片比较好的描述了本地、自有远程库和他人库的关系
所以,使用 Git 时最多的工作就三步,编辑文件
、git add <file>
、git commit
。
分支是 Git 的灵魂之一,创建库时默认是 master
分支,一个人的、简单的工作可以一直在该分支上提交更新没有问题,但即便是一个人,某天希望开发一个新功能又不想影响当前工作,最好的版本就是开辟出一个分支,在分支上进行任意操作,而不会影响主线 master
的任何内容,多么完美。
随时使用 git branch <branch name>
创建一个分支,使用 git checkout <branch name>
切换到该分支进行工作,以后再有 git add
、git commit
时也不会影响到其他分支,分支也可以使用 git push
提交到远程库,Git 将在远程库自动创建该分支。
本地目录是同一个目录,难道在 B 分支上创建或删除一个文件,不会影响 A 分支吗?
我也纳闷儿和担心,可以看看切换分支时工作目录有什么变化。先创建一个名叫 branchMD
的分支并切换到该分支下,删除 master
分支下的 EchoWord.go
文件,新增 addNewBranch.md
和 meta
两个文件(两个文件没有任何实际意义,只为与 master
分支内容区别开来),在新建分支下变更提交到版本库。
现在拥有了两个分支,使用 git checkout <branch name>
切换并观察本地目录看一下
上图是 master
分支目录内容
上图是 branchMD
分支目录内容
可以看到,切换不同分支,工作目录中内容自动变了,Git 为我们做了很多贴心的事情。
随着工作需要,很多分支编辑后自然需要合并到一处。当确认了分支 B 的所有变更,要把 B 合并到 A 时,就先切换到 A 分支,然后运行合并命令,如将刚才的分支合并到 master
,但要注意,此操作将认为是认可了 B 从创建后的所有“变更”,并将这种变更后的结果应用到 A 分支上。刚才说到,branchMD
分支移除了一个文件,新增了两个文件,那么如果合并成功,master
分支中的唯一文件 EchoWord.go
也应该是被移除,并新增两个文件。
git checkout master
git merge branchMD
将变更 git push
到远程库看一下结果,master
分支也变得和 branchMD
内容一样了。
分支没用时,删除它,Git 鼓励大量创建和使用分支来进行工作,就像我们做word时候的副本。
命令篇
- 创建
- (将本地目录)初始化为一个 Git 的工作区:
git init
- (将本地目录)初始化为一个 Git 的工作区:
- 添加与提交
- 从工作区添加文件到版本库:
git add <file-name>
- 从工作区添加所有文件到版本库:
git add .
- 从工作区添加文件到版本库:
- 撤销
- 丢弃工作区的修改:
git checkout -- <file>
- 丢弃暂存区修改将工作区回复到最新(后)保存的一个版本:
git reset HEAD <file>
- 版本回退到指定版本:
git reset --hard <commit_id>
- 丢弃工作区的修改:
- 删除
- 从版本库中删除文件:
git rm <file>
- 用版本库中文件替换工作区内容(与丢弃工作区修改操作的结果一样):
git checkout -- <file>
- 从版本库中删除文件:
- 关联
- 本地仓库与远程库关联:
git remote add <本地仓库名称> <远程库地址:git@gitee.com:xxx>
- 版本库推送到远程库:
git push <option> <与远程库关联的本地仓库名称> <分支名称>
- 从远程库拉取内容更新本地库:
git pull <与远程库关联的本地库名称> <分支名称>
- 本地仓库与远程库关联:
- 分支
- 查看分支:
git branch
- 创建分支:
git branch <branch-name>
- 切换分支:
git checkout <branch-name>
- 创建+切换:
git checkout -b <branch-name>
- 合并分支到指定分支:
git merge <待合并的分支>
- 删除分支:
git branch -d <branch-name>
- 查看分支: