Git 简单使用

Git 简单使用步骤

记录 Git 应用的逻辑步骤和常用命令

开始篇

使用 Git 管理项目(不一定是代码)有两种方式开始,第一种从远程到本地,即先建立远程库后 git clone 到本地目标路径,此种方式用于新建一个空项目之后与本地路径关联起来。第二种从本地到远程,即先建立本地项目并可以任意先编辑,待到准备同步到远程库时,依次使用指定命令初始化本地仓库、将文件新增至版本库、提交更改、关联远程库、推送至远程库。

第一种方式逻辑上感觉比较“顺”,第二种方式更适合工作还没有具体规划,先在本地任意编辑,待到合适时候再创建并推送上远程库。

第二种方式的逻辑与命令:

cd xxx (切换到要创建 Git 管理的根目录)
git init(初始化,将当前目录设置为 Git 可管理的目录)
git add <file> (将文件添加到版本库,即将该文件纳入管理范围)
git commit -m <comment> (提交所有 add 到版本库)
git push <远程库名称> <分支名称> (将 commit 之后的内容更新到远程库)

关系篇

有一个图片比较好的描述了本地、自有远程库和他人库的关系
forking工作流

所以,使用 Git 时最多的工作就三步,编辑文件git add <file>git commit

分支是 Git 的灵魂之一,创建库时默认是 master 分支,一个人的、简单的工作可以一直在该分支上提交更新没有问题,但即便是一个人,某天希望开发一个新功能又不想影响当前工作,最好的版本就是开辟出一个分支,在分支上进行任意操作,而不会影响主线 master 的任何内容,多么完美。

随时使用 git branch <branch name> 创建一个分支,使用 git checkout <branch name> 切换到该分支进行工作,以后再有 git addgit commit 时也不会影响到其他分支,分支也可以使用 git push 提交到远程库,Git 将在远程库自动创建该分支。

本地目录是同一个目录,难道在 B 分支上创建或删除一个文件,不会影响 A 分支吗?

我也纳闷儿和担心,可以看看切换分支时工作目录有什么变化。先创建一个名叫 branchMD 的分支并切换到该分支下,删除 master 分支下的 EchoWord.go 文件,新增 addNewBranch.mdmeta 两个文件(两个文件没有任何实际意义,只为与 master 分支内容区别开来),在新建分支下变更提交到版本库。

现在拥有了两个分支,使用 git checkout <branch name> 切换并观察本地目录看一下

master分支
上图是 master 分支目录内容

branchMD分支
上图是 branchMD 分支目录内容

可以看到,切换不同分支,工作目录中内容自动变了,Git 为我们做了很多贴心的事情。

随着工作需要,很多分支编辑后自然需要合并到一处。当确认了分支 B 的所有变更,要把 B 合并到 A 时,就先切换到 A 分支,然后运行合并命令,如将刚才的分支合并到 master,但要注意,此操作将认为是认可了 B 从创建后的所有“变更”,并将这种变更后的结果应用到 A 分支上。刚才说到,branchMD 分支移除了一个文件,新增了两个文件,那么如果合并成功,master 分支中的唯一文件 EchoWord.go 也应该是被移除,并新增两个文件。

git checkout master
git merge branchMD

将变更 git push 到远程库看一下结果,master 分支也变得和 branchMD 内容一样了。
远程库中master分支结果

分支没用时,删除它,Git 鼓励大量创建和使用分支来进行工作,就像我们做word时候的副本。

命令篇

  • 创建
    • (将本地目录)初始化为一个 Git 的工作区:git init
  • 添加与提交
    • 从工作区添加文件到版本库: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>

一些链接和引用

posted @ 2019-03-04 10:35  试试手气  阅读(240)  评论(0编辑  收藏  举报