Git使用心得

1.Git的简介  

Git 是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。

Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。

Git 与常用的版本控制工具 CVS, Subversion 等不同,它采用了分布式版本库的方式,不必服务器端软件支持。

2.Git的工作流程

(1)克隆 Git 资源作为工作目录。

(2)在克隆的资源上添加或修改文件。 

(3)如果其他人修改了,你可以更新资源。

(4)在提交前查看修改。

(5)提交修改。

(6)在修改完成后,如果发现错误,可以撤回提交并再次修改并提交。

3.Git的基本操作

Git 的工作就是创建和保存你项目的快照及与之后的快照进行对比。

Git 常用的是以下 6 个命令:git clonegit pushgit add 、git commitgit checkoutgit pull,后面我们会详细介绍。

说明:

  • workspace:工作区
  • staging area:暂存区/缓存区
  • local repository:或本地仓库
  • remote repository:远程仓库

3.1准备工作

通过下载vscode软件,使用Git。

点击源代码管理,选择一个文件夹,这里我选择新建的hello文件夹

3.2创建仓库命令

3.2.1 git init 初始化仓库

Git 使用 git init 命令来初始化一个 Git 仓库,Git 的很多命令都需要在 Git 的仓库中运行,所以 git init 是使用 Git 的第一个命令。

在执行完成 git init 命令后,Git 仓库会生成一个 .git 目录,该目录包含了资源的所有元数据,其他的项目目录保持不变。

3.2.2 git clone 拷贝一份远程仓库

git clone 拷贝一个 Git 仓库到本地,让自己能够查看该项目,或者进行修改。 

拷贝项目命令格式如下:

 git clone [url]

 

[url] 是你要拷贝的项目。

在Gitee.com或者Github.com等网站上创建了Git版本库,可以通过上文描述的git clone命令,将版本库克隆到本地完成本地版本库的初始化。

origin 为远程地址的别名。

git remote 命用于在远程仓库的操作。使用git remote -v 可以查看更详细的远程存储库信息,包括fetch(抓取)的远程存储库URL和push(推送)的远程存储库URL。

 

3.3提交与修改

3.3.1查看工作区(workspace)的状态

git status 命令用于查看在你上次提交之后是否有对文件进行再次修改。

可以看到,在上图中我们位于master分支下且因为这是一个刚刚初始化的版本库,暂无commit记录。

3.3.2git add 命令

git add 命令可将该文件添加到暂存区。

添加一个或多个文件到暂存区:

git add [file1] [file2] ...

 

添加指定目录到暂存区,包括子目录:

git add [dir]

 

添加当前目录下的所有文件到暂存区:

  

git add .

 

为方便演示,我们首先创建了一个名为README的txt文件,通过执行git add指令后,我们可以将该文件存入暂存区:

利用投touch命令创建一个README.txt文件,利用git add命令加入暂存区中,再利用git status查看工作区的状态,发现一个新文件:README.txt。

3.3.3git commit 命令

git commit 命令将暂存区内容添加到本地仓库中。

提交暂存区到本地仓库中:

git commit -m [message]

 

[message] 可以是一些备注信息。

提交暂存区的指定文件到仓库区:

$ git commit [file1] [file2] ... -m [message]

 

-a 参数设置修改文件后不需要执行 git add 命令,直接来提交

$ git commit -a

 



3.3.4 本地版本库的回退

自然地,当我们发现工作区中的文件或代码不符合我们的预期时,我们也可以从本地库中取回之前的记录。我们介绍了git log指令可以查询到本地版本库中的修改记录,此时,我们可以通过git reset指令进行回退操作。

git reset 命令用于回退版本,可以指定退回某一次提交的版本。

git reset 命令语法格式如下:

git reset [--soft | --mixed | --hard] [HEAD]

 

--mixed 为默认,可以不用带该参数,用于重置暂存区的文件与上一次的提交(commit)保持一致,工作区文件内容保持不变。

git reset  [HEAD]

 



HEAD 说明:

HEAD 表示当前版本

HEAD^ 上一个版本

HEAD^^ 上上一个版本

HEAD^^^ 上上上一个版本

以此类推...

可以使用 ~数字表示

HEAD~0 表示当前版本

HEAD~1 上一个版本

HEAD^2 上上一个版本

HEAD^3 上上上一个版本

以此类推...

 

在下图中,首先我们可以看到原有的demo.txt文件中的没有内容,在经过修改后,我们再使用git add、git commit指令将其上传到本地库中。修改之后内容为second。

通过查询日志,我们可以得到commit id,通过commit id可以取回之前的记录:

commit id:73794eb

 

