git 学习笔记--初学者

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Ray0812/article/details/52860770

Git 学习笔记

创建本地库

本地创建一个空文件夹Demo,右键选择 git bash here
使用命令 git init 初始化本地库

$ git init

从远程克隆到本地:git clone url(远程仓库的地址)

$ git clone http://172.126.101.223:3000/chenyicheng/Demo.git

输入用户名密码后就能克隆成功

添加、提交、推送

首先在demo中新建一个test1.txt;
使用 git status 查看当前工作区文件的状态

红色代表新添加的文件。

添加

使用 git add 文件,把文件添加到暂存区中

$ git add test1.txt

再次使用 git status 查看状态

我们可以发现test1.txt变为绿色,说明该文件现在存放在暂存区中

提交

现在我们要将test1.txt从暂存区提交到版本库中去:git commit -m”提交说明”

$ git commit -m"新增test1.txt"


提交成功之后,我们在去查看一下状态:git status

此时你现在的工作区已经和你的版本库保持一致

推送

要推送此版本到远程版本库:git push 远程库url 分支名

$ git push origin master


输入用户名 密码即可同步到远程仓库

版本管理

工作区、暂存区、版本库

工作区:我们会想当然的认为,当前仓库所在目录就是我们的工作区,其实这是不完全正确的。在当前仓库中,新增,更改,删除文件这些动作,都发生在工作区里面。

暂存区:英文叫stage, 或index。在版本库.git)目录下,有一个index文件。它实际上就是一个包含文件索引的目录树,像是一个虚拟的工作区。在这个虚拟工作区的目录树中,记录了文件名、文件的状态信息(时间戳、文件长度等),文件的内容并不存储其中,而是保存在Git对象库(.git/objects)中,文件索引建立了文件和对象库中对象实体之间的对应。如果当前仓库,有文件更新,并且使用git add 命令,那么这些更新就会出现在暂存区中。

版本库:当前仓库下,如果没有任何的提交,那么版本库就是对应上次提交后的内容。下面这个图展示了工作区、版本库中的暂存区和版本库之间的关系。

图中我们可以看出此时 “HEAD” 实际是指向 master 分支的一个“游标”。所以图示的命令中出现 HEAD 的地方可以用 master 来替换。

图中的 objects 标识的区域为 Git 的对象库,实际位于 “.git/objects” 目录下,里面包含了创建的各种对象及内容。

当对工作区修改(或新增)的文件执行 “git add” 命令时,暂存区的目录树被更新,同时工作区修改(或新增)的文件内容被写入到对象库中的一个新的对象中,而该对象的ID被记录在暂存区的文件索引中。

当执行提交操作(git commit)时,暂存区的目录树写到版本库(对象库)中,master 分支会做相应的更新。即 master 指向的目录树就是提交时暂存区的目录树。

版本回退

Git必须知道当前版本是哪个版本,在Git中,用HEAD表示当前版本。
执行 git reset –hard HEAD^ 回到上一个版本 HEAD^^表示上上个版本,HEAD~100表示上100的版本, 执行git reset –hard +版本号(版本号可通过 git log –pretty=oneline 去查询),回到指定的版本。

Git的版本回退速度非常快,因为Git在内部有个指向当前版本的HEAD指针,当你回退版本的时候,Git仅仅是把HEAD从指向version1.3。

撤消修改、回退文件

当我们在工作区想要撤销我们当前修改的文件的时候 我们可以用 git checkout -f filename
例如我们要修改readMe.txt

$ git checkout -f readMe.txt

这样一来我们就可以保持与最新版本库一致的文件。
若想要把文件回退到指定版本:
1.回退到某个版本:git reset 版本ID
2.提交回退:git commit -m”msg”
3.更新到更新目录:git checkout

查看日志

$git log --pretty=oneline 


图中所标记的为版本的ID号:83119fc8c6e5b62a8d28edff08d2f73a339be18c

$ git reset 83119fc8c6e5b62a8d28edff08d2f73a339be18c test1.txt


提交回滚

$ git commit -m"回滚test1.txt"

最后需要更新到更新目录

$ git checkout test1.txt

删除文件

$ git rm add.txt


如图我们可以看出我们删除的add1.txt在暂存区中 所以我们还要提交删除

$ git commit -m"删除add.txt"

Git分支

分支就是从主线上分离出来进行另外的操作,而又不影响主线,主线又可以继续干它的事,最后分支做完事后合并到主线上而分支的任务完成可以删掉了。这样是不是很方便,主线继续做它的事,分支用来解决临时需求,二者互不相干。

分支的基本操作

我们现在在master上面创建一条dev分支并且换到该分支(也可以用 $ git checkout -b dev)

$ git branch dev
$ git checkout dev


现在我们可以在dev分支上进行操作;之后我们要进行dev分支的合并

$ git checkout master
$ git merge --no-ff -m"合并dev" dev

切换到master,然后把dev合并到master上面

如果现在不需要dev,就可以将其删除:git branch -d dev

$ git branch -d dev
$ git branch

如下图所示:dev分支已经删除了

feature分支、bug分支、冲突处理

为了防止新功能对主分支造成代码错乱的影响,每添加一个新功能,最好新建一个feature分支,在上面开发,完成后,合并,最后,删除该feature分支。
例如我现在新开发一个用户登陆的功能即feature_login;
创建、切换、修改、提交

$ git checkout dev
$ git checkout -b feature_login
$ git add login.txt
$ git commit -m"新增login.txt"
$ git branch 

*提交bug分支的时候 如果当前的分支的工作仍在进行,这个时候就不能提交 我们需要用git stash 把当前工作现场“储藏”起来,等以后恢复现场后继续工作。
例如:我现在新建一个bug_101(在login.txt中修改)

