Git教程


根据 Git教程所总结的笔记。

Windows安装git

官网下载,直接安装,开始菜单栏输入Git Bash,弹出类似命令行的东西,说明安装成功!
安装完成后 进行设置 git认主:

$ git config --global user.name 'your  name'
$ git config --global user.email 'XXX@XX.com'

创建版本库

  • 可以选择你想要安装的目录处输入cmd,调出命令行,来创建一个空目录
  • 也可以直接在刚才调出的Git Bash中,来创建一个空目录
  • 后续的操作都可以在cmd中完成或者Git Bash中完成
    第一步:
$ mkdir learnGit
$ cd learnGit
$ pwd

pwd命令用于显示当前目录。
第二步:
通过git init命令把这个目录变成Git可以管理的仓库

$ git init

添加文件到版本库

第一步:首先你要在learnGit目录下创建一个你要添加的文件。举个例子,添加的文件命名为“readme.txt”,内容为

Git is a version control system.
Git is free software.

第二步:用git add把文件添加到仓库

$ git add readme.txt

第三步:用git commit把文件提交到仓库,-m后输入的是本次提交的说明,可以是任意内容,方便阅读和改动文件

$ git commit -m 'wrote a readme file'

时光穿梭机

歪题:时光穿梭机这个名字挺有意思的,其实我也挺想回到以前,所有回不去的良辰美景都是举世无双的好风光~

  • 刚才已经成功添加了readme.txt文件,然后我们继续修改,将文件内容修改成(第一行新增一个单词distributed):
    Git is a distributed version control system.
    Git is free software.
    
  • 使用git status命令可以查看仓库的当前状态(只知道被修改了,不知道改了啥,且知道文件是否被提交),此时文件只是被修改了,但还没有提交到仓库里。
    $ git status
    
  • 如果你想知道修改了哪些内容,则需要用到命令git diff 文件名
    $ git diff readme.txt
    
  • 修改完成后就可以使用git commit -m ‘add distributed’ 进行提交
    $ git commit -m 'add distributed'
    
  • 可以再次使用git status查看状态,此时仓库里没有需要提交的修改(nothing to commit),工作目录也是干净的(working tree clean)
    $ git status
    
  • 此时,我们可以不断的对文件进行修改,并提交到版本库里,假如改了三版,各版本内容如下:
  1. 版本1:wrote a readme file
    Git is a version control system.
    Git is free software.
    
  2. 版本2:add distributed
    Git is a distributed version control system.
    Git is free software.
    
  3. 版本3:append GPL
    Git is a distributed version control system.
    Git is free software distributed under the GPL.
    
  • 如果修改了千千万万个版本,怎么去记住?->git log命令可以告诉我们历史记录,git log --pretty=oneline 可以省略信息,并一行输出
    $ git log
    $ git log --pretty=oneline
    
  • 此时我们在版本3,如何乘坐时光机穿梭(git reset)到版本2呢?上一个版本可以表示为HEAD^ ,上上个版本可以表示为HEAD^^,上100个版本可以表示为HEAD~100。
    $ git reset -- hard HEAD^
    
  • 此时使用git log查看历史记录,版本3的记录已经没了,那么此时我们在版本2,又如何吃后悔药回到版本3呢?有两种后悔药可选,急速后悔药,慢性后悔药。
  1. 如果你还没有关掉命令行窗口,就可以通过git log结果里的commit id(一大串字符,只需要写前几个即可)进行回退
    $ git reset --hard 1094a
    
  2. 如果你关掉了命令行窗口,才悔不当初,可以通过git reflog来找到删除的文件的commit_id。git reflog里面记录你的每一次命令:
    $ git reflog
    
  • 总结来说,HEAD指向的版本就是当前版本,使用命令git reset --hard commit_id可以在不同版本间来回穿梭
  • 使用git log查看提交历史,以回到过去
  • 使用git reflog查看命令历史,以回到未来

工作区和暂存区

  • 工作区:电脑里能看到的目录
  • 版本库:隐藏目录.git,里面含有stage(暂存区),Git自动创建的分支master,以及指向master的一个指针HEAD
  • git add 实际上是把文件修改添加到了暂存区(stage)
  • git commit 提交更改,实际上是把暂存区的内容提交到当前分支master上。
  • 每次修改,如果不用git add到暂存区,就不会加入到commit中。

