1. 获取仓库

1.1. 新建仓库

仓库:respository,可理解为一个目录,该目录下所有文件都可被Git管理。

  • 创建文件夹,打开,执行下面命令创建新仓库

    • git init
    • 注:该命令将初始化一个 .git 的目录来跟踪管理 repository

1.2. 克隆仓库

  • 执行下面命令创建本地仓库的克隆版

    • git clone /path/to/repository
  • 克隆远程服务器上的仓库

    • git clone username@host:/path/to/repository

2. 基本快照

2.1. 工作流

我们的本地仓库由Git维护的三棵”树”组成:

  • 工作目录(working dir):存放实际使用文件
  • 暂存区(stage):缓存区域,临时保存修改的文件
  • HEAD:指向最后一次提交的结果(当前版本)

trees

上一个版本表示:HEAD^

2.2. 添加和提交

  • 将工作区的改动添加到暂存区(stage), 使用命令:

    • git add filename
    • git add *
    • 注:这是Git基本工作流程的第一步
  • 使用如下命令以实际提交改动

    • git commit -m “代码修改提交信息”
    • 注:该命令将修改已经提交到了HEAD,但是还没有到远程仓库
  • 查看工作区的状态

    • git status
  • 查看文件被修改的内容

    • git diff filename

2.3. 推送改动

  • Now, 你的改动已经在本地仓库的HEAD上。执行如下命令以将这些改动提交到远程仓库

    • git push origin master
    • 注:可以把master换成你想要推送的任何分支
  • 当我们没有克隆一个远程仓库到本地,但又想将仓库链接到远程的服务器,可以执行如下命令

    • git remote add origin server
    • 注:这样你就可以将改动的数据推送到所添加的服务器上去了

2.4. 替换本地改动

  • 当操作失误或需要还原文件时, 可使用如下命令替换掉本地的改动

    • git checkout – filename
    • 注:此命令会使HEAD中的最新内容替换掉你工作目录中的文件。已添加到暂存区的改动或新文件都不会受影响。
  • 我们可以将不小心已经缓存的修改从暂存区撤销掉,可以执行如下命令

    • git reset HEAD – filename
    • 注:简言之,取消 git add 的添加; 此外,git reset 还可以回退版本
  • 丢弃本地所有改动和提交,可以到服务器获取最新版本历史,并将你本地主分支指向它。

    • git fetch origin
    • git reset –hard origin/master

3. 分支

3.1. 创建和删除

分支,是用来将特性(feature)开发隔离出来的。当你在创建仓库的时候,master是默认分支。我们可以在其他分支进行开发,完成后将其合并到主分支(master)上。

branches

  • 创建一个feature分支, 并切换过去

    • git checkout -b feature_x
  • 切换回主分支

    • git checkout master
  • 再把新建的分支删掉

    • git branch -d feature_x
  • 除非你将分支推送到远程仓库,否则该分支就是为他们不可见的

    • git push origin feature_x
  • 删除远程分支

    • git push origin –delete [branch_name]

3.2. 更新与合并

  • 更新你的本地仓库代码到最新,执行

    • git pull
    • 注:This cmd 将在你的工作目录中 获取(fetch) 和 合并(merge) 远程仓库的改动。
  • 合并其他分支到你的当前分支(加入我要和并feature_x到master),执行

    • git branch
      • 查看当下分支是在master
    • git merge branch
      • git merge feature_x

在这两种情况下,git都会尝试去自动合并改动。但遗憾的是, 这个过程不是每次都会成功,可能出现冲突(conflicts), 这个时候你需要修改冲突文件并手动合并这些冲突。手动合并时可借助工具(Beyond Compare)比较文件差异。

  • 改完之后,你需要执行如下命令以将他们标记为合并成功

    • git add filename
  • 在合并改动之前,你可以使用如下命令预览差异

    • git diff source_branch target_branch

3.3. 重命名

在 git 中重命名远程分支:就是先删除远程分支,然后重命名本地分支,在提交一个新的远程分支

  • 删除远程分支

    • git push origin –delete [branch_name]
  • 重命名本地分支

    • git branch (-m|-M) [old_branch_name] [new_branch_name]
  • Push 改名后的分支

    • git push –set-upstream origin [new_branch_name]

4. 标签

  • 可用如下命令创建一个1.0.0的标签

    • git tag 1.0.0 1b2e1d63ff
    • 1b2e1d63ff 为你想要标记提交ID的前10为
  • 添加注解标签:在 tag 命令执行时添加 -a 选项, 此时会启动编辑区添加注解; 亦可通过 -m “注解内容” 完成添加

    • git tag -a [tagname]
    • git tag -a [tagname] -m “连猴子🐒都能懂得Git”
  • 可用如下命令查看ID(获取提交日志信息)

    • git log
  • 查看本地标签

    • git tag
    • git tag -n // -n 显示标签的列表和注解
  • 删除本地标签

    • git tag -d tag_name
  • 推送标签到远程服务器

    • git push origin tag_name
  • 删除远程标签

    • git push origin :refs/tags/tag_name

5. 日志

  • 使用如下命令了解本地仓库的历史纪录

    • git log
  • 你可以添加选项来修改他的数据,从而得到你想要的结果,只看某一个人的提交记录

    • git log –author=bob
  • 一个压缩后的,每条记录只占一行的输出

    • git log –pretty=online
  • 看看文件的改变记录

    • git log –name-status

6. 远程仓库

6.1. 设置远程地址

  • 修改

    • git remote set-url origin [url]
  • 先删后加

    • git remote rm origin
    • git remote add origin [url]
  • 直接修改配置文件

7. Git 工作流

8. FAQ

8.1. 配置Git账号

  • git config –global user.email “you@example.com”
  • git config –global user.name “Your Name”
  • 注: 添加 –global 表示全局配置,不加则只配置该仓库

8.2. 提高Github Clone速度

8.3. 密码相关

8.4. error fatal: HttpRequestException encountered

9. See Also

Thanks to the authors 🙂