git 速成笔记

来源:互联网 发布:云计算怎么投资 编辑:程序博客网 时间:2024/05/16 17:40
git的特点:
1. 速度快
2.设计简单
3.对非线性开发模式强力支持(允许成千上万个并行开发的分支)
4.完全分布式

使用git要首先安装git
查看本机有没有安装git ,可以使用命令 git 。
如果没有安装git需要先下载安装git,安装git之后需要配置本地用户信息(注意这一步是很有必要的,否则进行后续操作时会报错)。
git config --global user.name "wenruo"
git config --global user.email "wenruo@163.com"

开始创建本地仓库
新建目录文件
mkdir learngit //命令新建文件,当然也可以手动创建
cd learngit // 切到当前目录下
进行初始化当前仓库 , 执行命令git init 一个空的仓库就已经创建好了.



这时候仔细观察当前目录下已经生成了一个.git的文件。当然也有可能该文件被自动隐藏了,你需要
进行某些操作:
控制面板 --> 文件夹选项 -- >查看

选择显示隐藏的文件。再回到之前的learngit文件夹就可以看到.git 文件了


注意请不要试图修改.git 文件 ,因为这是一个版本记录的文件,若被修改就无法保证为你提供正常的版本控制功能了。

现在我们要开始在自己的仓库内做一些事情了。
新建test.txt
git add test.txt // 将 test.txt 加入到缓存区 (没有提示证明操作成功了)

git commit -m "create an empty file" // 将文件从暂存区提交到本地仓库,-m 代表的意思是本次提交的一些操作描述 。操作成功后出现如下提示:



现在text.txt 文件已经被成功提交到我们的仓库里边了 。 不过我现在想要对它进行修改,因为它现在没有内容。 打开test.txt 随便写入点内容,例如“hello everyone , today is a good day.”

然后执行git 命令 git status 显示如下:


git status 的作用: 查看仓库状态 ,建议每次在执行git 操作之前先使用git status 查看一下当前仓库状态,方便后续操作.

changes not staged for commit 指的是我们当前的文件修改并没有被添加到缓存工作区.
no changes added to commit 说明我们当前缓存区里边并没有文件修改,所以不需要进行commit提交

所以我们现在要做的是先把修改后的文件添加到缓存区. 执行命令 git add test.txt
操作完成后我们再执行命令,git status 查看当前文件状态


changes to commited 这句话意思是缓存区内容有更改了,需要向本地仓库进行提交.

提交更改文件到本地仓库 git commit -m "wrote some things in test.txt" 提交成功显示如下


再次修改test.txt 文件 ,随便添加点什么内容,同时在当前目录下新建一个new.txt 的文件(可以什么都不写,也可以随便添加点什么内容)

现在我的工作区有了两个文件发生了更改。 我们可以依次将这两个文件添加到暂存区,也可以一次性将所有变化的文件添加到暂存区。 使用命令: git add -A
然后将暂存区内文件提交到本地仓库 。git commit -m "change text.txt and created new.txt"


修改一下test.txt 文件,随便写一些内容,然后执行命令 git diff test.txt , 可以查看哪些内容被修改了。

执行命令
git add test.txt
git commit -m "learn git diff"

查看提交记录 ,执行命令 git log

但是这样显示的比较乱 , 我们可以更改一下显示形式。执行命令git log --pretty=oneline

上边的内容看起来直观了许多,左边的一长串字符代表版本的索引编号 。

git reset --hard HEAD^ 是将文件切换到上一个版本。 要切换到上上个版本就使用命令git reset --hard HEAD^^ 如果要回退的版本比较多可以使用 git reset --hardHEAD~n.n代表要回退的版本数量。 但这使用起来似乎也不是很方便,我们希望使用时可以直接切换到我们想要的版本,可以使用以下命令:

git reset --hard bb461c7后边的编码代表的是要切换到的版本号(一般情况下我们不需要将版本号写全,只需要写前几位)。这样我们就切换到了 wrote some things in test.txt 这个版本 .

这时候再次执行 git log --pretty=oneline 命令查看当前版本记录

此时只显示了前两次提交的记录,那我们后边提交的内容都被删除掉了吗 ? 其实不是的,我们如何再回到后边提交的版本呢 。

执行命令 git reflog可以显示我们的所有命令操作 。 前边的版本索引可以帮助我们回到想要操作的版本文件。

执行命令 git reset --hard 72b5d1f 切换到 learn git diff 版本 .


现在重新查看当前所有提交信息git log --pretty=oneline,所有状态恢复如初


关于工作区、暂存区和本地仓库的关系如下:


1. 我们文件的修改操作是在工作区进行的 。

2. 文件修改完成后需要执行 git add 将文件添加到暂存区 。


3. 用 git commit 提交实际是将文件提交到本地仓库(本地master分支)


1. 当你改乱了工作区某些文件中的内容,想直接丢弃工作区的修改时 ,可以执行命令
git checkout -- "filename"

2. 若改乱了文件内容同时提交到了 暂存区 , 可以执行命令:
git reset HEAD "filename"然后再执行 git checkout -- "filename"

3. 若已经提交了不是适合修改的内容到本地仓库,可以使用版本回退或版本回退 。

如何将本地库内容推送到远程仓库?

使用git 远程仓库功能需要借助GitHub网站 , 首先你需要有一个github上的账号,假如没有的话请先注册一个 。

因为本地仓库和GitHub仓库之间的传输是通过ssh加密的,所以需要进行一些设置:
创建SSH Key , 在git Bash 中输入如下命令:

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

