zoukankan      html  css  js  c++  java
  • Git 工作原理以及常用命令操作

    GIT工作原理

        要了解GIT工作原理,先了解GIT的这几块区域:

    工作区域划分   

       工作区:指的是本地工作空间,如果刚拉取下来的代码,没有修改的内容,这块区域是空白的 (modified-已修改状态)

       暂存区:将改动内容进行暂存 (staged-已暂存状态)

       HEAD:HEAD指针,当前指向的分支

       本地版本库:(commited-已提交状态)

       远程仓库:push操作后,将本地版本库推送到远程仓库

     

    工作流程

    • 在工作区中修改文件。(modified)
    • 将你想要下次提交的更改选择性地暂存,这样只会将更改的部分添加到暂存区。(staged)
    • 提交更新,找到暂存区的文件,将快照永久性存储到 Git 目录。(commited)

    开发最常用的五个命令

    1、git clone projectUrl 拉取远程仓库代码到本地,projectUrl是一个具体的git仓库地址路径

    2、git add 将工作区的修改的内容添加到暂存区 

    3、git commit 将暂存区域的的内容提交到HEAD所在的分支

    4、git pull  拉取远程分支内容到本地

    5、git push 将HEAD分支内容推送到远程分支上面

    GIT常用命令



    git clone http://127.0.0.1:9090/root/spring-demo-devops.git  // clone 远程仓库代码到本地计算机

    git status     // 查看文件的状态

    Changes not staged for commit; 

    这段信息提示我有修改的信息没有提交到暂存区,建议使用git add 命令进行添加到暂存区域,或者使用git checkout 命令放弃工作区的修改

    Untracked files:

    表示这些文件是新建的,还没有纳入git的管理,建议使用git add 命令将这些文件纳入git管理

    git status -s  // 查看状态,比较简短的信息展示

    红色M:表示有改动的文件,还没有添加到暂存区

    绿色M:表示已添加到暂存区的文件

    ??:表示还没有纳入git管理的文件

    A:表示刚纳入git管理的文件

    U:表示有冲突的文件

    git add .
    git add Test.java

    1、将未跟踪的文件纳入git的管理

    2、将已纳入git管理的文件的改动添加到暂存区域

    3、冲突解决后,标记冲突已经解决

    git commit -m "提交commit,并且编写注释"   // 提交并且注释

    git commit --amend  // 修改已经提交的注释

     

    git log  //查看已有的commit 

     

    git log --pretty=oneline Test.java   // 查找某个文件的commit变更历史

     

    git log -p -1   // 显示最近一次commit的修改信息

     

    git log --stat   // 显示commit的文件修改统计信息。

     

    git log --grep "Test"   //  查找注释信息包好test的commit的信息

     

    git cherrry-pick 19ed20582a5fe0dc8a5da3bc1cb0a9c0ef663346   // 将ID为19ed20582a5fe0dc8a5da3bc1cb0a9c0ef663346 的commit合并到当前分支

     

    git reset --hard FETCH_HEAD  //放弃本地commt 

     这个操作,用于自己本地的操作没有提交到远程分支

    git remote rename aaa bbb  //将远程仓库aaa 重命名为 bbb
    git remote remove bbb  //移除远程仓库bbb
    git remote show origin   // 查看远程仓库的信息

    1、可以展示远程仓库的简写(origin)和URL(https://github.com/mybatis/mybatis-3.git), 

    2、远程分支有那些,3.2.x 、3.3.x ……

    3、执行git pull的时候远程分支master将会拉取到本地和本地的master进行合并

    4、执行git push的时候将会本地master分支推送到远程master分支上面

    git remote   // 查看仓库的简写

     远程仓库的简写为origin

    git remote -v  // 查看仓库的简写以及对应的URL

    1、 简写为origin 

    2、URL为:https://github.com/mybatis/mybatis-3.git

    git remote prune origin  // 同步远程已经删除的分支,使用场景:发起分支合并请求,合并完成之后远程删除了哪个分支,
    git remote update origin -p  // 更新远程分支列表
    gitk --all   // 查看项目分叉历史图

    git log --oneline --decorate --graph --all  //显示项目分叉信息 

    git checkout -b develop   // 增加并切换到develop分支,使用场景:一般用于拉分支开发新需求,或者拉分支修复bug

    git push -u origin develop // 推送develop分支到远程仓库

    git push origin :develop   // 删除远程develop分支

     

     远程分支删除了,但是本地分支还有的,所以本地分支也要删除

    git branch -D develop  // 删除本地develop分支

     

     删除本地分支的时候需要HEAD指针不是要删除的分支。

    git merge 2.8.0-zd // 将2.8.0-zd分支合并到当前分支,这是基于本地分支进行操作,需要先 pull最新代码

     新建了develop分支,然后修改了一个readme文件,然后将分支合并master分支

    git tag -a 3.2.8-RELEASE -m '版本3.2.8-RELEASE'   // 创建本地tag

    需要注意的是,这里执行完之后,不会有任何的显示信息,要去git tag 查询是否创建成功 

    git tag   // 查看有哪些tag

     

     可以看到已经创建成功了tag,但是没有显示任何的备注信息,可以使用git show 查询下备注信息

    git show 3.2.8-RELEASE  // 要显示附注信息,我们需要用 show 指令来查看

     可以显示注释信息,已经变化的内容,这个时候这个tag只是在本地,不在远程仓库的,需要推送到远程库去

    git push origin 3.2.8-RELEASE  // 推送tag:3.2.8-RELEASE到远程代码库
    git push origin --tags   // 推送本地的所有tag到远程仓库

     

    git tag -d 3.2.8-RELEASE  //删除本地tag

     

     本地的tag删除了,但是远程还有的,需要删除远程的tag

    git push origin :refs/tags/3.2.8-RELEASE   // 删除远程tag
    git push origin --delete 3.2.8-RELEASE   // 删除远程tag

     

    git fetch origin tag 3.2.8-RELEASE   // 拉取远程tag到本地

     

     别人打了tag,或者在gitlab界面上面打了tag,拉取到本地

    git checkout 3.2.8-RELEASE  // 检出3.2.8-RELEASE内容,仅限于查看

     

    其他常用场景操作

    记住用户名和密码:
    git config --global credential.helper store 
    执行后,只要输入一次就行了
    合并时忽略某文件
    1、在项目跟目录下面新建文件.gitattributes
    2、文件中添加 pom.xml merge=ours 配置
    3、执行命令进行配置,git config merge.ours.driver true
    执行完成以上步骤,merge的时候就不会把pom.xml的变更合并过来了
    在develop分支拉取分支用来修复bug
    git checkout develop // 切换到develop分支
    git checkout -b bugfix // 基于develop分支拉取一个分支bugfix 并切换到该分支
    git push -u origin bugfix //推送bugfix分支到远程服务器上面
    然后发起请求合并,等待管理人员进行代码合并
    基于tag:3.2.8-RELEASE拉取分支修复bug,然后发布3.2.9-RELEASE版本
    git checkout 3.2.8-RELEASE
    git checkout -b bugfix
    git push -u origin bugfix
    git tag -a 3.2.9-RELEASE -m ' 版本3.2.9-RELEASE'
    git push origin 3.2.9-RELEASE
    develop分支需要上测试环境,基于develop分支打一个tag
    git tag -a 3.2.8-RELEASE -m ' 版本3.2.8-RELEASE'
    git push origin 3.2.8-RELEASE
    某些文件不想纳入git管理,新建.gitignore文件,添加以下内容
    
    # 忽略所有的 .settings 文件
    .settings/
    
    # 只忽略当前目录下的 Test 文件,而不忽略 subdir/Test
    /Test
    
    # 忽略任何目录下名为 target 的文件夹
    target/
    
    # 忽略 doc/notes.txt,但不忽略 doc/server/arch.txt
    doc/*.txt
    
    # 忽略 doc/ 目录及其所有子目录下的 .pdf 文件
    doc/**/*.pdf
    初始项目推送到git仓库
    
    git init // 创建一个名为 .git 的子目录,这个子目录含有你初始化的 Git 仓库中所有的必须文件
    
    git add . // 标识那些文件要放到git仓库进行追踪记录
    
    git commit -m "first commit" //提交到暂存区域
    
    git remote add origin http://127.0.0.1:3000/qq/sssss.git //推送到远程git远程服务器上面
    
    git push -u origin master 推送master分支到远程
    
    git clone http://127.0.0.1:4000/qq/sssss.git // 将git服务器上面的远程项目拉取下来。包含所有的分支和tag代码信息





  • 相关阅读:
    简单的Servlet结合Jsp实现请求和响应以及对doGet和doPost的浅析
    My1stServlet
    Myeclipse发布第一个jsp页面及web project部署到tomcat上的几种方法
    java中循环的不同终止方式
    Mybatis学习笔记
    python 进程间的数据交互
    python 进程
    python 队列
    python 多线程
    python paramiko 向linux执行命令和发送接收文件
  • 原文地址:https://www.cnblogs.com/mjoker0416/p/13028249.html
Copyright © 2011-2022 走看看