Git个人学习笔记

跟着https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000进行学习,这篇作为学习笔记使用

学习Git需要弄清楚工作区和暂存区的区别,详细看连接中的“工作区和暂存区”

一、安装Git

1.Git安装完成后,打开Git Bash,进行设置,在命令行输入:

$ git config --global user.name “Your Name”
$ git config --global user.email "email@example.com"


二、创建版本库

1.创建目录

$ mkdir learngit
$ cd learngit

2.把这个目录变成Git可以管理的仓库

$ git init

3.添加文件至版本库

  • 1)在learngit目录下添加一个文件readme.txt,内容如下

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

建议使用Notepad++ 来编辑此txt,微软自带的word和记事本有特殊的存储格式容易出错,此外存储格式应为UTF-8,减少编码带来的问题。
不清楚目录路径的话可以使用pwd命令显示当前目录的路径。

  • 2)用git add将文件添加到仓库

$ git add readme.txt

如果一次性提交多个文件,可用空格将各个文件名隔离开来

  • 3)使用git commit命令提交本次提交的说明

$ git commit -m “wrote a readme file”

""内是本次提交的说明


三、查看工作区状况、修改的具体内容

1.查看仓库当前的状态

git status

可用于查看某些文件被修改等

2.查看文件具体的修改

diff也就是different的缩写,显示格式是Unix通用的diff格式

git diff


四、版本回退

1.查看历史修改记录(可查看commit -m 的内容)

使用命令查看历史修改记录,显示的时候,HEAD表示当前版本

git log

如果觉得输出信息太多,可以使用

git log --pretty=oneline

2.版本回滚

  • 返回上一个版本

$ git reset --hard HEAD^

  • 则返回上上个版本为

$ git reset --hard HEAD^^

  • 如果要返回多个版本,也可使用(此处示例返回往上第二个版本)

$ git reset --hard HEAD~2

  • 返回至指定的版本可以用(此处的1094a为commit id,仅输入前几位已经足够)

$ git reset --hard 1094a

  • 当想要从旧版本返回至新版本的时候,使用如下命令查看命令历史记录

git reflog


五、撤销修改

1.撤销工作区域修改(适用于还没有进行add操作的已经修改的文件)

eg:撤销工作区域readme.txt的修改

git checkout – readme.txt

2.撤销暂存区的修改(适用于进行add还未进行commit的文件)

$ git reset HEAD readme.txt


六、删除

1.删除文件

git rm test.txt


七、上传至远程仓库

1. 生成SSH key

$ ssh-keygen -t rsa -C "youremail@example.com"

生成两个文件,id_rsa是私钥自己保存后,id_rsa.pub 是公钥可用于分享

2.远程仓库准备

  1. 在用户目录-》.ssh中找到id_rsa.pub
  2. 登陆GitHub,"settings” -> "SSH and GPG keys” -> “New SSH Key”,填上任意Title,在Key文本框里粘贴id_rsa.pub文件的内容

3.关联远程库

  • 1)登录GitHub 点击加号 -> new repository
  • 2)在Repository name 填入名字,其他保持默认,点击“Create repository”,创建Git仓库
  • 3)在本地 learngit 仓库运行命令,添加后,远程库的名字就是origin

git remote add origin git@github.com:GitHubName/Repository name.git


4.将本地库的所有内容推送到远程库上

第一次输入命令

$ git push -u origin master

由于远程库是空的,我们第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令为

$ git push origin master


八、从远程仓库克隆

输入命令

$ git clone git@github.com:GitHubName/Repository name.git

会将整个工程文件拷贝至与Repository name相同的文件夹下


九、创建与合并分支

1.创建分支

  • 1.创建并且切换到dev分支

$ git checkout -b dev

  • 2.git checkout命令加上-b参数表示创建并切换,相当于以下两条命令:

$ git branch dev
$ git checkout dev

  • 3.可用git branch命令可查看所有分支,并且在当前分支前会标一个*

  • 4.将dev的分支工作合并到master分支(主分支)上

$ git merge dev

  • 5.现在可以删除dev分支

$ git branch -d dev


十、发生冲突

当不同分支修改了同一文件,比如说都修改了readme.txt,git尝试合并分支的时候就会出现冲突,错误提示如下

$ git status
On branch master
Your branch is ahead of 'origin/master' by 2 commits.
  (use "git push" to publish your local commits)

You have unmerged paths.
  (fix conflicts and run "git commit")
  (use "git merge --abort" to abort the merge)

Unmerged paths:
  (use "git add <file>..." to mark resolution)

    both modified:   readme.txt

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

告诉我们两个线程都修改了readme.txt

此时 readme.txt 内容如下

Git is a distributed version control system.
Git is free software distributed under the GPL.
Git has a mutable index called stage.
Git tracks changes of files.
<<<<<<< HEAD
Creating a new branch is quick & simple.
=======
Creating a new branch is quick AND simple.
>>>>>>> feature1

Git用<<<<<<<,=======,>>>>>>>标记出不同分支的内容,我们修改如下后保存:
必须修改readme.txt,后再次进行add 和 commit 命令更新版本。

我们可以使用带参数的git log查看分支的合并情况

$ git log --graph --pretty=oneline --abbrev-commit


十一、分支管理策略

通常,合并分支时,如果可能,Git会用Fast forward模式,但这种模式下,删除分支后,会丢掉分支信息。
禁用Fast forward进行分支合并使用命令(即不删除此分支信息),因为本次合并要创建一个新的commit,所以加上-m参数,把commit描述写进去。

$ git merge --no-ff -m “merge with no-ff” dev

不使用Fast forward的分支情况如下

在这里插入图片描述

若不禁用Fast forward,则没有dev这个分支的信息。在git log中不会显示出来。


十二、Bug分支(修复bug的时候进行的分支创建)

当你接到一个修复一个代号101的bug的任务时,很自然地,你想创建一个分支issue-101来修复它,但是,等等,当前正在dev上进行的工作还没有提交:

  • 1.此时可以使用命令,将当前的工作现场存储起来

$ git stash

  • 2.若要在master分支上修复,则创建临时分支

$ git checkout master
$ git checkout -b issue-101

  • 3.修改完文件后

$ git add readme.txt
$ git commit -m “fix bug 101”

  • 4.修复完成后,切换到master分支,并完成合并,最后删除issue-101分支:

$ git checkout master
$ git merge --no-ff -m “merged bug fix 101” issue-101

  • 5.Bug修复完后,切换到dev,并查看stash

$ git checkout dev
$ git stash list

  • 6.恢复环境(方法一)
    git stash apply恢复,但是恢复后,stash内容并不删除,你需要用git stash drop来删除

$ git stash apply stash@{0}

  • 7.恢复环境(方法二)
    用git stash pop,恢复的同时把stash内容也删了

$ git stash pop stash@{0}

这两个方法中stash@{0}都可以省略,将会自动恢复


十三、Feature分支

最好是每添加一个新功能,在dev上新建一个feature分支,
然而有时候feature还没开发完毕要取消开发,
此时feature还没有合并到dev,无法删除此时则需要强制删除

git branch -D readme.txt

采用大写的D强行删除


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值