GitPro摘录
只会用add, commit, push, pull, checkout, reset, merge, stash. 重新系统的学一下Git. 因此这里只记录我认为我不清楚的部分.
之前在某个图形化学git的网站学过rebase, cherry-pick之类的命令, 不过生产实践中基本没用过, 荒废了.
现在在GitPro中重新整理学习一下这些命令.
1. Git基础
-
git status -s: 简化的git status, 只显示状态, 不显示详细信息.
-
.gitignore:
1 |
|
一个针对不同语言的.gitignore示例:https://github.com/github/gitignore
- git rm: 从工作目录中删除文件, 并将这次删除放入暂存区. 在git目录下删除文件, 需要使用git rm 来代替 rm.
- git rm --cached: 只在版本库中删除文件, 但是在本地仍然存在.
- git mv: 重命名文件, 并将这次重命名放入暂存区. 在git目录下重命名文件, 需要使用git mv 来代替 mv.
- git log -S function_name: 查找引入function_name的commit.
- git commit --amend: 撤销上一次的提交操作, 并将暂存区的文件重新提交. 用于修改上一次提交的注释, 或者漏掉的文件.
1 |
|
- git reset HEAD file: 撤销暂存区的file文件.
- git checkout – file: 撤销工作目录的file文件. 取消本地对file文件所做的一切修改.
2. 分支
- fast-forward: 当你试图合并两个分支时, 如果顺着一个分支走下去能够到达另一个分支,那么 Git 在合并两者的时候, 只会简单的将指针向前推进(指针右移),因为这种情况下的合并操作没有需要解决的分歧——这就叫做 “快进(fast-forward)”。
- git branch:
- git branch -d: 删除分支(已合并)
- git branch -D: 强制删除, 哪怕那个分支上的工作没有合并过.
- git branch --merged: 查看已经合并到当前分支的分支. 在这个列表中分支名字前没有 * 号的分支通常可以使用 git branch -d 删除掉;你已经将它们的工作整合到了另一个分支,所以并不会失去任何东西。
- git pull:
git pull == git fetch && git merge
. 由于 git pull 的魔法经常令人困惑所以通常单独显式地使用 fetch 与 merge 命令会更好一些。 - git push --delete: 删除远程分支.
- git rebase: 为了确保在向远程分支推送时能保持提交历史的整洁.
- git rebase --onto: 从一个分支上取出一系列的提交, 并在另一个分支上重新应用.
3. 分布式Git
-
集中式工作流: 有一个中央仓库, 所有的开发者都从中央仓库clone代码, 然后将代码push到中央仓库.
-
集成管理者工作流: 有一个中央仓库, 所有的开发者都从中央仓库clone代码, 然后将代码push到中央仓库. 但是有一个人负责合并代码, 他会从中央仓库clone代码, 然后将代码push到中央仓库. 也是现在大部分GitHub项目的工作流.
-
主管与副主管工作流: 有一个中央仓库, 所有的开发者都从中央仓库clone代码, 然后将代码push到中央仓库. 但是有一个人负责合并代码, 他会从中央仓库clone代码, 然后将代码push到中央仓库. 但是他会将代码push到另一个仓库, 然后副主管从这个仓库clone代码, 然后将代码push到中央仓库. 应用于大型GitHub项目, 比如Linux内核.
-
git diff --check: 检查代码中的空白错误.
-
git add --patch: 部分暂存文件.
-
git apply: 应用补丁.
- git apply --check: 检查补丁能否应用.
-
git am: 应用邮件补丁.
- git am -3: 3方合并.