Git用法学习总结
1. Git基本用法
git init //在当前文件夹下创建仓库,仓库名为该文件夹名
git add . //添加当前文件夹下所有文件到暂存区
git add test.txt //将test.txt添加到暂存区
git commit -m "提交说明" //将暂存区的内容全部提交到版本库中
git status //查看当前git工作区状态
git diff test.txt //查看文件test.txt的修改信息
git push -u origin master //第一次推送master分支到远程库origin的master分支,第一次加参数u
git push origin master //将当前master分支推送到远程库origin的master上(非第一次推送)
git push origin branch //将当前branch分支推送到远程库origin的branch分支上(无论你当前是否在branch分支上)。本地与远程的分支是对应的
git rm file //在工作区中删除file,如果想在版本库中也删除file,则用命令‘git commit -a "提交说明"’ 就行了。
注: 把当前分支推送到远程库对应分支上时,可以省略分支名。
如:当前位于master分支,若要推送本地master分支到远程origin库的master,可用:git push origin即可。
再如:当前位于dev分支,若要推送本地dev分支到远程origink库的dev,可用:git push origin即可。
2. Git连接远程库
git remote -v //查看连接到的远程库
git remote add origin url //将本地库关联到远程库,远程库名命名为origin,远程库地址为url,url可以为ssh协议也可以为https协议
git remote rm origin //取消与远程库origin的关联
//将本地库同时关联到github库和码云库
git remote add github githuburl //github是远程库的命名,也可以取其他的名字,githuburl为github上的库地址
git remote add gitee giteeurl //gitee是远程库的命名,也可以取其他的名字,giteeurl为码云上的库地址
3. Git分支管理
git branch //查看当前库的所有分支
git checkout branchName //切换到分支branchName上
git checkout -b newBranch //创建并切换到newBranch上,-b表示创建并切换
git branch -d dev //删除dev分支
git branch -D dev //强制删除一个没有合并过的dev分支
git merge branch //将branch分支合并到当前分支,这种合并采用的是Fast-forward模式,即“快进模式”。这种模式不会生成新的commit
git merge --no-ff -m "合并说明" branch //将branch分支合并到当前分支。“--no-ff”表示禁止快进合并模式。这种模式会生成新的commit
git push origin branch //把branch分支推送到远程库对应的远程分支上。
git checkout -b dev origin/dev //创建远程origin的dev分支到本地
git branch --set-upstream dev origin/dev //建立本地分支和远程分支的关联
注:
1)当远程库有某分支,而本地没有,需要在本地创建与远程库对应的该分支时,可以这样:git checkout -b dev origin/dev //创建远程origin的dev分支到本地
。
若要推送代码还需建立管道流通信:git branch --set-upstream dev origin/dev //建立本地分支和远程分支的关联
2)当本地有某分支,而远程库没有,需要推送本地分支到远程库时,可以这样:git push github branch1 //把branch1分支推送到远程库对应的远程分支上。
,这时会提示错误:
意思很明显,没有远程库中与当前分支的管道流。使用git push --set-upstream github branch1
命令,建立流管道连接即可。这时会发现远程库中也有了branch1分支。
再注: 为什么会有的是git push origin branch1而有的是git push github branch1呢? 后面就会明白,其实origin和github都只是你自己远程库的名字,默认的叫origin,根据需要可能会修改为其他名字。如,这里修改为github了。
4. 版本回退
git reset --hard HEAD^ //回退到上一个commit节点版本,HEAD表示当前节点,HEAD^表示上一个commit,HEAD^^表示上上一个commit...同理类推,表示上100个commit怎么办呢?很easy~
git reset --hard 2458144 //回退到commitId为2458144的节点版本
git checkout -- file //撤销工作区里对file的修改
git reset HEAD file //撤销添加到暂存区的file,重新放回工作区
//当你不但修改工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步
//第一步用命令
git reset HEAD file,撤销添加到暂存区的file
//第二步用命令
git checkout -- file 撤销工作区里对file的修改
5. 标签管理
标签相当于给某一个节点取的名字,方便记忆和读取,本质是commit节点。
git tag //查看所有标签
git tag show v1.0 //查看标签v1.0的信息
git tag v1.0 //在当前commit节点上打上v1.0标签
git tag v2.1 commitId //在指定commitId节点上打上v2.1标签
git tag -a v2.0 -m "version 2.0 released" 2634564 //给commitId为2634564的节点打上v2.0标签,并添加说明"version 2.0 released"
git tag -d v1.0 //删除v1.0标签
git push origin v1.0 //推送v1.0标签到远程库origin
git push origin --tags //推送所有未推送到远程的本地标签到远程库origin
//删除远程库标签
git tag -d v1.0 //1. 先从本地库删除
git push origin :refs/tags/v1.0 //2. 再推送到远程库删除
6. Git 打印日志
git log //详细打印提交日志
git log --pretty=oneline //一行的形式打印提交日志
git log --graph //打印合并过的分支路径
git log --pretty=oneline --abbrev-commit //以简洁形式打印提交记录
git reflog //打印命令历史日志,也就是打印以前做过哪些命令操作
7. 冲突解决
1)当push到远程库的时候往往会碰到冲突错误
解决办法错误日志已经说出来了,那就是使用git pull 命令。
在绑定多个远程库时会遇到
fatal: No remote repository specified. Please, specify either a URL or a remote name from which new revisions should be fetched.
的错误。这里的意思是,你需要指定从哪个远程库的哪个分支上拉取。比如,”git pull github master”从名为github的远程库的master分支上拉取。
git pull命令执行后你需要手动解决冲突。怎么手动?
就是你的本地文件与远程不同的地方,它已经标出来了,不信打开本地文件夹看看?是不是多了«««<,=======,»»»>这样的标记,那就是标出来的本地和远程的不同地方。
所谓手动解决冲突,就是你自己用眼看,看这些不一样的地方,然后决定你想要保留的内容。最后再执行重新add、commit、push到远程,就不会出现冲突了。
注:但是git pull这个命令是从远程下载代码,自动合并到本地的,很容易出现大量的“«««<,=======,»»»>”,如果你改动的多的话,简直就是噩梦,因此是不安全的。
推荐使用git fetch命令,具体如下:
git fetch origin master:tmp//抓取远程代码到本地的新生成分支tmp上(这个tmp分支是自动生成的)
git diff tmp //比较master分支与tmp分支的不同
git merge tmp//最后再合并
2)合并时冲突
$ git merge dev
Auto-merging readme.txt
CONFLICT (content): Merge conflict in readme.txt
Automatic merge failed; fix conflicts and then commit the result.
错误提示的很明确了,就是如上面的手动解决冲突就行了
8. Github与码云(Gitee)
Github不用多说了,最有名的版本控制系统远程仓库平台。而码云(Gitee)相当于中国的github吧。
那么问题来了…纠结症又犯了~到底用哪个呢?- -||| … … … ~ haha…都可以用,可以同时用哦~ …
本地电脑安装一个gitbash可以连接多个仓库平台。一个本地仓库也可以对应连接多个远程仓库。
首先介绍本地Gitbash连接多个仓库平台
将本地Gitbash用户主目录的.ssh目录下的id_rsa.pub里的内容(公钥)添加到github和gitee的ssh key里,这是标识你电脑和github以及gitee的对应关系的。可以添加多个,因为你可能不止一台设备嘛~
:啥?不知道啥是用户主目录?
:打开Gitbash,用命令pwd就出来了
:啥?用户主目录下没有.ssh目录?
:你肯定第一次用吧?在Gitbash里,用命令git init新创建一个仓库就会生成.ssh目录,里面有id_rsa和id_rsa.pub两个文件,分别是私钥和公钥。
其他就不详细介绍了…
接着介绍如何将本地的一个库同时关联到github和gitee上的两个远程库
举个栗子~ 我有一个本地仓库,名字叫:learngit 我想把它同时连接到我的github和码云,并且每次提交代码可以选择性的提交我想提交的平台。
- 1.在github和码云分别创建名为learngit的仓库
- 2.在本地仓库learngit文件夹下,右键–>Gitbash here… 打开了Gitbash客户端(或者由Gitbash客户端切换目录到这个目录下也行)。
3. 接下来命令操作:
git remote -v //查看远程连接信息
答案肯定是什么都没连…,接下来要做的就是分别关联本地learngit仓库到github和码云
git remote add github githuburl //github是远程库的命名,也可以取其他的名字,githuburl为github上的库地址
git remote add gitee giteeurl //gitee是远程库的命名,也可以取其他的名字,giteeurl为码云上的库地址
关联后可以用git remote -v查看连接信息 我的效果如下:
上图说明连接到了gitee、github两个远程库,fetch、push是可用的权限,意思是可以抓取远程库数据到本地,也可以推送数据到远程库。
4.推送代码时:
git push github master //推送本地master内容到github对应的仓库中去
git push gitee master //推送本地master内容到gitee对应的仓库中去
注:仓库分支的推送都是对应的,本地的master分支默认推送到远程库的master分支下。想想也是,不同分支的推送就不叫推送了!那叫分支合并啦好不好~
9. Git配置global用户名和邮箱
一般第一次使用git,需要配置用户名,邮箱。这样下次创建新项目或者fork别人的项目,则不需要再进行设置了。
- 配置全局的用户名,邮箱
git config --global user.name "usernme"
git config --global user.email "emailName"
- 配置单个项目的用户名,邮箱
git config user.name "usernme"
git config user.email "emailName"
- 查看当前用户名,邮箱配置
git config --global --list
git config --list
- 删除某个用户名,邮箱配置
git config --global --unset user.name "username"
git config --global --unset user.email "emailName"
参考文档: https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000
完结撒花~~~