git的基本使用

git的基本使用

  • 基本配置

    • 配置用户名和密码

      git config –global user.name “Your Name”
      git config –global user.email “[email protected]

    • 注意:git config中的–global参数,表示这台机器所有git仓库都会使用这个配置,也可以对某个仓库指定不同的用户名和email地址
  • 基本使用篇

    • 创建版本库:#选择合适地方创建空目录

    • 1.手动建立空文件夹作为版本库

    • 2.使用命令行创建版本库

      • mkdir 目录名
      • cd 目录名
      • pwd 目录所在位置 (pwd表示当前目录)
    • 创建一个仓库:git init 仓库名

      • git init

      • 打开目录使用git init将这个目录变成git可以管理的仓库

    • 向仓库中添加文件 git add 文件名

      • git add .:监控工作区的状态树,把工作时的所有变化提交到暂存区
      • git add -u: 仅监控已经被add的文件(即tracked file),将被修改的文件提交到暂存区
      • git add -A: 上面两个功能的合集
    • 查看仓库的状态 git status

      • git status 查看仓库的状态以及是否有文件的修改
    • 提交改动 git commit -m “*提交文件的说明*”

      • git commit -am “说明”,commit类似于快照,可以利用快照恢复到最近的一个commit进行恢复。
    • 删除文件 git rm 文件名

      • git rm 文件名
    • 查看文件的不同处 git diff 文件名

    • 查看提交的日志历史 git log

      • 显示由最近到最远提交日志,可以通过加上 –pretty=oneline参数精简信息
    • 看到的一大串数字表示的是commit id(版本号)

      • HEAD:表示是当前版本
      • HEAD^:表示上一个版本
      • HEAD^^:表示是上上个版本
      • HEAD^~100:往上100个版本
    • 版本回退 git reset –hard commit_id

      • git reset –hard HEAD^:会退到上个版本
      • git reset –hard commit id:回退到指定id,版本号没有必要写全

这里写图片描述

版本回退类似于指针,回退的时候git仅仅是将HEAD从指向当前版本变为你想要回退的那个版本

    • 记录每一次输入的命令:git reflog

    • 名词解释

      • 工作区:电脑中可以看到的目录,如我们建立的作为版本库的文件夹
      • 版本库:工作区中有一个隐藏目录”.git”,这个不算是工作区,而是git的版本库。
    • 注意:

      • 版本库里有很多东西,最终要的就是stage(*或者是index)*的暂存区
      • git会为我们自动创建的第一个分支****master以及指向****master的一个指针叫做HEAD
        这里写图片描述

向版本库添加东西分为两步:
1.git add 将文件添加进去,实际上就是将文件修改添加到暂存区
2.git commit 提交修改,实际上就是将暂存区的所有内容提交到当前分支

  • 流程举例:工作区有一个readme.txt文件,修改这个文件,并添加一个名为LICENSE的文件

    • 1.使用git status 查看状态

这里写图片描述

这里写图片描述

  • 2.使用两次git add 文件名命令,将readme.txt和LICENSE文件提交后在使用git status命令查看状态

这里写图片描述

  • 3.之后暂存区的状态:

这里写图片描述

  • 4.使用git commit -m “提交说明”将文件提交到当前分支

这里写图片描述

  • 最后版本库就变成这样,暂存区也没有任何内容

这里写图片描述

  • 管理修改

    • git管理的是修改而不是文件
      举例说明:
      1.修改工作区文件a.txt
      2.将第一次修改后的文件a.txt添加到暂存区git add a.txt
      3.再次修改工作区文件a.txt
      4.提交文件修改git commit -m “…”
      git管理的是修改,使用git add将工作区的第一次修改被放入缓存区,准备提交,但是第二次在工作区做的修改没有放到缓存区,所以最后使用git commit只负责把缓存区的修改即第一次的修改提交,第二次修改不会被提交
      要想全部提交,可以继续 git addgit commit或者第一次修改->add->第二次修改->add->commit
    • git跟踪修改:每次修改,如果不add到缓存区,就不会加入commit
    • 查看工作区和版本库最新版本的区别git diff HEAD –文件名

    • 撤销修改 git checkout –file

      • 修改了文件,git add命令添加文件到缓存区,在提交前可以撤销修改, 使用git status,出现 changes to be committed表明文件只是放在缓存区,还没有提交到版本库,可以使用git reset HEAD file将缓存区的修改撤销掉(unstage)重新放回工作区
        eg:
        修改了a.txt文件
        git add a.txt #添加到缓存区
        git status #查看状态
        git reset HEAD a.txt #将缓存区回退
    • 丢弃工作区的修改:git checkout – readme.txt,将readme.txt文件在工作区的修改全部撤销,分为两种情况:

      • 1.readme.txt自修改后还没有被放到缓存区,撤销修改就是回到和版本库一模一样的状态
      • 2.readme.txt已经添加到缓存区,又做了修改,现在撤销修改就回到添加到缓存区后的状态
    • 删除文件:rm a.txt 或直接在文件管理器中删除

      • 1.从版本库中删除该文件使用 git rm 文件名,接着 git commit
      • 2.删错了,从版本库中修改,”一键还原”,git checkout –a.txt
    • 远程仓库:

    • 1.创建SSH Key:ssh-keygen -t rsa -C “[email protected]

    • 2.添加ssh密匙:github登录->Account settings->add ssh key

    • 3.添加远程仓库:远程创建一个仓库

    • 4.联接远程仓库:git remote add origin 仓库地址,仓库的默认名称为origin,也可以改变名称

    • 5.将本地库上的内容推送到远程仓库:git push -u origin master

      • 本地仓库推送到远程,使用git push命令,实际将当前分支master推送到远程,第一次推送master**分支加上*-u*参数,git不但会把本地的master分支内容添加推送到远程新的*master*分支,还会把本地的master分支和远程的master分支关联**起来,以后推送或拉取就可以简化命令。
    • 6.关联远程仓库使用命令:git remote add origin git@server-name:path/repo-name.git

    • 7.关联之后,本地修改内容就可以通过命令****git push origin master将本地分支的最新修改推送到github

    • 从远程仓库克隆:

      • 1.登录github,新建仓库
      • 2.克隆仓库,git clone 仓库地址
    • 分支管理

      • 一开始,默认只用一个名为master的主分支,是一条线,git使用master指向最新的提交,在用HEAD指向master,这样就可以确定当前分支以及当前分支提交点。

        这里写图片描述

        • 每次提交master分支就会向前移动一步,随着不断提交,master分支线越来越长,
    • 创建新的分支:如dev,git新建了一个指针名为dev,指向master相同的提交,再把HEAD指向dev,就表示当前分支在dev上。

