git学习笔记 - Go语言中文社区

git学习笔记


GIT学习笔记

1、git 安装 以及初始配置

  • 安装
    sodu apt-get install git
  • 配置
    $ git config --global user.name "jacklin"
    $ git config --global user.email 361525737@qq.com

2、创建版本库

  • 创建版本库(仓库)文件

      mkdir jacklingit  //创建git文件夹
      cd jacklingit    // 打开
      pwd              // 查看当前目录
    
  • 通过 git init 命令把这个目录编程可以管理的仓库

    $ git init
    Initialized empty Git repository in /Users/michael/learngit/.git/
    

    这个时候当前目录多了一个.git的文件,这个目录是Git来跟踪管理版本库的,不能手动修改。

  • 现在编写一个test.txt的文件放到jacklingit目录下,并通过git.add告诉git,把文件添加到仓库,然后通过git commit命令告诉git 把文件提交到仓库。

    $ git add test.txt
    $ git commit -m "wrote a test file"
    

    这里的 commit -m 中 -m后面跟的是说明性质文字,可以是任意内容,但最好是有意义的。为什么需要add和commit 两步?因为 一次性可以commit多个文件,可以多次添加,一次提交。

3、修改记录

假如现在对test.txt进行部分修改

  • 用git status查看修改状态,用 git diff 来查看具体做了哪些改动

    $git status
    $git diff
    

看到具体改动之后我们才可以放心提交

  • 想开始一样,用 git add 和 git commit 添加和提交

4、版本回退

  • git log 命令显示由近到远的版本日志,包括时间、日期、作者等,如果想查看精简版本 可以使用 git log --pretty=oneline 命令

    $git log
    $git log --pretty=oneline
    
  • 假如这个文件提交过100次,那就有100个版本,使用git reset命令退回到指定版本

    $ git reset --hard HEAD^      //退回到上一个版本
    $ git reset --hard HEAD^^     //退回到倒数第二个版本
    $ git reset --hard HEAD~50    //退回到往前数50个版本
    

    然后通过 cat test.txt来查看当先版本是否时候操作后的版本

  • 这个时候通过 git log命令来查看版本日志,发现版本记录也彻底回到了原来50版本对应的日志,那么如何再退回到没有进行版本退回之前的最新版本?假如操作窗口还没有关闭,往上找到最新版本的版本号,假如是00000,执行 git reset --hard 00000
    $ git reset --hard 00000

  • 假如连commit id 也找不到怎么办? git reflog 命令可以查看你的每一次命令,然后知道commit id 就OK了

head 是git 的版本指针,设定哪里,版本指针就会指向哪里,所以恢复速度很快

5、工作区和暂存区

  • 工作区就是我们文件存放的区域,比如前面创建的jacklingit这个文件夹
  • 被我们创建的版本库文件里面都会有一个.gitd的文件(隐藏目录),这是git的版本库,版本库里面成怒了很多东西,其中最重要的就是暂存区(stage).
  • git为我们自动创建了一个分支master以及指向master的指针HEAD.
  • 文件提交的两步 git add就是把文件添加到暂存区,git commit就是把暂存区的文件提交到当前分支。

6、管理修改

  • git管理的不是文件,而是修改。
  • 当你没有将修改add到暂存区的话,commit是无效的。

git diff HEAD --test.txt //查看文件的修改

7、撤销修改

  • 当你该乱了工作区某个文件的内容,想直接丢弃工作区的修改

    $ git checkout --test.txt
    
  • 当你不但该乱了而且add到了暂存区

    $ git reset HEAD test.txt
    $ git checkout --test.txt
    
  • 当你不但放到了暂存区而且commit了,那就退回到上一个版本

    $ git reset  HEAD^
    

8、删除文件

  • 删除文件

    $ rm test.txt    
    
  • 这时工作区和暂存区的文件内容就不一致了,如果你要一并删除暂存区的对应文件,并且提交
    $ git rm test.txt
    $ git commit -m "remove test.txt"

  • 另一种情况时候误删,就用checkout恢复
    $ git checkout -- test.txt

文件一旦提交到版本库,就永远不用担心误删,但时候要小心,最后一次修改的内容会丢失。

9、远程仓库

  • 远程仓库的建立
    $ ssh-keygen -t rsa -C "361525737@qq.com"
    在用户目录输入命令之后一路回车,这时候有个.ssh的文件(可能是隐藏的),打开后里面有三个文件,其中一个是id_rsa.pub,打开然后复制里面的内容到github的SSH key中。
  • 在github中建立与本地版本库同名的repository,就成功地创建了一个新的Git仓库
  • 输入命令使本地版本库和远程库连通
    git remote add origin git@github.com:361525737@qq.com/jacklin.git
  • 下一步,就可以把本地库的所有内容推送到远程库上:
    $ git push -u origin master
    由于远程库是空的,我们第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。

10、从远程库克隆

  • 登录github建立一个新的仓库 名字叫gitskills,勾选Initialize this repository with a README,这样GitHub会自动为我们创建一个README.md文件。创建完毕后,可以看到README.md文件

  • 然后克隆一个本地库
    git clone git@github.com:Jacklin1992/gitskill.git

    如果有多个人协作开发,那么每个人各自从远程克隆一份就可以了。

    11、创建与合并分支

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

12、合并冲突

  • 当Git无法自动合并分支时,就必须首先解决冲突。解决冲突后,再提交,合并完成。
  • 用git log --graph命令可以看到分支合并图。

13、分支管理策略

  • master分支是稳定分支,只用来发布新版本,不能再上面操作,工作配合都是在dev上完成,每个人将自己的分支不时的合并到dev上即可。

14、BUG处理

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

15、feature分支

  • 开发一个新feature,最好新建一个分支
  • 如果要丢弃一个没有被合并过的分支,可以通过git branch -D <name>强行删除。

16、多人协作

  • 查看远程库信息
    $git remote -v
  • 本地新建的分支如果不推送到远程,对其他人就是不可见的
  • 从本地推送分支,使用git push origin branch-name,如果推送失败,先用git pull抓取远程的新提交
    $git push origin branch-name
    $git pull
  • 在本地创建和远程分支对应的分支,使用git checkout -b branch-name origin/branch-name,本地和远程分支的名称最好一致
    $git checkout -b branch-name origin/branch-name
  • 建立本地分支和远程分支的关联,使用git branch --set-upstream branch-name origin/branch-name
    $git branch --set-upstream branch-name origin/branch-name
  • 从远程抓取分支,使用git pull,如果有冲突,要先处理冲突
    git pull

参考资料
阮一峰

版权声明:本文来源简书,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://www.jianshu.com/p/87757bd8551c
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2020-01-09 21:25:37
  • 阅读 ( 1513 )
  • 分类:

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