git的相关操作
基础
git help <command>获取git命令的帮助信息git init创建一个新的git仓库,其数据会被存放在一个名为’.git的目录下’git status显示当前的仓库状态git add <filename>添加文件到暂存区git add .把当前路径下的所有文件都添加到暂存你去(递归的),但是不包括’.gitignore’文件中声明的不被包含的文件
git commit创建一个新的提交git log显示历史日志git log --all --graph --decorate可视化历史记录(有向无环图)git diff <filename>显示与暂存区文件的差异git diff <revisiokn> <filename>显示某个文件两个版本之间的差异git checkout <revision>更新HEAD和目前的分支
分支和合并
git branch显示分支git branch <name>创建分支git checkout <name>切换到分支git checkout -b <name>创建分支并切换到该分支
git merge <revision>合并分支到当前分支git mergetool使用工具来处理合并冲突git rebase将一系列补丁变基变为新的基线
远端操作
git remote列出远端git remote add <name> <url>添加一个远端git push <remote> <local branch>:<remote branch>将对象传送至远端并更新远端引用git branch --set-upstream-to=<remote>/<remote branch>创建本地和远端分支的关联关系git fetch从远端获取对象/索引git pull相当于git fetch; git mergegit clone从远端下载仓库
撤销
git commit --amend编辑提交的内容或信息git reset HEAD <file>恢复暂存的文件git checkout -- <file>丢弃修改
git高级操作
git config可以设置git的相关参数git clone --depth=1浅克隆,不包括完整的版本历史信息git add -p交互式暂存git rebase -i交互式边基git blame查看最后修改某行的人git stash暂时移除工作目录下的修改内容git bisect通过二分查找搜索历史记录
子模块
子模块就是当你的项目中存在着另外一个git仓库,这种时候,如果你希望能够保持另外一个git仓库的独立性,就需要吧“另外一个git仓库”给设置为当前项目的子模块。
如果你非常希望能够删除子模块的话,直接进入到子模块文件夹中,删除.git文件夹就可以了。但是请务必注意是否符合相关的许可要求。
克隆
在克隆一个包含子模块的项目的时候,默认的git clone只会克隆下来子模块所在的目录,文件夹内部并没有文件。一般来说直接通过git clone --recurse-submodules来要求同时克隆子模块。
添加
当在你的项目内部还额外通过git clone克隆下来了另外一个仓库的时候,应当使用
git submodule add <submodule-url> <submodule-path>来把子模块添加到本项目中。可以在.gitsubmodules文件中看到相关的内容。
初始化和更新
为了确保子模块能够被初始化和更新,还需要运行以下两个命令
git submodule initgit submodule update同步
在子模块中更改完后,在主项目中直接通过git add <submodule-path>来进行同步
更新
只是单纯的在主项目中使用git pull并不会把你在子模块中的更新也推送到子模块对应的仓库中。
一个普通的办法就是直接进入到子模块的目录下,手动进行git push,然后再回到主项目中执行推送。
当然,也可以通过以下命令让git自动尝试推送子模块,然后再推送主项目
git push --recursive-submodules=on-demandgit diff
用来做比较的命令。在linux上系统本身还有一个diff命令用来比较两个不同的文件,但是git diff是用来进行仓库级别的比较。在windows上除了使用在线代码比较之外,还推荐使用软件winMerge来进行文件夹级别的比较,可以找出文件夹下每个文件的不同,在文件上也提供行级别的比较。
命令
git diff [<options>] [<commit>] [--] [<path>]查看你相对于索引(下次提交的暂存区域)锁做的修改。(上次git commit和当前工作区状态的区别)
git diff [<options>] --cached [--merge-base] [<commit>] [--] [<path>]git diff [<options>] [--merge-base] <commit> [<commit>] <commit> [--] [<path>]git diff [<options>] <commit>...<commit> [--] [<path>]git diff [<options>] --no-index [--] <path> <path>附加小方法
在Windows上,有时会遇到无法ssh无法push上github的时候,尝试在开代理的情况下,在~/.ssh/config中添加以下内容
Host github.com HostName ssh.github.com Port 443因为你的代理肯定都会照看到443端口的访问的,所以只要让ssh的时候也是走443端口就可以解决问题了。