$ git checkout master
$ git checkout -b bug_101

修改login.txt,在第四行增加 bug_101…….

这个时候有又有一个bug需要我们马上修复,切换到master准备创建bug_102分支

这个时候你就会发现 在bug_101没有提交的情况下我们是不能切换回master;
所以我们需要借助 git stash 来暂时“储藏”bug_101分支的工作;

$ git stash
$ git checkout master


现在可以正常切换回master分支,
创建bug_102、修改login.txt、添加修改、提交修改、切换master、合并bug_102、删除bug_102

$ git checkout -b bug_102
$ vim login.txt
$ git add login.txt
$ git commit -m"bug_102修改login.txt"
$ git checkout master
$ git merge --no-ff -m"合并bug_102" bug_102
$ git branch -d bug_102

此时bug_102已经修复完成,现在需要我们继续bug_101的修改; 查看当前stash 列表

$ git stash list


可以找到我们刚才保存的bug_101;
一是用git stash apply恢复,但是恢复后,stash内容并不删除,你需要用git stash drop来删除;
另一种方式是用git stash pop,恢复的同时把stash内容也删了;

$ git stash pop


这里显示刚才bug_102修改过login.txt

$ git checkout bug_101


提示我们需要先解决login.txt的冲突,我们打开login.txt看看

<<<<<<<标记冲突开始,后面跟的是当前分支中的内容。
HEAD指向当前分支末梢的提交。
=======之后>>>>>>>之前是要merge过来的另一条分支上的码。
a >>>>>>>之后的dev是该分支的名字。
对于简单的合并,手工编辑,然后去掉这些标记,最后像往常的提交一样先add再commit即可。

$ vim login.txt
$ git add login.txt
$ git commit -m"解决login.txt冲突问题"

现在我们可以继续bug_101的修改了

标签的管理

标签的意义

发布一个版本时,我们通常先在版本库中打一个标签(tag),这样,就唯一确定了打标签时刻的版本。将来无论什么时候,取某个标签的版本,就是把那个打标签的时刻的历史版本取出来。所以,标签也是版本库的一个快照。

创建操作

$git tag v1.0.1
$git tag

创建标签、查看标签

默认标签是打在最新提交的commit上的。有时候,如果忘了打标签,比如,现在已经是周五了,但应该在周一打的标签没有打,怎么办?方法是找到历史提交的commit id,然后打上就可以了

$git log --pretty=oneline
$git tag v1.0.0 cd817c0bd5512a8b3b0f6fe880e1ee128b9a2943
$git tag


删除标签:如我现在要删除v1.0.0这个标签

$git tag -d v1.0.0
$git tag

标签已经成功删除

还可以创建带有说明的标签,用-a指定标签名,-m指定说明文字:git tag -a -m ”message”

$ git tag -a v1.0.2 -m"该标签用于测试"
$ git show v1.0.2

如果要推送某个标签到远程:git push origin
一次性推送全部尚未推送到远程的本地标签:git push origin –tags
删除远程的标签:首先删除本地:git tag -d
在删除远程:git push origin :refs/tags/

Git的常用命令

git update-index –assume-unchanged +filepath 文件更改不追踪
git branch 查看本地所有分支
git status 查看当前状态
git commit 提交
git branch -a 查看所有的分支
git branch -r 查看本地所有分支
git commit -am “init” 提交并且加注释
git remote add origin [email protected]:ndshow
git push origin master 将文件给推到服务器上
git remote show origin 显示远程库origin里的资源
git push origin master:develop
git push origin master:hb-dev 将本地库与服务器上的库进行关联
git checkout –track origin/dev 切换到远程dev分支
git branch -D master develop 删除本地库develop
git checkout -b dev 建立一个新的本地分支dev
git merge origin/dev 将分支dev与当前分支进行合并
git checkout dev 切换到本地dev分支
git remote show 查看远程库
git add .
git rm 文件名(包括路径) 从git中删除指定文件
git clone git://github.com/schacon/grit.git 从服务器上将代码给拉下来
git config –list 看所有用户
git ls-files 看已经被提交的
git rm [file name] 删除一个文件
git commit -a 提交当前repos的所有的改变
git add [file name] 添加一个文件到git index
git commit -v 当你用-v参数的时候可以看commit的差异
git commit -m “This is the message describing the commit” 添加commit信息
git commit -a -a是代表add,把所有的change加到git index里然后再commit
git commit -a -v 一般提交命令
git log 看你commit的日志
git diff 查看尚未暂存的更新
git rm a.a 移除文件(从暂存区和工作区中删除)
git rm –cached a.a 移除文件(只从暂存区中删除)
git commit -m “remove” 移除文件(从Git中删除)
git rm -f a.a 强行移除修改后文件(从暂存区和工作区中删除)
git diff –cached 或 $ git diff –staged 查看尚未提交的更新
git stash push 将文件给push到一个临时空间中
git stash pop 将文件从临时空间pop下来
git remote add origin [email protected]:username/Hello-World.git
git push origin master 将本地项目给提交到服务器中
git pull 本地与服务器端同步
git push (远程仓库名) (分支名) 将本地分支推送到服务器上去。
git push origin serverfix:awesomebranch
git fetch 相当于是从远程获取最新版本到本地,不会自动merge
git commit -a -m “log_message” (-a是提交所有改动,-m是加入log信息) 本地修改同步至服务器端 :
git branch branch_0.1 master 从主分支master创建branch_0.1分支
git branch -m branch_0.1 branch_1.0 将branch_0.1重命名为branch_1.0
git checkout branch_1.0/master 切换到branch_1.0/master分支
git update-index –assume-unchanged /path/file 代码更改git 不追踪

猜你喜欢

转载自blog.csdn.net/Ray0812/article/details/52860770