【名词】master :默认开发分区origin :默认远程版本库Index / Stage :暂存区Workspace :工作区Repository :仓库区(本地仓库)Remote :远程仓库一、新建代码库# 在当前目录新建一个 Git 代码库$ git init# 新建一个目录,将其初始化为 Git 代码库$ git init [project-name]# 下载一个项目和它的整个代码历史$ git clone [url]二、配置Git 的配置文件为 .gitconfig,它可以自用户主目录(全局配置),也可以在项目目录下(项目配置)。# 显示当前的 Git 配置$ git config –list# 编辑 Git 配置文件$ git config -e [–global]# 设置提交代码时的用户信息$ git config [–global] user.name “[name]"$ git config [–global] user.email “[email address]“三、增加、删除、修改文件# 查看状态$ git status# 查看变更内容$ git diff# 添加指定文件到暂存区$ git add [file1] [file2] … # 添加指定目录到暂存区,包括子目录$ git add [dir]# 添加当前目录的所有文件到暂存区$ git add . # 添加每个变化前,都会要求确认 # 对于同一个文件的多处变化,可以实现分次提交$ git add -p# 删除工作区文件,并且将这次删除放入暂存区$ git rm [file1] [file2] …# 停止追踪指定文件,但该文件会保留在工作区$ git rm –cached [file]# 改名文件,并且将这个改名放入暂存区$ git mv [file-original] [file-renamed]四、代码提交# 提交暂存区到仓库区$ git commit -m [message]# 提交暂存区的指定文件到仓库区$ git commit [file1] [file2] … -m [message]# 提交工作区自上次 commit 之后的变化,直接到仓库区$ git commit -a # 提交时显示所有 diff 信息$ git commit -v # 使用一次新的 commit,替代上一次提交 # 如果代码没有任何新变化,则用来改写上一次 commit 的提交信息$ git commit –amend -m [message] # 重做上一次 commit,并包括指定文件的新变化$ git commit –amend [file1] [file2] 五、分支# 显示所有本地分支$ git branch# 列出所有远程分支$ git branch -r # 列出所有本地、远程分支$ git branch -a # 新建一个分支,但依然停留在当前分支$ git branch [branch-name] # 新建一个分支,与指定的远程分支建立追踪关系$ git branch –track [branch] [remote-branch] # 删除分支$ git branch -d [branch-name]# 删除远程分支$ git push origin –delete [branch-name] $ git branch -dr [remote/branch] # 新建一个分支,并切换到该分支$ git checkout -b [branch] # 切换到指定分支,并更新工作区$ git checkout [branch-name] # 切换到上一个分支$ git checkout - # 建立追踪关系,在现有分支与指定的远程分支之间$ git branch –set-upstream [branch] [remote-branch] # 合并指定分支到当前分支$ git merge [branch] # 衍[yǎn] 合指定分支到当前分支$ git rebase [branch] # 选择一个 commit,合并进当前分支$ git rebase [branch] 【 merge 与 rebase 区别】作者:Michaelliu_dev 来源:CSDN 原文:https://blog.csdn.net/liuxiao… 版权声明:本文为博主原创文章,转载请附上博文链接!假设有如下图所示仓库,该仓库有master和develop两个分支,且develop是在(3.added merge.txt file)commit处从master拉出来的分支。merge,假设现在HEAD在(6.added hello.txt file)处,也就是在master分支最近的一次提交处,此时执行git merge develop, 结果如下图所示。工作原理就是:git 会自动根据两个分支的共同祖先即 (3.added merge.txt file)这个 commit 和两个分支的最新提交即 (6.added hello.txt file) 和 (5.added test.txt file) 进行一个三方合并,然后将合并中修改的内容生成一个新的 commit,即图二的(7.Merge branch ‘develop’)。 这是merge的效果,简单来说就合并两个分支并生成一个新的提交。rebase,HEAD在(6.added hello.txt file)处,现在执行git rebase develop,结果如下图所示。 可以看见develop分支分出来分叉不见了。下面来解释一下它的工作原理: 在执行git rebase develop之前,HEAD在(6.added hello.txt file)处,当执行rebase操作时,git 会从两个分支的共同祖先 (3.added merge.txt file)开始提取 当前分支(此时是master分支)上的修改,即 (6.added hello.txt file)这个commit,再将 master 分支指向 目标分支的最新提交(此时是develop分支)即(5.added test.txt file) 处,然后将刚刚提取的修改应用到这个最新提交后面。如果提取的修改有多个,那git将依次应用到最新的提交后面,如下两图所示。图四为初始状态图五为执行rebase后的状态简单来说,git rebase提取操作有点像git cherry-pick一样,执行rebase后依次将当前的提交cherry-pick到目标分支上,然后将在原始分支上的已提取的commit删除。六、标签# 列出所有本地标签$ git tag # 基于最新提交创建标签$ git tag <tagname> # 删除标签$ git tag -d <tagname> # 删除远程tag$ git push origin :refs/tags/[tagName] # 查看标签信息$ git show [tag] # 提交指定tag$ git push [remote] [tag] # 提交所有tag$ git push [remote] –tags # 新建一个分支,指向某个tag$ git checkout -b [branch] [tag] 七、查看信息# 显示所有变更的文件$ git status # 显示当前分支的版本历史$ git log # 显示 commit 历史,以及每次 commit 发生变更的文件$ git log –stat # 搜索提交历史$ git log -S [keyword] # 显示某个 commit 之后的所有变动,每个 commit 占据一行$ git log [tag] HEAD –pretty=format:%s # 显示某个 commit 之后的所有变动,其“提交说明”必须符合搜索条件$ git log [tag] HEAD –grep feature # 显示某个文件的历史版本,包括文件改名$ git log –follow [file] $ git whatchanged [file] # 显示指定文件相关的每一次diff$ git log -p [file] # 显示过去5次提交$ git log -5 –pretty –oneline # 显示所有提交过的用户,按提交次数排序$ git shortlog -sn# 显示指定文件是什么人在什么时间修改过$ git blame [file] # 显示暂存区和工作区的差异$ git diff # 显示暂存区和上一个 commit 的差异$ git diff -cached [file] # 显示工作区与当前分支最新 commit 之间的差异$ git diff HEAD # 显示两次提交之间的差异$ git diff [first-branch]…[second-branch] # 显示今天写了多少行代码$ git diff –shortstat “@{0 day ago}”# 显示某次提交的元数据和内容变化$ git show [commit] # 显示某次提交发生变化的文件$ git show –name-only [commit] # 显示某次提交时,某个文件的内容$ git show [commit]:[filename] # 显示当前分支的最近几次提交$ git reflog 八、远程操作# 下载远程仓库的所有变动$ git fetch [remote] # 取回远程仓库的变化,并与本地分支合并$ git pull [remote] [branch] # 显示所有远程仓库$ git remote -v # 显示某个远程仓库的信息$ git remote show [remote] # 显示增加一个新的远程仓库,并命名$ git remote add [shortname] [url] # 上传本地指定分支到远程仓库$ git push [remote] [branch] # 前行推送当前分支到远程仓库,即使有冲突$ git push [remote] –force # 推送所有分支到远程仓库$ git push [remote] –all # 删除远程分支或标签$ git push <remote> :<branch/tag-name> # 上传所有标签$ git push –tags 九、撤销# 撤销工作目录中所有未提交文件的修改内容$ git reset –hard HEAD # 撤销指定的未提交文件的修改内容$ git checkout HEAD <file> # 撤销指定的提交$ git revert <commit> # 退回到之前 1 天的版本$ git log –before=“1 days”# 恢复暂存区的指定文件到工作区$ git checkout [file] # 恢复某个 commit 的指定文件到暂存区和工作区$ git checkout [commit] [file]# 恢复暂存区的所有文件到工作区$ git checkout . # 重置暂存区的指定文件,与上一次 commit 保持一致,但工作区不变$ git reset [file] # 重置暂存区与工作区,与上一次 commit 保持一致$ git reset –hard # 重置当前分支的指针为指定commit,同时重置暂存区,当工作区不变$ git reset [commit] # 重置当前分支的 HEAD 为指定 commit,同时重置暂存区和工作区,与指定 commit 一致$ git reset –hard [commit] # 重置当前分支的 HEAD 为指定 commit,但保持暂存区和工作区不变$ git reset –keep [commit] # 新建一个 commit,用来撤销指定commit # 后者的所有变化都将被前者抵消,并且应用到当前分支$ git revert [commit] # 暂时将未提交的变化移除,随后再移入$ git stash $ git stash pop 十、其他# 生成一个可供发布的压缩包$ git archive