撤销修改

  • 1.如果想直接丢弃工作区的修改时:

    $ git checkout --file
    
  • 2.如果你改乱了工作区某文件的内容,且将其添加到了暂存区,想丢齐修改:分两步
    第一步:回到1

    $ git reset HEAD <file>
    

    第二步:操作同1

删除文件

  • git rm 用于删除一个文件。如果一个文件已经被提交到版本库,那么你永远不用担心误删,但是要小心,你只能恢复文件到最新版本,你会丢失最近一次提交后你修改的内容。

远程仓库

  • 关联远程仓库,关联远程仓库时必须给远程库指定一个名字,origin是默认习惯命名

    $ git remote add origin git @server-name:path/repo-name.git
    
  • 关联后使用命令 git push -u origin master 第一次推送master分支的所有内容

    $ git push -u origin master
    
  • 克隆仓库,必须知道你要克隆的仓库的地址

    $ git clone <path>
    

分支管理

  • 查看分支

    $ git branch
    
  • 创建分支

    $ git branch <name>
    
  • 切换分支

    $ git switch <name>
    $ git checkout <name>
    
  • 创建+切换分支

    $ git switch -c <name>
    $ git checkout -b <name>
    
  • 合并某分支到当前分支

    $ git merge <name>
    
  • 删除分支

    $ git branch -d <name>
    

分支

解决冲突

当一个分支进行修改并提交后,主分支也进行修改提交,但修改后的两个分支无法快速合并,会产生冲突。此时我们必须先解决冲突,将Git合并失败的内容手动编辑成我们希望的内容,再提交。

  • 查看分支合并图
    $ git log --graph
    

分支策略

  • master分支是非常稳定的,一般用来发布新版本,平时不在上面干活
  • dev分支是不稳定的,平时在dev上干活,进行修改
  • 最后进行合并,合并时加上–no–ff参数就可以用普通模式合并,即使用git log可以看到合并记录,而fast forward 默认合并就看不出曾经做过合并。这种模式下,删除分支后,会丢掉分支信息。

bug修复

  • 修复bug时,我们会通过创建新的bug分支进行修复,然后合并,最后删除。
  • 当手头工作没有完成时。先把工作现场git stash一下,然后去修复bug,修复后,再git stash pop回到工作现场。
  • 在master分支上修复的bug,可以通过git cherry-pick <commit> 命令,将bug提交的修改复制到当前dev分支上,避免重复劳动。

增加新功能

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

多人协作

  • 要查看远程库的信息,用git remote, git remote -v可显示更详细的信息。

    git remote
    
  • 推送分支,把该分支上的所有本地提交推送到远程库里

    git push origin master
    
  • 需要远程合并的分支:
    master分支是主分支,因此要时刻与远程同步;
    dev分支是开发分支,团队所有成员都需要在上面工作,所以也需要与远程同步;
    bug分支只用于在本地修复bug,就没必要推到远程了;
    feature分支是否推到远程,取决于你是否和你的小伙伴合作在上面开发。

  • 多人协作的工作模式:
    1.首先,可以试图用git push origin 推送自己的修改;
    2.如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并;
    3.如果合并有冲突,则解决冲突,并在本地提交;
    4.没有冲突或者解决掉冲突后,再用git push origin 推送就能成功!
    *如果git pull提示no tracking information,则说明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream-to origin/。

  • 小结:
    1.从本地推送分支,使用git push origin branch-name,如果推送失败,先用git pull抓取远程的新提交;
    2.在本地创建和远程分支对应的分支,使用git checkout -b branch-name origin/branch-name,本地和远程分支的名称最好一致;
    3.建立本地分支和远程分支的关联,使用git branch --set-upstream branch-name origin/branch-name;
    4.从远程抓取分支,使用git pull,如果有冲突,要先处理冲突。

rebase

rebase操作可以把本地未push的分叉提交历史整理成直线;
rebase的目的是使得我们在查看历史提交的变化时更容易,因为分叉的提交需要三方对比。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值