Git 学习

作者: 墨罚 | 来源:发表于2019-08-25 18:45 被阅读0次

一、基本操作

  • 将当前目录初始化一个git仓库
    git init
  • 将文件快照放入暂存区域
    git add 文件
  • 提交更新,找到暂存区域的文件,将快照永久存储到git仓库
    git commit -m "提交信息,建议写有意义的详细信息,方便从历史记录中找到改动记录"
    可以多次git add 不同文件,commit一次将暂存区所有修改提交
  • 查看仓库当前状态
    git status
    下面的命令输出告诉我们,demo.txt被修改过,但未提交
$ git status
On branch master
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

        modified:   demo.txt

no changes added to commit (use "git add" and/or "git commit -a")

  • 查看修改的内容
    git diff 文件
  • 查看提交日志
    git log
    如果看的眼花缭乱,可以加上--pretty=oneline
  • 回退到某一版本
    git reset --hard 某一版本 回退到往上100个版本
    HEAD表示当前版本
    HEAD^表示上一个版本
    HEAD^^表示上上一个版本
    HEAD~100表示往上100个版本
  • 回到之前最新版本
    git reset --hard 版本id id越长越好,不然容易找到多个版本号
    1. 在命令行窗口还没关闭的情况下,找到那一版本的commit id(一串十六进制)
    2. Git提供了一个命令记录你的每一次命令
      git reflog
      可以从中找到对应commit id
  • 撤销修改
    git checkout -- 文件
    回退到最近一次git commitgit add时的状态
    命令中--很重要,没有就变成“切换到另一个分支”
  • 撤销暂存区的文件,重新放回工作区
    git reset HEAD 文件
  • 删除文件
    git rm 文件
    • 第一种情况 git rm并且 git commit 将删除版本库的文件。
    • 第二种情况git checkout -- 文件 将被删除的文件恢复到最新版本。

二、远程仓库

  • 创建SSH Key
    ssh-keygen -t rsa -C "邮箱" 会在用户主目录下生成.ssh目录
    id_rsa私钥,不可泄露
    id_rsa.pub公钥,可以告诉任何人
  • 在GitLab上添加SSH密钥(公钥)
  • 在GitLab中创建仓库,并复制仓库的SSH格式的URL(注意不是地址栏的URL)
添加远程仓库
  • 关联远程库,在本地仓库下运行命令
    git remote add origin 仓库URL 这里是GitLab仓库的URL
    其中origin是远程库的名字,可以修改。
  • 将本地库内容推送到远程库
    git push -u 远程库名称 master
      用git push命令,实际上是把当前分支master推送到远程。
      由于远程库是空的,我们第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。
      从现在起,只要本地作了提交,就可以通过命令git push 远程库名称 master推送到GitLab
从远程库克隆
  git clone 远程仓库的URL  
  //这样本地仓库就已经将远程仓库项目克隆下来了。

三、分支管理

  因为创建、合并和删除分支非常快,所以Git鼓励你使用分支完成某个任务,合并后再删掉分支,这和直接在master分支上工作效果是一样的,但过程更安全。

  • 创建并切换分支
    git checkout -b 分支
    git checkout 命令加上 -b表示创建并切换,相当于一下两条命令
    git branch 分支
    git checkout 分支
  • 查看当前分支
    git branch

  • 切换分支
    git checkout 分支

  • 合并指定分支到当前分支
    git merge 指定分支

  • 删除分支
    git branch -d 分支

  • 解决冲突

修改dev分支后

$ git checkout master
Switched to branch 'master'
Your branch is ahead of 'origin/master' by 1 commit.
  (use "git push" to publish your local commits)
//修改分支后,从分支切换到master时,Git还会自动提示我们当前master分支比远程的master分支要超前1个提交。

如果此时再修改master分支内容,合并时会提示冲突

$ git merge feature1
Auto-merging demo.txt
CONFLICT (content): Merge conflict in demo.txt
Automatic merge failed; fix conflicts and then commit the result.
//Git告诉我们,demo.txt文件存在冲突,必须手动解决冲突后再提交。

git status也可以告诉我们冲突的文件
在文件内容中Git用<<<<<<<,=======,>>>>>>>标记出不同分支的内容
将冲突的内容统一,解决冲突内容后重新提交即可。

  • 查看分支合并情况
    git log --graph --pretty=oneline --abbrev-commit
    git log --graph查看分支合并图
分支管理策略

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

  • 禁用Fast forward模式,创建分支
    git merge --no-ff -m "详细合并信息" dev
