常用Git命令和操作(github)
这篇文章总结了当使用github托管git仓库时,经常使用的命令。
使用远程仓库
与远程仓库建立关联
git和github是不同的概念,git是版本控制工具,github是托管 Git项目的云端平台。
如果没有远程库,可以先注册一个github账号,然后创建一个新的远程库。
当使用git clone [github url]命令复制一个远程库时,就自动与该远程库建立起了关联。git init则会创建一个无任何关联的本地库。
git remote用于查看远程库,如果什么也没有显示,则表示无关联的远程库;如果显示origin,表示已关联远程库。origin是远程库实际地址的别名。
git remote -v 命令,可以查看远程库的完整路径地址。
如果想要将本地的git库与远程库关联起来,可以使用git remote命令。假设库的地址是:https://github.com/somesite/repo,则命令如下:
git remote add origin https://github.com/somesite/repo
将更改推送至远程库
git push origin [branchname]
git log --oneline --graph --decorate --all * a84a771 (HEAD -> master, origin/master) 修改内容 * ed31941 初次提交
推送后使用 git log --oneline --graph --decorate --all
,可以看到多了 origin/master 字样,称为跟踪分支,origin/master告诉我们远程仓库origin 有一个 master 分支,指向 commit a84a771。
从远程仓库拉取修改
git pull origin [branchname]
使用git pull命令拉取时,会自动将远程仓库中的代码与本地分支进行合并。
git fetch origin [branchname]
使用git fetch命令拉取时,不会在收到这些 commit 之后,自动将本地分支与远程跟踪分支合并。
当需要合并时,在本地的master分支上执行 git merge original/master
。
当本地的所有Commit远程都有,并且远程有本地没有的Commit时,执行git pull就可以了。
当本地的部分Commit远程没有,并且远程有本地没有的Commit时,先git fetch获取远程Commit,然后手动执行合并,再执行git push推送至远程仓库。
使用其他开发者的仓库
Fork
在github中,fork一个仓库的意思,就是复制一份其他开发者的仓库。fork和clone不同,clone是获得一份本地的仓库副本;而fork是获得一个远程的仓库副本,副本位于github中。
查看其他人的提交
git shortlog 将会对提交者进行分组,然后显示commit的注释。
git shortlog
有时候这样显示仍然会很多,可以添加两个选项:git shortlog -s -n,-s仅显示commit的数量,而不显示注释内容,-n则按数量进行排序。
git shortlog -s -n
如果想要按作者进行筛选,则可以使用--author选项:
git log --author=Jimmy
如果名字中间有空格,则需要加引号,例如:git log --author="Jimmy Zhang"
如果想要搜索注释内容,可以使用--grep选项:
git log --grep="css bug"
与其他开发者协作
创建Pull Request
创建Pull Request允许你提交修改到你fork的原开发者库中。
步骤如下:
- 阅读项目的 CONTRIBUTING.md 文件,了解如何贡献
- 查看项目现有的Issues
- 与项目维护者交流
- fork源仓库
- 将fork克隆到本地计算机
- 创建新的特性分支
- 将修改commit到分支
- 使用git push推送到你的fork库上
- 新建一个Pull Request,包含你的新分支
与开发者的源库保持同步
fork库(别名origin)和源库(被fork的那个库)可能不同步,为了保持同步,可以进行下面的操作:
- git remote add upstream [源库地址](同样,upstream为源库的别名)
- git pull upstream [branch],拉取源库的更改,并合并到本地
- git push origin [branch],将本地分支推送到origin库
git还有很多的命令,在实践中慢慢总结吧,了解这些常见的命令,应该已经足够应付大部分的场景了。
感谢阅读,希望这篇文章能给你带来帮助!