git最接地气的使用姿势
写在前面的话:此文将以实例演示一边GIT常用操作流程,以便我们对GIT的使用有个完整的概念,不涉及git原理介绍,自行学习。
一、git的下载安装
关于git的下载安装以及如何在IDEA中集成,可参见另一篇文章:https://www.cnblogs.com/wynjauu/articles/9451776.html
二、实战操练
首先在git上创建一个项目,接下来将会以这个项目进行操作说明,如图:
1、代码克隆到本地:
如上图所示可以看到有两种方式可以克隆代码到本地的地址,SSH和HTTP,关于这两种方式的区别参见另一篇文章:https://www.cnblogs.com/wynjauu/articles/10568445.html
HTTP方式,此方式不需要配置SSH密钥,可以通过IDEA或者git命令来克隆代码:
通过IDEA使用http方式,如下图,然后点击clone后续继续即可:
通过git命令针对http方式来克隆代码:
这样就可以在本地F:\IJWorkspace\git克隆到git-demo这个项目。
注意如果执行命令的时候报错:fatal: Not a git repository (or any of the parent directories): .git
提示说没有.git这样一个目录,解决办法如下:git init 一下就好了,如图所示:
其实这里主要是在F:\IJWorkspace\git文件中生产一个.git文件,作为本地仓库目录下,
通过SSH,需要首先配置SSH秘钥。
第一步:设置git的user name和email(如果是第一次的话),设置方式见另一篇文章:https://www.cnblogs.com/wynjauu/articles/10168444.html
第二步:创建SSH Key:
$ ssh-keygen -t rsa -C "第一步中设置的email"
然后连续3个回车。
在C:\Users\17074536\.ssh 目录下最后得到了两个文件:id_rsa
和id_rsa.pub
。
第三步:在服务端配置公钥,登录git:http://git.xxx.com
点击“设置”
第四步:将生产的id_rsa.pub文件中的内容复制到上图的密钥栏,会自动生产标题,好像是你的邮箱,然后确定即可。然后验证是否成功,我们将使用git命令:git clone ssh后面的地址路径
这样同样可以从远程仓库克隆项目到本地;另外IDEA也可以根据ssh后面的地址来下载代码:
2、常用的操作说明
(1)在当前目录新建一个Git代码库:git init
新建一个目录,将其初始化为Git代码库:git init [project-name]
(2)克隆:git clone <url>
(3)显示当前的Git配置:git config --list
(4)分支
查看分支:git branch
创建分支:git branch <name>
切换分支:git checkout <name>
创建+切换分支(常用):git checkout -b <name>
查看所有分支:git branch -a
删除远程分支:git push origin --delete <name>
删除本地分支:git branch -d <name>
(5)检出(切换)分支:git checkout <branchName>
git checkout -- < fileName > 命令 意思是工作区的修改全部撤销,即回到该文件最近一次git commit 或者git add时的状态。
(6)添加当前目录的所有文件到暂存区:git add
添加指定目录到暂存区,包括子目录:git add [dir]
添加指定文件到暂存区:git add [file1] [file2] ...
(7)查看状态:git status
(8)提交暂存区的修改:git commit --m “提交日志” #注意日志请大于6个字符
(9)代码回退:
git reset HEAD <file> 可以把暂存区的修改撤销掉(unstage),重新放回工作区
git reset --hard commit_id 回退到指定提交版本
(10)拉取代码 git pull
git pull=git fetch+git merge 拉取代码如果有冲突需要解决冲突,解决之后再推送代码。
(11)推送代码:git push origin <branch-name>
3、补充说明
(1)关于分支
Master分支 分支(长期分支):这个分支是所有其他长期存在分支的上游,master分支的代码始终与线上最新代码保持一致。这个分支只能从其他分支合并,不能在这个分支直接修改。可基于master分支拉出dev和Hotfix分支。可接受来自dev和Hotfix分支的合并请求。
Dev分支(长期分支):功能分支,用于规划一个新的发布版本,不能直接在这个分支修改,可接收来自Feature分支和Hotfix分支的合并请求。可基于该分支拉出Feature分支和Hotfix分支。
Feature 分支(短期分支):这个分支主要是用来开发一个新的功能,一旦开发完成,我们合并回Dev分支。
Hotfix分支(短期分支):当我们在prd环境发现新的Bug时候,我们需要创建一个Hotfix, 完成Hotfix后,我们合并回master分支和dev分支。
(2)Git工具 - 储藏(stashing)
经常有这样的事情发生,当你正在进行项目中某一部分的工作,里面的东西处于一个比较杂乱的状态,而你想转到其他分支上进行一些工作。问题是,你不想提交进行了一半的工作,否则以后你无法回到这个工作点。解决这个问题的办法就是Git 储藏(stashing)。
“储藏”可以获取你工作目录的中间状态——也就是你修改过的、被追踪的文件和暂存的变更——并将它保存到一个未完结变更的堆栈中,随时可以重新应用。
你想切换分支,但是你还不想提交你正则进行中的工作,所以你储藏这些变更,为了往堆栈推送一个新的储藏,只要运行git stash,你的工作目录就干净了。
查看现有的储藏git stash list
恢复:
git stash apply 恢复,恢复后,stash内容并不删除,需要用git stash drop来删除
git stash pop 恢复的同时把stash内容也删了
详细参考文章:https://www.cnblogs.com/tocy/p/git-stash-reference.html
(3)分支合并merge or rebase
合并git merge
git merge -m “merge with no-ff” <branchName>
合并git rebase
跟merge合并的结果相同,不同的是rebase操作可以把本地未push的分叉提交历史整理成直线,即相当于基于最新代码做了一次变更。
git log --graph 查看merge合并情况
例如:存在两个分支master,feature,现在要把feature分支合并到master上面,merge和rebase效果分别如图示:
参见:https://www.cnblogs.com/xueweihan/p/5743327.html
(4)压缩提交记录:参见另一篇文章https://www.cnblogs.com/wynjauu/articles/10168890.html
转载请标明原地址:https://www.cnblogs.com/wynjauu/articles/10567584.html