这里写图片描述

      • 之后对工作区的修改和提交就是针对dev分支,新提交一次后,dev指针向前移动一步,而master指针不变

这里写图片描述

      • 分支合并:dev分支合并到master分支即直接把master指向dev的当前分支

这里写图片描述

      • 删除分支:删除dev分支就是把dev指针删除

这里写图片描述

      • 分支管理语法:#举例说明
      • 1.创建分支:git checkout -b dev,-b参数表示创建并修改分支相当于git branch dev和git checkout dev两条命令的集合

      • 2.查看当前分支:git branch,*表示当前分支,

        • 切换分支修改工作区文件a.txt,并将其添加到缓存区git add a.txt
      • 切换回分支master,git checkout master,查看修改内容,发现没有更改,因为实在dev分支上修改的

这里写图片描述

          • 合并dev分支到master分支:git merge dev,merge命令合并指定分支到当前分支
      • 删除分支dev:git branch -d dev

      • 命令:

        • 查看分支:git branch
      • 创建分支:git branch name
      • 切换分支:git checkout name
      • 创建+切换分支:git checkout -b name
      • 合并某分支到当前分支:git merge name
      • 删除分支:git branch -d name
    • 分支冲突的解决

      • master分支修改了文件****a.txt,添加了一句master,使用git add a.txt添加修改到暂存区,使用git commit -m “master edit”添加到版本库
      • 切换分支,git checkout -b dev,添加了一句dev,使用git add a.txt添加修改到暂存区,使用git commit -m “dev edit”添加到版本库
      • 切换回分支master:git checkout master,使用git merge dev合并dev分支到master分支:git merge dev,出现冲突,手动解决冲突,删除或修改冲突的部分
      • 再次提交,git add a.txt->git commit -m “conflict fixed”
      • 使用git log –graph –pretty=oneline –abbrev-commit查看分支的合并情况,git log –graph命令可以看到分支的合并情况
    • 分支管理策略

      • 合并分支时,git可能会用”Fast forward”模式,删除分支后会丢掉分支信息
      • 禁用“Fast forward”模式,git会在merge时生成一个新的commit,这样从分支历史上就可以见到分支信息
      • 举例说明:
      • 1.创建并切换dev分支
      • 2.修改a.txt文件并提交add,commit
      • 3.切换分支,合并git merge –no-ff -m “merge with no-ff” dev,因为本次合并要创建一个新的commit,所以加上-m参数,将commit描述添加
      • 4.使用git log查看分支历史
    • 分支策略:

      • master版本应该非常稳定,仅仅用来发布新版本
    • 注:合并分支时加上–no-ff参数就可以用普通模式合并,合并后的历史有分支,看可以看出来曾经做过的合并,而fast forward合并就看不出曾剑做过合并。

    • Bug分支:

      • 修复bug可以通过创建一个临时分支来解决

      • 当前处在分支dev上,工作完成一半不能提交,需要修改master分支上的一个bug

        • 1.“储藏”当前工作现场,等以后恢复现场后继续工作,git stash
      • 2.切换分支,git checkout master

      • 3.创建临时分支修改bug,git checkout -b ‘issue_101’

      • 4.修复完bug,提交修改…add,…commit

      • 5.切换分支,git checkout dev,恢复现场,使用git stash list查看工作现场

      • 6.恢复工作现场,继续工作。

        • git stash apply:恢复后,stash内容并不删除,需要使用git stash drop删除
        • git stash pop:恢复的同时删除stash内容
      • 注意:使用git stash list查看stash,使用git stash apply stash@{0},**恢复到指定的**stash

    • Feature分支

      • 需要添加一个新功能,创建新分支feature-vulcan,git checkout -b “feature-vulcan”
      • 开发完毕,提交版本库,git add vulcan.py,git commit -m “add feature”
      • 切回dev分支,准备合并,但是临时通知取消新功能,删除git branch -d feature-vulcan,提示失败,强行删除,通过命令git branch -D feature-vulcan
    • 多人协作

      • git remote origin查看远程仓库信息
      • git remote -v查看远程仓库详细信息,会显示可以抓取和推送的origin地址fetch->抓取,push->推送
    • 推送分支:把该分支上的所有本地提交推送的远程仓库,推送时,要指定本地分支,使用origin 分支名,eg:git push origin master

猜你喜欢

转载自blog.csdn.net/littlexbear/article/details/80036814