本文是基于廖雪峰大佬的Git教程进行的记忆笔记,主要目的是用于快速回忆和精炼Git的一些常用命令,同时补充结合一些网络上的其它关于git的知识,本笔记不适合直接用来零基础学习,如果需要可以通过前面的链接跳转至廖雪峰的教程。本笔记可能存在疏漏,如有问题欢迎指正。
安装
Linux直接用apt安装,Windows官网下载安装,Mac用Xcode安装,安装完毕后在命令行使用如下内容进行设置:
git config --global user.name "Your Name"
git config --global user.email "email@example.com"
若要使用Github或Gitee等远程仓库,其初始化过程请在往上自行搜索。
仓库管理(repository)
创建仓库
git init:将一个文件夹初始化为git仓库,可以在命令行中进入该文件夹并使用此命令。
克隆仓库
git clone <URL> <name>:将远程仓库拷贝到自己电脑上,其中<URL>为远程仓库地址,<name>为赋值后对该项目进行重命名(文件夹的名字)。
版本控制
缓存修改
git add <file>:将工作区修改过的文件存入缓存区,其中<file>为需要缓存的文件,可同时添加多个文件,也可以添加文件夹,若输入git add .则将该路径下所有的内容全部添加。
提交修改
git commit <file> -m <message>:将缓存区的内容提交至本地仓库,其中<file>为需要提交的文件,可多个或文件夹,若不填写则全部提交。-m <message>为添加注释内容,如果在其中添加-a指令,如git commit -am <message>,则可以跳过add步骤,直接工作区内容提交到本地仓库中。同时每次commit也相当于提交了一个新的版本。
查看状态
git status:查看当前仓库的状态,例如有无未缓存或未提交之类的信息。
内容比较
git diff:比较工作区和暂存区的差异,可找到例如未缓存但已修改的内容。添加--cached参数则比较暂存区与上一次提交之间的差异,其它参数可在网上查询。
版本日志
git log:查询过去的版本,包括日期、作者、版本号等信息,添加--pretty=oneline可以精简上述信息至只有版本号和你commit时添加的注释。
git reflog:查询未来的版本,即你曾经回退过版本,现在想取消回退,可以通过这个命令进行查询。
撤销修改
git checkout -- <file>:将工作区的文件恢复为之前暂存区存储的内容。
git reset HEAD <file>:将暂存区某文件的内容恢复为之前仓库存储的内容。
删除文件
git rm <file>:将文件从暂存区和工作区删除,若未使用该语句而直接将文件删除,则暂存区仍然会保留该文件,且在查询状态时告知你删除了文件,此时可以使用撤销修改进行恢复。若删除之前进行过修改,缓存至了暂存区且尚未提交,则此命令需要使用-f参数才可进行强制删除。若仅想删除暂存区内的修改但保留工作区的文件,则需要添加--cached参数。
版本回退
git reset <--soft|--mix|--hard> <commit_id>:将仓库重置至另外某个版本的状态。
其中<--soft|--mix|--hard>为三选一参数:
--soft为变更HEAD所指向的版本(HEAD版本即为分支顶端的别名)。
--hard为除了变更HEAD所指向的版本外,还会把工程的一切都变成该历史版本的样子,该操作有丢失掉当前所有修改的风险。
--mix为除了变更HEAD所指向的版本外,还会将暂存区重置以匹配HEAD,但工作区不会改变。
其中<commit_id>为版本号,通过版本日志可以查询,若设置为HEAD则为当前版本,若使用HEAD^可退回上一个版本,使用HEAD^^或HEAD^2可退回上上个版本,通过增加^的数量或增加数字,可退回的层数以此类推增长。
远程操作
添加关联
git remote add <name> <URL>:将本地已有仓库与一个远程仓库进行关联,其中<name>为对该远程仓库取得别名,常用origin作为该别名,<URL>为远程仓库的地址。
查看关联
git remote -v:查看当前全部已关联库。
取消关联
git remote rm <name>:删除某个关联的<name>分支。
上传代码
git push <name> <branch>:将本地仓库名为<branch>的分支上传至远程<name>仓库并合并,若两边分支名不同则应使用<brach_local>:<branch_origin>分别填写上两边的分支名然后上传,若两边版本差异则需要添加--force参数强制推送,若想未来简化git push操作,可在<name>前添加-u参数,未来git push即可直接代替git push <name> <branch>指令。
下载代码
git pull <name> <branch>:将远程<name>主机<branch>分支的代码合并到本地,也可使用<branch_origin>:<branch_local>来确定分支,当团队之间合作代码push推送失败时,可以使用git pull来获取最新的提交,然后本地修改合并后再推送。注意,pull操作会直接合并,如果在合并前需要对照之类的操作应该使用fetch。
分支管理
连接分支
git branch --set-upstream-to <branch> <name>/<branch>:如果pull失败并提示no tracking information,则说明本地分支和远程分支没有连接,使用上述方法方法即可完成连接。
创建分支
git branch <name>:创建一个名为<name>的分支,创建分支并不会对之前分支的工作区产生改变。
git switch -c <branch> <name>/<branch>:跟踪一个远端<name>主机的<branch>分支到本地。
切换分支
git checkout <name>:切换到<name>分支,若中间加上-b参数,则可以创建并切换。
git switch <name>:新版git提供的新指令,用于替代checkout,切换到<name>分支,若中间加上-c参数,则可以创建并切换。
合并分支
git merge <name>:将<name>分支合并到当前分支,如果合并产生了冲突,则需要手动合并冲突(即手动将文件编辑为我们想要的内容,git将在文件合并冲突位置处添加符号标注)。合并时如果加上--no-ff参数即可使用普通模式合并,这样合并后的历史有分支,可以看出曾经做过合并,而如果不加则看不出来曾经做个合并。
删除分支
git push <name> --delete <branch>:删除远端<name>仓库的<branch>分支。
git branch -d <branch>:删除本地<branch>分支,在删除前需要先切换到其它分支,若d改为大写D,则为强制删除。
查看分支
git branch:查看本地分支。
git branch -r:查看远端分支。
现场管理
保存现场
git stash:当急需继续对某另一分支进行操作而当前任务尚未结束无法提交,可以先保存现场,去处理完其它任务后再回来重新工作,保存现场后当前工作区将会恢复为上一次commit时的状态,直到恢复现场。
查看现场
git stash list:查看现在已保存的现场,每个保存的现场均会拥有一个id进行标识。
恢复现场
git stash pop:恢复现场并删除保存记录,如果产生冲突,文件会出现和合并时类似的改变。
git stash apply <id>:恢复id为<id>的现场但不会删除记录,需要手动删除
删除现场
git stash drop <id>:删除id为<id>的现场。
获取修改
git cherry-pick <commit_id>:从其它地方获取更改,但不同于merge,其获取的更改是以commit为单位而非分支,所以<commit_id>即为所交commit的id,可以在对应分支通过log查询。
标签管理
添加标签
git tag <TAG>:为一个commit打上标签,<TAG>为标签内容。通过git tag -a <TAG> -m <message> <commit_id>可以为id为<commit_id>的提交打上标签<TAG>并添加说明文字<message>。
查看标签
git tag:可以查看历史打过的标签。
删除标签
git tag -d <TAG>:删除名为<TAG>的标签。
推送标签
git push <name> <TAG>:标签本身不会自动上传到远端服务器,通过此指令可以将<TAG>推送到远端<name>主机上。
git push <name> :refs/tags/<TAG>:通过本指令可以将已上传至远端的标签删除。