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_rsaid_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

posted @ 2019-03-20 20:51  舞羊  阅读(134)  评论(0编辑  收藏  举报