123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108 |
- Git 常用命令
- ========================
- 版本标识
- --------
- Git 可以用多种方法标识一个版本:
- * commit hash
- * 本地分支名,如 master
- * 远程分支名,如 origin/master
- * HEAD 和 HEAD 之前n个版本 HEAD~n
- * tag: 用git tag显示所有的tag
- 本地仓库
- -------------
- * 初始化本地仓库:git init
- * 暂存修改:git add
- - 注意此时修改并未提交,要提交修改执行 git commit
- - 如果在 git add 之后又修改了已暂存的文件,可以再次执行 git add 暂存最新版本的文件
- * 查看修改:git diff
- - 如修改已用 git add 暂存,则加 ``--cached`` 参数,即 git diff --cached
- * 查看仓库历史记录:git log
- - 每条历史记录为一个 commit,代表一个版本,commit 的散列值可用于标识版本
- * 检出版本 deadbeef: git checkout deadbeef
- * 修改当前版本:git commit --amend
- - 将暂存的修改提交,并且和最新版本合并
- - 如果没有文件的修改,``git commit --amend`` 的作用是修改提交描述
- 分离头指针相关
- -----------------
- 对于分离的头指针,可以在上面创建分支。
- 如果在分离的头上做了修改,又不小心检出了其他提交,可以使用 ``git reflog`` 找回丢失的提交。
- 分支相关
- --------
- * 创建名为 test 的本地分支:git branch test
- - 此时 git 仓库所在的分支仍为操作前分支,要切换到 test 分支,需要 git checkout
- - test 分支的最终版本是执行 git branch 前的版本
- * 检出版本 deadbeef 并以其为最终版本创建一个名为 test 的分支:git checkout deadbeef -b test
- - 此时 git 仓库切换到 test 分支,版本为 deadbeef
- 变基操作
- ---------
- 变基操作 git rebase 是 Git 的一个重要操作,“把版本A变基到版本B上”的含义是将版本 B 没有而版本 A 有的修改应用到 B 上,得到一个新的版本。
- * git rebase v1.0: 把当前版本变基到 v1.0 标识的版本上,变基成功后,版本切换到变基后的版本
- * git rebase -i v1.0: ``-i`` 表示交互式变基,命令执行后,会打开一个编辑器,让用户选择具体的操作,常用的有:
- - squash(s): 把当前的提交和前面的提交合并为一个提交
- - reword(r): 修改提交描述
- 远程仓库
- --------
- * 创建名为 origin 的远程仓库,地址为 ``https://example.com/hello``::
- git remote add origin https://example.com/hello
- * 修改远程仓库 origin 的地址为 ``git@wehack.space:hello``::
- git remote set-url origin git@wehack.space:hello
- * git fetch 和 git pull 的区别:git pull 相当于 git fetch 之后 merge. 如果只想从远程仓库获取一个 refspec 的内容及其历史,但并不想 merge,可以用 git-fetch::
- git fetch origin master
- 合并操作
- ---------
- * git cherry-pick deadbeef: 将 deadbeef 标识的 **一个提交** 应用到当前版本上,得到一个新的版本
- * git merge deadbeef: 将 deadbeef 标识的版本合并到当前版本
- - 如果存在合并冲突,手动解决冲突后,会产生一个合并提交
- - 建议的操作是先变基,在变基的过程中解决冲突,再合并,这样不会产生一个合并提交
- 其他
- ----
- AUR 的软件包中,可以用以下命令描述一个用 Git 作版本管理的软件的版本:
- * git rev-list --count HEAD: 查看从初始版本到当前版本的提交个数
- * git describe --always 可以用于描述一个版本
- 如果不需要获取一个仓库的所有历史,可以用 ``git clone --depth=1``.
- GitHub 操作建议
- ----------------
- 提交 pull request 时,建议创建一个新的分支,并且用 ``git rebase -i`` 变基到上游仓库的主分支(一般为master)上。如果对 pull request 中的提交用 ``git commit --amend`` 进行了修改,可以使用 ``git push --force``.
- 合并 pull request 时,使用 ``Rebase and merge`` 或 ``Squash and merge`` ,而不是使用 ``Create a merge commit`` 方案。如果有变基冲突而不能用 ``Rebase and merge``,则进行手动操作,将 pull request 的版本 pull 至本地,然后进行手动 rebase 或 cherry-pick 操作。
|