美文网首页
Git 命令简介

Git 命令简介

作者: 丿小七 | 来源:发表于2019-08-02 18:28 被阅读0次

    总结 Git 版本管理 - 命令

    代码提交删除及版本回退

    1. git add readme.txt

      添加修改的文件,把文件修改添加到暂存区

    2. git commit -m "append GPL"

      提交修改的文件 -m后接提交log,是把暂存区的所有内容提交到当前分支
      如果不用git add到暂存区,那就不会加入到commit

    3. git loggit log --pretty=oneline

      查看历史记录

    4. HEAD

      当前版本,HEAD^上个版本,HEAD^^ 上上个版本,HEAD~100往上100个版本

    5. git reset --hard HEAD^

      回退到上一个版本

    6. git reset --hard 1094a

      回退到指定版本,1094a指定版本的ID

    7. git reflog

      记录每一次命令

    8. git diff HEAD -- 要查看的文件.m

      查看工作区和版本库里面最新版本的区别:

    9. git checkout -- 要修改的文件.xx

      可以丢弃工作区的修改,让这个文件回到最近一次git commitgit add时的状态
      要修改的文件.xx自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;
      要修改的文件.xx已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态
      git checkout其实是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”。前提是有被添加到版本库

    1. git reset HEAD 暂存区要撤销的文件.xx

      把暂存区的修改撤销掉(unstage),重新放回工作区
      执行完该命令后,暂存区是干净的,工作区有修改,如果需要丢弃工作区的修改,参考第9点

    又到了小结时间。
    
    场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout -- file。
    
    场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD <file>,就回到了场景1,第二步按场景1操作。
    
    场景3:已经提交了不合适的修改到版本库时,想要撤销本次提交,参考版本回退,不过前提是没有推送到远程库。
    
    1. rm test.txtgit rm

      在文件中删除或者命令删除时,需要从版本库中删除该文件,删除后需要提交git commit

    远程仓库

    1. 创建SSH Key
      本地git仓库和github仓库之间的传输是通过ssh加密的,所以需要先创建SSH Hey,在用户主目录下查看有没有.ssh,如果有检查有没有id_rsaid_rsa.pub这两个文件,如果有了,则可以跳过,没有则创建

      ssh-keygen -t rsa -C "youremail@example.com"

    2. 登录GitHub,打开账号设置SSH Keys页面
      添加SSH Key,粘贴id_rsa.pub文件的内容

    添加远程仓库

    先有本地库,后有远程库,如何关联远程库

    个人远端仓库 origin.png
    • 本地Git仓库、GitHub创建仓库,保持同步
    1. 登录GitHub

    2. 找到Create a new repo按钮,创建新仓库

    3. Repository name处填入仓库名称(方便后面使用用learngit代替),点击创建,成功的创建一个新的Git仓库

    4. learngit新建的仓库为空仓库,可以从改仓库克隆出新的仓库,也可把一个已有的本地仓库与之关联,然后把本地仓库的内容推送到GitHub仓库,在本地learngit仓库下运行命令

      git remote add origin git@github.com:youGitHubAccountName/learngit.git
      * 添加成功后远程库的名字就是origin

    5. 把本地库的所有内容推送到远程库上

      git push -u origin master
      * 把本地库的内容推送到远程,实际上是把当前分支master推送到远程,由于远程库是空的,在第一次推送master分支时加上-u参数,git会把本地的master分支内容推送到远程新的master分支,还会把本地的master分支和远程的master分支关联起来。
      > git push

    6. 推送成功后可以在GitHub页面中看到远程库的内容已经和本地一样了

    7. 本地更改提交

      git push origin master

    • 小结:

      • 关联一个远程库

      git remote add origin git@server-name:path/repo-name.git

      • 关联后第一次推送master分支的所有内容

      git push -u origin master

      • 每次本地提交后,推送最新修改

      git push origin master

    从远程库克隆

    先创建远程库,然后从远程库克隆

    git与本地建立联系.png
    1. 登录GitHub,创建新仓库,名字叫(以实际项目名字命名)gitsKills
    2. 勾选initialize this repository with a README,会自动创建一个README.md文件
    3. 用命令克隆一个本地库git clone(确定本地仓库的路径在输入命令)

      git clone 创建的仓库地址.git

    • 小结
      需要先知道仓库地址,然后使用git clone命令克隆

    分支管理

    创建与合并

    1. 创建dev分支,然后切换到dev分支

      git checkout -b dev
      -b表示创建并切换相当于两条语句
      git branch dev
      git checkout dev

    2. git branch查看当前分支,当前分支前面会有一个*

    3. dev分支的工作完成即commit后,就可以切回master分支

      git checkout master

    4. dev上的工作成果合并到master分支上

      git merge dev
      用于合并指定分支到当前分支(经过第3步的操作后,该出即将dev合并到master上)

    5. 合并完成后删除dev分支

      git branch -d dev

    • 小结

      建议使用分支完成某个任务,合并后再删掉该分支

      • 查看分支:git branch
      • 创建分支:git branch branchName
      • 切换分支:git checkout branchName
      • 创建+切换分支:git checkout -b branchName
      • 合并某分支到当前分支:git merge branchName
      • 删除分支:git branch -d branchName

    解决冲突

    使用git status也可以告诉我们冲突的文件
    找到对应的冲突文件后,手动解决冲突,
    重新添加commit
    git log --graph --pretty==oneline --abbrev-commit查看分支合并情况

    分支管理策略

    • master分支应该是非常稳定的,也就是仅用来发布新版本,平时不能在上面干活;
    • 干活都在dev分支上,也就是说,dev分支是不稳定的,到某个时候,比如1.0版本发布时,再把dev分支合并到master上,在master分支发布1.0版本;

    通常Git会用Fast forward模式,这种模式下删除分支,会丢掉分支信息。
    如果强制禁用Fast forward模式,Git会在merge时生成一个新的commit,这样从分支历史上就可以看出分支信息。

    1. 创建并切换dev分支

      git checkout -b dev
      git add readme.txt
      git commit -m "add merge"

    2. 切回master

      git checkout master

    3. 准合并dev分支,--no-ff参数为禁用Fast forward

      git merge --no-ff -m "merge with no-ff" dev
      因为--no-ff会创建一个新的commit,所以加上-m参数,把commit描述写进去

    4. 合并后用git log查看分支历史

      git log --graph --pretty=oneline --abbrev-commit

    bug分支

    stash,可以把当前工作现场储藏(暂存)起来,等以后恢复现场后继续工作

    • git stash 暂存工作区内容
    • git stash list 查看工作区的内容
    • git stash applygit stash drop 恢复工作去的内容并删除stash里的内容
    • git stash pop 恢复工作去的内容并删除stash的内容

    修复bug时,我们会通过创建新的bug分支进行修复,然后合并,最后删除,
    当手头工作没有完成时,先把工作现场git stash一下,然后去修复bug,修复后,再git stash pop,回到工作现场

    Feature分支

    多功能开发
    一个功能对应一个feature分支

    • git branch -d feature-vulcan 删除一个分支
    • git branch -D feature-vulcan 强行删除一个分支

    多人协作

    • 推送分支,把该分支推送到远程仓库

      git push origin 要推送的分支名

    • master为主分支,因此要时刻远程同步

    • dev分支是开发分支,所以也需要与远程保存同步

    • bug分支只用于本地修复bug,就没必要推送到远程了

    • feature分支是否推送到远程取决与是否合作开发

    抓取分支

    1. 先用git pull把最新的提交从origin/dev上抓取下来,然后在本地合并,解决冲突,在推送
    2. git pull失败,原因是没有指定本地dev分支与远程分支的链接根据提示可设置后再pull

      git branch --set-upstream-to=origin/dev dev

    • 多人协作的工作模式:
      1. 首先试图用git push origin branchName 推送自己的修改

      2. 推送失败,因为远程分支比你的本地更新,需要先git pull合并

      3. 合并如有冲突则解决冲突,并在本地提交

      4. 在用git push origin branchName推送

      5. 本地分支和远程分支创建链接关系

        git branch --set-upstream-to branchName origin/branchName

    Rebase

    变基
    rebase操作可以把本地未push的分叉提交历史整理成直线;

    rebase的目的是使得我们在查看历史提交的变化时更容易,因为分叉的提交需要三方对比。

    标签管理

    创建标签:

    • git branch 切到需要打标签的分支上
    • git tag v1.0 打一个新的标签
    • git tag 查看所有标签 标签是按字母排序的,不是按时间顺序列出的
    • git log --pretty=oneline --abbrev-commit 查找commit id
    • git tag v0.9 commit id 指定提交的地方打标签
    • git tag show v0.9 查看标签信息
    • git tag -a v0.1 -m “version 0.1 released” 1094adb-a指定标签名,-m指定说明文字
    • git tag -d v0.1 删除本地标签
    • git push origin <tagname> 推送到远端
    • git push origin --tags 推送全部标签到远端
    • git push origin :refs/tags/v0.9,删除远程标签,已经推送到远端的删除需要先删除本地的标签,然后在删除远端的

    常用命令

    • git push origin branch-name 从本地推送分支,使用

    • git pull抓取远程的新提交

    • git checkout -b branch-name origin/branch-name建立本地分支和本地远程分支的关联

    • git branch --set-upstream branch-name origin/branch-name 本地分支和远程分支创建链接关系

    • git remote -v 显示本地所有的远程仓库地址

    • git remote remove origin/upstream 删除本地代码与远端GitLab分支之间的关系

    • git remote add origin git@gitlab.go-goal.cn:albert/xxx-bottom.git 本地代码与新的GitLab服务器关联起来

    • git remote add upstream git@gitlab.go-goal.cn:albert/xxx-bottom.git 本地代码与新的GitLab服务器关联起来

    • git pull 线上线下分支同步

    • git pull upstream 线上线下分支同步

    • git push origin --all 将本地的所有分支都推送到新的GitLab服务器远程分支

    • git stash 暂存工作区内容

    • git stash list 查看工作区的内容

    • git stash applygit stash drop 恢复工作去的内容并删除stash里的内容

    • git stash pop 恢复工作去的内容并删除stash的内容

    • git log --graph --pretty==oneline --abbrev-commit

      查看分支合并情况

    • git status

      查看当前仓库的状态

    • git diff

      查看difference修改内容

    • git add 、git commit

      添加需要提交的文件,然后commit

    1. mkdir learngit 创建一个空目录

    2. cd learngit 切换到该目录下

    3. pwd 查看该目录路径

    4. git init

    5. ls -ah 查看.git的目录,.git用来跟踪管理版本库的

    6. cat ~/.ssh/id_rsa.pub 查看ssh是否是自己的(与git管理台自己账户设置中对应)

    7. 移除之前的仓库对应关系

      git remote remove origin
      git remote remove upstream

    8. 创建新的自己的仓库,在建立主仓库upstream

      git remote add origin 地址xxx
      git remote add upstream http://远端地址.git (输入要要远程连接的主仓库)

    9. 再拉取本地仓库的分支和upstream分支

      git pull upstream

    多需求开发时,有未完成的任务,又需要切换分支的情况:
    先暂存,然后切换分支,处理完后切回,然后找回暂存内容,继续开发

    • git stash 暂存工作区内容
    • git stash list 查看工作区的内容
    • git stash applygit stash drop 恢复工作去的内容并删除stash里的内容
    • git stash pop 恢复工作去的内容并删除stash的内容

    参考:Git教程
    https://www.liaoxuefeng.com/wiki/896043488029600/896954848507552

    Git Document
    https://git-scm.com/book/zh/v2

    Git cheat sheet
    https://gitee.com/liaoxuefeng/learn-java/raw/master/teach/git-cheatsheet.pdf

    相关文章

      网友评论

          本文标题:Git 命令简介

          本文链接:https://www.haomeiwen.com/subject/izrrdctx.html