Git学习笔记,适合小白

git学习笔记

此文章装载自廖雪峰老师,有些部分加上自己的想法,有误的地方希望大家指出来,如果侵权请联系QQ:2196447160删除

创建版本库

新建一个目录

$ mkdir learngit

查看该目录的文件

$ cd learngit

显示当前文件的路径

$ pwd

查看某文件的内容

$ cat readme.txt

将目录变为git可管理的仓库(初始化git仓库)

$ git init

添加文件到仓库中(为什么需要两步:减少版本的迭代次数)

  1. 将文件放到暂存区

    $ git add readme.txt
    
  2. 将文件中的内容提交到当前分支(git commit -m “解释所作的更改”)

    $ git commit -m "wrote a readme file"
    

查看以前的修改内容

$ git status

查看工作区的状态(查看工作区与缓存区的区别)

$ git diff

查看历史记录

$ git log

推出查看log状态

在英文状态下输入q

使git版本回退

$ git reset --hard HEAD^^
  1. git中回退的注意事项
    • 回退到上一个版本hard参数为HEAD^
    • 回退到上上个版本hard参数为HEAD^^
    • 回退到上N个版本hard参数为HEAD后面带N个^
    • 回退之间的提交也会回退
  2. git中hard参数的意义

撤销刚才的回退(窗口没关闭,能看到commit id 的情况)

$ git reset --hard (62851b)commit id

撤销刚才的回退(窗口已关闭,不能看到commit id 的情况)通过给git reflog 来查看以前的每一天命令,从中可以看到commit id

$ git reflog

工作区

在这里插入图片描述
版本库

  • 暂存区
  • master分支

在这里插入图片描述

撤销修改

  • 一种readme.txt自修改后还没有加入到暂存区,现在撤销修改就是回到和版本库一摸一样的状态(git checkout --file)

    $ git checkout -- readme.txt
    
  • 一种是readme.txt已经添加到暂存区,但是没有提交,现在撤销就回到暂存区后的状态(git reset HEAD )

    $ git reset HEAD readme.txt
    
  • 注意事项:

    • – file空格和file之间有一个空额

    • git checkout – file 命令中的–很重要,如果–没有,就变成了“切换到另一个分支的命令”,我们在后面的分支管理中会再次遇到git checkout命令。

删除文件

前提:已经删除了工作区的文件。

第一种情况:误删文件,这个时候我们想要恢复通过git checkout – file命令来恢复。

第二种情况:不想要了这个文件,通过命令git rm 删掉,并且git commit

注意事项:从来没有被添加到版本库中就被删除的文件时无法恢复的。

删除工作区的文件(也可以手动删除)

$ rm test.txt

第一种情况

$ git checkout -- test.txt

第二种情况

$ git rm test.txt
$ git commit -m "remove test.txt"

添加远程库(origin repository)

  • 将本地仓库与远程仓库关联

    $ git remote add origin git@github.com:wanjie666666/learngit.git
    
  • 取消本地仓库与远程仓库的关联

    $ git remote remove origin
    
  • 将本地库中的内容推送到远程库中(第一次提交要加上参数-u,以后提交不用直接git push origin master)

    $ git push -u origin master
    

从远程仓库中克隆项目(通过git clone命令)

$ git clone git@github.com:wanjie666666/gitskills.git
  • 总结
    • 要克隆一个仓库,首先必须知道仓库的地址,然后使用git clone命令克隆
    • Git支持多种协议,包括https,但ssh协议速度最快
  • 注意事项
    • 在克隆时一般关闭当前的窗口,重开一个命令执行窗口。

创建和合并分支

  • 创建分支

    $ git checkout -b dev
    
  • 切换分支

    • 第一种方式(git checkout )

      $ git checkout dev
      
    • 第二种方式(git switch )

      $ git switch dev
      
  • 创建+切换分支

    • 第一种方式(git checkout -b )

      $ git checkout -b dev
      
    • 第二种方式(git switch -c )

      $ git switch -c dev
      
  • 查看分支

    $ git branch
    
  • 合并分支(合并指定分支)(git merge )

    $ git merge dev
    
  • 删除分支(git branch -d )

    $ git branch -d dev
    
  • 注意事项:

    • 如何才有分支:在一开始创建项目时,应该要在提交之后才会有分支(master分支)
    • 在没有合并之前,我们刚才在分支dev下对readme.txt的修改并提交,再切回到master分支时我们在readme.txt中时看不多内容变化的(在dev分支下可看到),因为那个提交实在dev分支上,而master分支此刻的提交点并没有变。合并之后可以看到。

解决冲突

  • 冲突如何产生?

    当我们对同一个文件的同一个代码修改时等情况。git在合并时不能判断接受谁的修改便产生了冲突。

  • 产生示意图

在这里插入图片描述

  • 解决方法

    先解决掉冲突,然后在提交,合并完成。解决冲突就是把

    git合并失败的文件手动编辑为我们希望的内容,在提交。

分支管理策略

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

$ git merge --no-ff -m "merge with no-ff" dev

分支策略

  • 在实际开发中,我们应该按照几个基本原则进行分支管理:
  • 首先,master分支应该是非常稳定的,也就是仅用来发布新版本,平时不能在上面干活;
    那在哪干活呢?干活都在dev分支上,也就是说,dev分支是不稳定的,到某个时候,比如1.0版本发布时,再把dev分支合并到master上,在master分支发布1.0版本;
    你和你的小伙伴们每个人都在dev分支上干活,每个人都有自己的分支,时不时地往dev分支上合并就可以了。
  • 小结:Git分支十分强大,在团队开发中应该充分应用。
    合并分支时,加上--no-ff参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并,而fast forward合并就看不出来曾经做过的合并。

Bug分支

我们工作到一半,还没完成此工作,没办法提交。但是此时我们有一个必须要解决的bug,怎么办?

将当前的工作现场“储藏”起来,等以后恢复现场后继续工作

$ git stash

然后确定bug在哪个分支上,然后在那个分支上建立临时分支修复bug

查看工作现场存到哪去了?用git stash list命令查看

$ git stash list

恢复工作现场

  • 一是用git stash apply恢复,但是恢复后,stash内容并不删除,你需要用git stash drop`来删除

    $ git stash apply stash@{0}
    
  • 二是用git stash pop,恢复的同时把stash内容也删了

    $ git stash pop
    
  • 修复同样的bug,只需4c805e2 fix bug 101这个提交所作的修改复制到dev分支上。【注意】:我们只想复制这个提交所作的修改,并不是把整个master分支merge过来。

  • 为了方便操作,git专门提供了一个cherry-pick <commit>命令,让我们能复制一个特定的提交到当前分支

    $ git cherry-pick 4c805e2
    

Feature分支

开发一个新feature,最好新建一个分支;

如果丢弃一个没有被合并过的分支,可以通过git branch -D <name>强行删除

强行删除没有合并过的分支

$ git branch -D feature1

多人协作

  • 查看远程库信息,使用git remote -v
  • 本地新建的分支如果不推送到远程,对其他人就是不可见的;
  • 从本地推送分支,使用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 pull提示no tracking information,说明本地分支和远程分支没有建立关联】
  • 从远程抓取分支,使用git pull,如果有冲突,要先处理冲突。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值