Git使用简易教程(命令)
Git是目前世界上最先进的分布式版本控制系统,没有之一,学到就是赚到!
这里记录了一些我在学习git使用时,最实用的方法和命令集合。
Git安装(Windows)
- 首先直接在官网下载Git安装程序,按照默认选项进行安装
- 安装完成后,在开始菜单找到
Git
->Git Bash
应用程序,点击后弹出命令行窗口就说明安装成功啦! - 设置机器信息
–global为全局参数,表示当前机器上的所有仓库都会使用这个配置git config --global user.name "Your Name" git config --global user.email "email@example.com"
创建版本库
版本库也就是仓库(repository),可以理解为一个目录,该目录下的所有文件都可以使用Git管理。
- 选择一个合适的地方,创建空目录
$ mkdir gitlearning $ cd gitlearning $ pwd /d/git-repository/gitlearning
- 通过
git init
命令把这个目录变成Git可以管理的仓库:$ git init Initialized empty Git repository in /d/$ git-repository/gitlearning
文件添加和提交
- 将文件修改添加到暂存区(stage)
$ git add <file> $ git add readme.txt //示例
- 将文件从暂存区提交到当前分支
$ git commit -m <message> //-m添加说明参数,最好不要省略 $ git commit -m "add 1 file" //示例
版本回退
-
版本控制历史记录
$ git log $ git log --pretty=oneline
-
版本回退
$ git reset --hard HEAD^ //HEAD指向当前版本,HEAD^就是上一个版本,HEAD^^就是上上个版本 $ git reset --hard <commit id> //commit id可以通过git log查找 $ git reset --hard 4c805e2 //示例,id只需能够唯一标识该条提交的前若干位数字
-
命令历史记录
$ git reflog //查看历史命令
-
查看状态
$ git status
撤销修改
-
撤销工作区文件修改(该文件还未添加到暂存区中)
$ git checkout -- file $ git checkout -- readme.txt //示例
-
文件已经添加到暂存区,先撤销暂存区修改,再撤销工作区修改
$ git reset HEAD <file> $ git reset HEAD readme.txt //示例
-
已经提交了不合适的版本到版本库,且还未推送到远程仓库,撤销修改即版本回退,参考前文。
删除文件
一般情况下,我们可以直接再文件管理器中删除指定文件,或者使用rm
命令删除
但此时,工作区和版本库就不一致了,git status
命令会告诉我们哪些文件被删除了
此时有两种情形
-
同步工作区和版本库,从版本库中删除该文件
$ git rm <file> $ git rm test.txt //示例 $ git commit -m "remove test.txt" //删除后记得git commit提交
-
删错了,将文件恢复到版本库的最新版本,“一键还原”
$ git checkout -- <file> $ git checkout -- test.txt //示例 // 没有添加到版本库就被删除的文件是无法回复的。
远程仓库
-
关联远程仓库
$ git remote add orign git@server-name:path/repo-name.git //origin为远程仓库命名,默认为origin
-
将本地内容推送到远程仓库
//第一次推送master分支所有内容 $ git push -u origin master //之后每次本地master提交修改后,推送修改内容 $ git push origin master //简写 $ git push
-
从远程仓库克隆到本地
$ git clone git@server-name:path/repo-name.git
分支管理
-
查看分支
$ git branch //*表示当前分支
-
创建分支
$ git branch <name> $ git branch dev //创建dev分支示例
-
切换分支
$ git checkout <name> $ git checkout dev //切换到dev分支示例 $ git switch <name> $ git switch dev //切换到dev分支示例 //最新版本Git提供的switch命令更科学,推荐使用
-
创建并切换分支
$ git checkout -b <name> $ git switch -c <name>
-
删除分支
$ git branch -d dev
-
合并分支
//切换到masetr分支,使用`git merge`将dev分支合并到master分支示例 $ git switch master $ git merge dev
-
分支冲突
合并分支时,如果同时对同一处做了修改,会产生冲突。
先解决冲突,再提交合并。$ git branch --graph //查看分支合并情况,按q退出查看
-
分支合并策略
$ git merge --no-ff -m "message" dev // --no-ff参数可以使用普通模式合并,可以看出曾经合并的分支,fast forward合并看不出来
-
BUG 分支
修复bug时,我们会通过创建新的bug分支进行修复,然后合并,最后删除;
当手头工作没有完成时,先把工作现场
git stash
一下,然后去修复bug,修复后,再git stash pop
,回到工作现场;在master分支上修复的bug,想要合并到当前dev分支,可以用
git cherry-pick \<commit\>
命令,把bug提交的修改“复制”到当前分支,避免重复劳动$ git stash //储藏工作现场 $ git stash list //查看工作现场 $ git stash pop //恢复工作现场,同时删除stash内容 $ git cherry-pick <commit id> //复制一个特定的提交到当前分支 $ git branch -D <branchname> //强制删除一个没有合并过的分支
多人协作
-
查看远程库信息
$ git remote $ git remote -v
-
从远程抓取远程的新提交
$ git pull
-
从本地推送分支
$ git push origin <branchname>
-
在本地创建和远程分支对应的分支
$ git checkout -b <branch> origin/<branch> //本地和远程的分支名称最好一致
-
建立本地分支和远程分支的关联
$ git branch --set-upstream <branch> origin/<branch>
标签管理(版本管理)
-
查看所有标签
$ git tag
-
添加新标签
$ git tag <tagname> $ git tag v1.0 //默认标签搭载最新提交的commit上 $ git tag <tagname> <commit id> //为指定commit打标签 $ git tag -a <tagname> -m "message" <commit id> //-a指定标签名,-m指定说明文字
-
推送标签到远程
$ git push origin <tagname> //指定标签 $ git push origin --tags //一次性推送全部尚未推送到远程的标签
-
删除标签
//删除本地标签 $ git tag -d <tagname> //删除已经推送到远程的标签 $ git tag -d <tagname> //先从本地删除 $ git push origin :refs/tags/<tagname>
配置别名
我们可以为我们常用的git命令单词配置别名,简化输入
- 使用alias关键字
//为status配置别名st,git status = git st $ git config --global alias. st status //为checkout配置别名co $ git config --global alias. co checkout
--global
参数是全局参数,也就是这些命令在这台电脑的所有Git仓库下都有用,不加--global
,只对当前仓库起作用。