3.3.4 git rm 命令

git rm 命令用于删除文件。

git rm 删除文件有以下几种形式:

1、将文件从暂存区和工作区中删除:

git rm <file>

 

以下实例从暂存区和工作区中删除 runoob.txt 文件:

git rm runoob.txt 

 

如果删除之前修改过并且已经放到暂存区域的话,则必须要用强制删除选项 -f。

强行从暂存区和工作区中删除修改后的 runoob.txt 文件:

git rm -f runoob.txt 

 

如果想把文件从暂存区域移除,但仍然希望保留在当前工作目录中,换句话说,仅是从跟踪清单中删除,使用 --cached 选项即可:

git rm --cached <file>

 

以下实例从暂存区中删除 runoob.txt 文件:

git rm --cached runoob.txt

 



4.Git 分支管理

几乎每一种版本控制系统都以某种形式支持分支。使用分支意味着你可以从开发主线上分离开来,然后在不影响主线的同时继续工作。

有人把 Git 的分支模型称为必杀技特性,而正是因为它,将 Git 从版本控制系统家族里区分出来。

创建分支命令:

git branch (branchname)

 

切换分支命令:

git checkout (branchname)

 

当你切换分支的时候,Git 会用该分支的最后提交的快照替换你的工作目录的内容, 所以多个分支不需要多个目录。

合并分支命令:

git merge 

 

你可以多次合并到统一分支, 也可以选择在合并之后直接删除被并入的分支。

如下图所示,项目在A版本处开始分叉,形成了两个分支,分别提交了B、D、F和C、E、G几个commit,这时希望将两个分支合并,只要将F与A的差异部分,以及G和A的差异部分,都放入工作区,如果有冲突解决冲突就可以提交一个版本H,即完成了两个分支的合并。

4.2团队项目中的分叉合并

在实际的团队项目开发中,团队每个成员的工作流程大致上为:

1) 克隆或同步远程仓库到本地仓库;

2)为自己的工作创建分支;

3)在该分支上完成某一单一功能模块或代码块的开发工作;

4) 将该分支合并到主分支。

4.2.1创建分支

在团队工作中,往往需要将不同任务分配给不同的小组,为了避免冲突,需要每个小组在一个分支下工作,最后合并所有的分支。首先,我们创建一个新的分支mybranch。

 
1 git checkout -b BranchName    // 创建并进入名为BranchName的分支    
 2 git branch                    // 查询本地仓库的分支情况
 3 git checkout BranchName      // 进入名为BranchName的分支

 

  git branch // 查看当前分支

 

*号代表当前所在的分支

对当前所在的分支进行工作,添加提交新的文件。

4.2.2合并分支

换回master分支下,合并mybranch到master分支,最后推送到origin/master之后即完成了一项开发工作。

这个时候去观察远程版本库,发现已经更新成功。

4.3 Git Rebase的使用

当我们在自己的分支mybranch下完成了一些开发工作之后,为了让log记录更加详细从而方便将来更容易作为退回的参考,我们可以用git rebase重新整理一下提交记录(但是不能对任何已经提交到远程仓库的commit进行修改)。

 

 

 

 

命令:git rebase -i [startpoint] [endpoint]

其中 -i的意思是 --interactive,即弹出交互时的界面让用户编辑完成合并操作,[startpoint]  [endpoint] 则指定了一个编辑区间,如果不指定 [endpoint],则该区间的终点默认是当前分支的HEAD。

可以使用HEAD^^、HEAD~100、commit ID或者commit ID的头几个字符来指定一个commit节点。

我们先转换到mybranch分支下,将开发完成的A,B,C文件进行add,commit:

使用rebase指令管理commit,并drop掉A和B的commit。

 

可在该文本编辑器中对commit记录进行修改,修改后是有可能产生冲突的:使用 git add .命令,将文件都加入暂存区。

之后使用git rebase -continue

使用git log命令查看提交信息,发现A,B已经成功移除了提交,C也修改了提交信息:

5.小结

git的版本控制在项目开发中起到的作用非常大,特别是对于多人合作的项目,能够高效便捷的完成合作开发,同时由于可以进行版本回退的性质,所以对于操作错误的容错性很大,对于团队项目开发而言,应该尽量使用git,能减少很多的沟通成本,同时对于项目的管理会更加高效在孟宁老师的课堂上学习,使我得以比较快速的学习到git的相关知识,并完成了该篇博客,在此特别感谢。

参考:https://mp.weixin.qq.com/s/Km5KuXPETvG0wCGHrvj9Vg

posted @ 2020-10-10 18:52  smilekiller  阅读(102)  评论(0)    收藏  举报