git config --global user.email 邮箱
git config --global user.name 用户名
明确令git不管理某些文件或者目录。通常这是开发者私有文件,或者临时生成的文件。把这些文件或目录名添加到.gitignore文件中。
$ echo"temp/" >> .gitignore
$ echo"private_key" >> .gitignore
git status 查看某些文件已修改,哪些文件已准备提交等信息
了解status的更多用法
git help status
git add helloWord.js 添加文件
git add ./path/to/file/HelloWorld.js 添加子目录文件
git add ./*.js 通配符方式添加多个文件
git add -A 添加工作目录下所有文件
该命令用于管理分支。可以查看,修改,创建,删除分支
git branch -a 列出所有分支
git branch newBranch 创建分支
git branch -d newBranch 删除分支
git branch -m oldBranch newBranch 重命名分支
git branch branchName --edit-description 修改分支描述
管理标签,标签一般是对当前git仓库的快照设置一个标志。标签包括轻量(lightweight)与可标注(annotated),后者允许记录更多信息
git tag 列出标签
git tag -a v2.0 -m ‘my version 2.0’ 创建可标注的标签: -a 表示可标注类型, -m选项加一个说明
git show v2.0 显示某个标签相关信息
git push origin v2.0 把本端的标签v2.0推送到远端
git push origin --tags 把本端的所有标签推送到远端
工作区的文件更换为某个分支或提交的版本
git checkout 切换到主分支,一般是master
git checkout branchName 切换到某分支
git checkout -b branchName 创建并切换到该分支(等价于git branch name; git checkout name)
克隆远端的git仓库至本地。并且为新创建仓库中的所有分支绑定对应的远端分支
git clone URL 克隆仓库文件
git clone --depth 1 URL 浅克隆-快速克隆。注意如果不设置–no–single-branch
,只会克隆HEAD所在的分支。--depth
表示克隆的最近版本数
将缓存区(Index)中的内容提交到git仓库中
git commit -m “描述” 提交代码,并添加描述
git commit -S -m “描述” 提交时带数字签名(由提交者的GPG秘钥生成)
git commit -a -m “描述” 自动将修改的文件加入缓存区,在进行提交
git commit -amend -m “描述” 把本次提交与最后一次提交合并(删除最后一次提交,加入合并后的提交, 我一般用在修改提交记录)
显示工作目录、缓存区(Index)、当前git库版本之间的差异
git diff 显示工作目录和缓存区的差异
git diff --cached 显示缓存区与当前git库版本的差异
git diff HEAD 显示工作目录与当前git库的差异
快速查找git库的内容
git config --global grep.lineNumber true grep结果显示行号
git config --global alias.g “grep --break --heading --line-number” 定义快捷命令g对于grep美化输出结果
git grep ‘variableName’ – ‘*.js’ 在js文件中查找字符串’variableName’
显示提交到git仓库的记录信息
git log 显示所有提交记录
git log --oneline 以简化单行方式显示每个提交
git log --merges 只显示合并的提交
git log --graph 在提交行的左侧以字符串图像的方式表示版本变化情况
把外部的分支的修改,合并入当前分支
git merge branchName 把其他的某个分支,合并入当前分支
git merge --no-ff branchName --no-ff
标志标识, 对任何情况合并都生成新的版本
改名或者移动文件
git mv oldName.js newName.js 修改文件名字
git mv ./old/name.js ./new/name.js 修改文件的路径
git mv -f oldfile newdile 强制改名或者移动文件
把某个版本从远端git仓库中拖出,并且合并到本端的某个分支
git pull origin master git pull
git pull 如果当前分支与某个’远端分支绑定, 则先把其远端分支拖动到本地,在合并到当前分支
git pull origin master --rebase 合并到本端分支的策略是采用rebase(即本端修改在远端最新版本之上的单线演进)
git pull origin --allow-unrelated-history
该选项可以合并两个独立启动的仓库历史
把本端分支与修改推送至远端的分支并合并
git push origin master 把本端口的branch分支推送到远端git仓库
git push 如果不设置远端名称 将会推送到所有与远端绑定的本端分支
git push -u origin master -u
可以在推送之前立即设置本端分支的远端绑定(该含义是将本端的master分支与origin[远端名]上的master绑定)
保存当前暂存区(Index)与工作目录中的变更内容到git中的某个存储区域。在必要的时候,可以取出这些变更并合并到当前工作目录与暂存区(Index)
git stash list 列出所有存储的’修改’ , 最新的位于上部
git stash pop 弹出堆栈顶部的’修改’, 并实施于工作目录或者暂存区
git stash apply 实施堆栈顶部的’修改’ 但不弹出
git stash apply stash@{1} 实施堆栈顶部起第二个的’修改’(0序), 但不弹出
git stash drop 抛弃/删除堆栈顶部的’修改’
把一个分支上的提交转移到另外一个分支上。这样有可能把两个分支合并成一个。
一个重要准则:不要重整已经提交到公共仓库的版本。
git rebase master experimentBranch 把特性开发分支重整到主分支上
通常reset命令,变更当前的HEAD某个版本,也可以根据HEAD指向的内容,更新存储区(Index)或工作目录。
git reset 复位缓存区, 用HEAD指向的内容更新缓存
git reset --hard 复位缓存区, 用HEAD指向的内容更新缓存区与工作目录
git resert 31f2bb1 先移动HEAD指针,再用git reset操作
git reset --hard 31f2bb1 先移动指针, 再用git reset --hard操作
git reset --soft 31f2bb1 只移动HEAD指针
reflog以时间由近到远列出所有的git操作, 缺省时间长度是90天。因为有些操作的结果没有直接的版本或标签对应,比如历史版本经过rebase等原因在现有版本树中已经找不到了,这些历史版本都可以在reflog中找到。
git reflog 列出参考日志
git reset --hard 31f2bb1 如果上述日志中显示最后一次操作是在master分支的hard reset。要恢复到原来的master指针,并更新工作目录与缓存区(Index)的内容,找到master分支初始状态时对应的Ref值
回退用于对某个提交的修改,做反操作的修改,在效果上实现回退。回退在git仓库中产生一个新的提交。回退针对的“提交”与该回退之间,可能存在若干其他的提交。但“回退”只回退对应提交的修改,而保留其他提交的修改。
git revert
删除文件的同时,也变更git工作目录与缓存区(Index)的状态
git rm ./path/helloWord.js 删除文件
git config --system --unset credential.helper 删除用户信息
git config --global credential.helper store 保存用户信息
git cherry-pick 132465 132465为commit的id