BUG分支

  软件开发中,bug就像家常便饭一样。有了bug就需要修复,在Git中,由于分支是如此的强大,所以,每个bug都可以通过一个新的临时分支来修复,修复后,合并分支,然后将临时分支删除。
  当你接到一个修复一个代号101的bug的任务时,很自然地,你想创建一个分支issue-101来修复它,但是,当前正在dev上进行的工作还没有提交。
  并不是你不想提交,而是工作只进行到一半,还没法提交,预计完成还需1天时间。但是,必须在两个小时内修复该bug,怎么办?
  幸好,Git还提供了一个stash功能,可以把当前工作现场“储藏”起来,等修改BUG以后恢复现场继续工作:

  • 将当前工作现场“储藏”起来,等以后恢复现场继续工作
    git stash
    现在用git status查看工作区,工作区就是干净的(除非没有被Git管理的文件)
  • 查看“储藏”的工作现场
    git stash list
  • 恢复最近一次“储藏”的工作现场
    git stash apply
    恢复指定工作现场,通过git stash list查看工作现场的序号,将(stash@{序号})追加到命令后面
    注意,序号越靠后,说明储藏的时间越长
    这样恢复后,stash内容并不会删除,需要手动删除
  • 删除“储藏”的工作现场
    git stash drop
  • 恢复并删除“储藏”的工作现场
    git stash pop
  • master分支出现bug,说明dev同样也存在,Git专门提供了命令,让我们复制一个特定的提交到当前分支
    git cherry-pick 特定的提交id
Feature分支

  软件开发中,总有无穷无尽的新的功能要不断添加进来。
  添加一个新功能时,你肯定不希望因为一些实验性质的代码,把主分支搞乱了,所以,每添加一个新功能,最好新建一个feature分支,在上面开发,完成后,合并,最后,删除该feature分支。
  如果在feature分支还没有合并前,需要取消这个功能,删除时会销毁失败,需要使用大写的-D参数强制删除。
   git branch -D 分支

多人协作

  当你从远程仓库克隆时,实际上Git自动把本地的master分支和远程的master分支对应起来了,并且,远程仓库的默认名称是origin。

  • 查看远程库的信息
    git remote -v -v表示详细信息
  • 推送分支
    git push 远程库名称 本地分支名称
  • 抓取分支
    git clone 远程仓库的URL 默认只能看到本地的master分支
    如果要在dev分支上开发,就必须创建远程origin的dev分支到本地
    git checkout -b dev origin/dev 创建并且还dev分支,并将远程库origin/dev 弄下来
    如果最新提交和你推送的提交有冲突,先用git pull把最新提交抓下来,然后在本地合并,解决冲突,再提交。
//git pull 失败
$ git pull
There is no tracking information for the current branch.
Please specify which branch you want to merge with.
See git-pull(1) for details.

    git pull <remote> <branch>

If you wish to set tracking information for this branch you can do so with:

    git branch --set-upstream-to=origin/<branch> dev
//原因是没有指定本地dev分支与远程origin/dev分支的链接,根据提示,设置dev和origin/dev的链接
  • 设置本地分支dev与远程分支origin/dev的链接
    git branch --set-upstream-to=origin/dev dev

  • 多人协作工作模式
    尽量将冲突在本地解决

  1. pull远程库内容到本地先进行合并
  2. 如合并冲突,则解决冲突
  3. 如没有冲突或解决后,再commit 并push到远程库

相关文章

  • Git+node.js+TDD

    目录 Git学习 node.js学习 用Nodejs和Git完成TDD编程 Git学习 Git是什么Git是一款免...

  • Git 学习笔记

    ----------------- Git 学习 ------------------ Git 简介 Git...

  • git 入门

    git 入门学习笔记----3个入门命令:git init、git add、git commit -v 学习场景(...

  • git技术,GitHub、GitLab

    git学习 Git教程(小白快速入门版) Git教程(简化版) git详细学习 Gitlab的管理使用手册git初...

  • Git常用命令与学习总结

    安装Git Git的下载地址:Git官网下载地址 学习网址 git 学习笔记- Book 在线练习地址 基础常用指...

  • Git学习之思维导图

    Git学习之思维导图 Git学习之思维导图

  • git记录

    Git Magic图解gitgit 学习笔记git游戏(学习)1、消除文档路径中文乱码git config --g...

  • git资源学习

    git资源学习 Git详解之一 Git起步 Git详解之二 Git基础 Git详解之三 Git分支 Git详解之四...

  • Git入门学习资源

    Git入门学习资料 廖雪峰 Git教程 Git官网 Pro Git git 简明指南 github-git-che...

  • 2018-04-18

    git学习小结 关于git init,git add,git commit 用法总结 1.首先配置git 全局配置...

网友评论

    本文标题:Git 学习

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