此时在用户主目录(C:\Users\Administrator)里边就可以找到 .ssh 目录 . 里边会有 id_rsaid_rsa.pub 两个文件 。 登陆GitHub,打开“Account settings”“SSH Keys”页面:
然后,点“Add SSH Key”,填上任意Title,在Key文本框里粘贴id_rsa.pub文件的内容:


新建一个GitHub仓库 ,create repository. ( 假设新仓库名字为learngit )
当然现在github上建好的仓库是空的,我们可以从这个仓库克隆出新的仓库,也可以把一个已有的仓库与之关联 ,然后把本地仓库内容推送到GitHub仓库 。
在本地仓库目录下运行命令:

git remote add origin git@github.com:hello/learngit.git

注意上边命令中 hello 是自己在本机配置的user.name . 这样我们的这个本地仓库就和GitHub上名为learngit的仓库远程关联了。不过仍需要执行推送命令,本地仓库的内容才会被更新到远程仓库 。
执行命令: git push -u origin master
由于远程库是空的,我们第一次推送master 分支加上 -u 参数 , git 不但会把本地master分支推送到远程新的master分支,同时还会降这两个分支做关联 ,以后做推送或拉取时就可以简化命令 。
以后再从这个分支推送内容时只需要执行命令:
git push origin master

将某个分支推送到远程分支需要 在推送命令后加上分支名字, 如推送master分支:
git push origin master
推送 dev分支 执行命令: git push origin dev

要关联一个远程库,使用命令git remote add origin git@server-name:path/repo-name.git; 关联后,使用命令 git push -u origin master第一次推送master分支的所有内容;此后,每次本地提交后,只要有必要,就可以使用命令git push origin master推送最新修改;

克隆一个远程仓库到本机, 只需要找到该项目的远程仓库地址:执行如下命令
git clonehttps://github.com/GeekHi/gitskill.git

注意上边的地址换成自己想要克隆的仓库的地址 。

git 支持多种协议,包括https,但通过ssh 支持的原生 git 协议速度最快。因此上边的克隆命令你还可以换为 :git clone git@github.com/GeekHi/gitskill.git

创建新分支 :
git checkout -b dev// 创建并切换到 dev分支

可以使用 git branch 命令查看本地仓库所有分支,* 代表当前所用分支 。

修改test.txt 文件内容,随便添加些内容 。

提交:
git add test.txt
git commit -m "learn branch"

切换回master 分支:
git checkout master

打开test.txt 文件查看文件内容,还是没有被修改过的版本 。

合并 master 和 dev 分支:
git merge dev// merge 命令用于合并指定分支到当前分支
此时查看test.txt 文件内容是被修改过后的 。

查看当前分支:

删除分支:
git branch -d dev// 用于删除dev分支

查看分支:

分支操作常用命令汇总:

查看分支: git branch

创建分支:git branch <name>

切换分支:git checkout <name>

创建 + 切换分支: git chekout -b <name>

合并某分支到当前分支: git merge <name>

删除分支:: git branch -d <name>

再次创建并切换新的分支: git checkout -b bran1

修改test.txt 最后一行 , 任意写一些内容 .

提交文件:

切换到master 分支

修改test.txt 最后一行的内容,修改成任意内容 。然后提交

此时你可能会意识到,现在这两个分支上的文件内容实际上是有了冲突 。

此时执行合并命令,将bran1 分支合并到当前master分支会看到以下内容:

系统提示执行merge命令失败,在test.txt 文件中有存在冲突,需要先解决冲突内容才可进行提交 。

我们打开test.txt 文件会看到如下显示:


git 自动在冲突文件中做了标识, 将两个分支上冲突内容都标记在了文件中。我们只需要删除最后一行,或者写成bran1分支版本的内容然后重新进行add和commit 操作就可重新进行合并 。


当然,现在bran1分支也可以进行删除了:

使用命令 git log --graph 你可以查看分支合并图 。

分支可以被创建出来用来单独处理某些bug,我们一般开发不会直接在master分支进行,而是会创建一个新的dev分支,在dev分支上开发完毕后切换到mater分支,将两个分支代码进行合并 。

当你需要新建一个分支去单独处理某些bug时,你需要将现在正在开发使用的dev分支暂存起来 。执行命令git stash .
切换到master 分支 git checkout master
创建并切换到 bug 专用 分支 git checkout -b branch-issue
当在branch-issue 分支开发完毕后,执行 add 和 commit 命令 将修改过的内容提交。
切换到master分支 git checkout master
合并branch-issue 分支到当前分支: git merge branch-issue
删除bug分支: git branch -d branch-issue
恢复stash 存储 : git stash pop

如果要丢弃一个没有被合并过的分支可以使用命令: git branch -D <name>// 强制删除

多人协作的工作模式:

1. 首先,可以试图用 git push origin branch-name推送自己的修改;

2. 如果推送失败,则因为远程分支比你的本地更新,需要先用 git pull试图拉取远程代码到本地,将内容进行合并

3. 如果合并有冲突,则解决冲突,并在本地提交;

4. 没有冲突或者解决掉冲突后,再用 git push origin branch-name推送就能成功!

为了方便版本的识别和管理,我们还可以给不同版本加上标签。

为当前操作的版本添加一个名字使用命令:
git tag <name>

当然你还可以具体指定某个版本的名字,需要在命令中使用版本索引,例如
git tag v0.2 6223431这个命令就是为 版本索引为6223431的 版本添加版本名称 .

当然也可以删除这个版本的标签名,使用命令:
git tag -d v0.2删除标签名为0.2的标签名 。 标签名只是在本地存储的,不会被推送到远程仓库。


原创粉丝点击