git使用篇

                                                    GIT篇

目录

                                                    GIT篇

1. 分布式与集中式管理

2. 时光穿梭

2.1 版本回退

2.2 工作区与暂存区

2.3 管理修改

2.4 撤销修改

2.5 删除文件

3. 远程仓库

3.1 添加远程库

3.2 远程仓库克隆

4. 分支管理

4.1 创建与合并分支

4.2 冲突解决

4.3 分支管理策略

4.4 BUG分支

4.5 Feature分支

4.6 多人协作

4.7 Rebase

5. 标签管理

5.1 标签创建

5.2 标签操作

6. Git自定义

6.1 Git特殊文件的忽略

6.2 Git服务器搭建


1. 分布式与集中式管理

(1) 集中式管理控制:版本库是集中存放在中央服务器,做代码处理的时候都是在自己的个人电脑上,处理完代码之后再提交给中央服务器。

集中式版本控制管理主要的毛病是必须联网,在局域网上传和下载还可以接受,如果在互联网上就存在网速很慢的问题。

(2) 分布式管理控制:分布式版本系统控制通常有一台充当中央服务器的电脑,作用是方便交换不同电脑之间的修改,当然没有这个中央服务器,不同的电脑仍然可以工作。

(3) 创建版本库与初始化git的配置

初始化git配置:

git config --global user.email [email protected]
git config --global user.name "Your Name"

在提交的时候,需要设置全局配置,包括邮件和用户名

(a) 创建一个空目录

$ mkdir learngit

(b) 目录变成Git可以管理的仓库

$ git init

第一步:用命令git add,把文件添加到仓库

$ git add readme.txt

第二步:用命令git commit,把文件提交到仓库

$ git commit -m ‘wrote a readme file’

其中,-m后面输入的是本次提交的说明

2. 时光穿梭

2.1 版本回退

(1) 文档readme.txt修改其中的内容,通过git status可以时刻掌握仓库当前的状态。如下图所示:

(2) 查看文档最近到最远的提交日志,使用命令:git log,如果嫌显示内容比较多,可以采用命令git log –pretty=oneline

(3) 在Git中,用HEAD表示当前版本,上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上100个版本写成HEAD~100,回退上一个版本的命令

git reset --hard HEAD^

也可以根据commit id来回退版本,相关命令为git reset --hard commit_id

(4) 如果回退版本之后,想重新穿梭到最新的版本,可以通过命令git reflog查询历史命令,再通过git reset --hard commit_id完成操作

2.2 工作区与暂存区

(1) 版本库

其中stage为暂存区,git创建的一个分支master,以及指向master的指针HEAD

(2) 添加工作区到暂存区(stage)

(3) 通过git add把工作区添加到暂存区,然后通过git commit把暂存区提交到分支

2.3 管理修改

(1) 第一次修改àgit addà第二次修改àgit commit,这样的操作过程只能提交第一次修改过程到分支,不能提交第二次的修改

(2) 第一次修改àgit addà第二次修改àgit addàgit commit

通过命令git diff HEAD – readme.txt查看工作区与版本库的区别

2.4 撤销修改

(1) 通过命令git checkout -- file可以丢弃工作区的修改

通过该命令对file文件在工作区的修改全部撤销,存在两种情况:

a. 修改后还没有被放到暂存区,撤销修改就回到版本库时的状态

b. 修改添加到暂存区后,又对文件作了修改,撤销修改就回到添加到暂存区后的状态

其中,git checkout -- file命令中的--很重要,如果没有--,就变成了切换到另一个分支。

(2) 用命令git reset HEAD <file>可以把暂存区的修改撤销掉(unstage),重新放回工作区。git reset命令既可以回退版本,也可以把暂存区的修改回退工作区

回退版本的命令:git reset --hard HEAD^ 或 git reset --hard commit_id

(3) 如果修改添加到暂存区,则先通过git reset HEAD <file>撤销到工作区,然后通过git checkout -- <file>撤销修改

2.5 删除文件

如果把工作区的文件提交到暂存区后,手动删除文件,存在两种操作:误删或需删除文件

若是误删,则用命令git checkout -- <file>恢复

若需要删除文件,则git rm <file>删除,然后提交git commit

3. 远程仓库

Git仓库和GitHub仓库之间的传输是通过SSH加密,关联远程仓库需要以下步骤的设置:

(1) 创建SSH Key,会在.ssh目录下存在id_rsa和id_rsa.pub两个文件:

ssh-keygen -t rsa -C ‘[email protected]

其中id_rsa是私钥,id_rsa.pub是公钥

(2) 登录GitHub,打开Settings中的SSH and GPG keys,添加id_rsa.pub的内容到SSH keys中

3.1 添加远程库

(1) 关联本地仓库到远程仓库

git remote add origin [email protected]:github_username/learngit.git

其中远程库的名字是origin

(2) 本地仓库所有内容推送到远程上

git push -u origin master  (第一次推送)

每次本地提交后,使用git push origin master推送最新修改

3.2 远程仓库克隆

远程仓库的克隆

git clone [email protected]:github_username/repository_name.git

4. 分支管理

4.1 创建与合并分支

(1) 创建dev分支,并切换到dev分支:

git checkout -b dev

其中-b参数表示创建并切换,相当于以下两条命令:

git branch dev
git checkout dev

(2) 通过命令git branch列出所有分支,当前分支会标一个*号

(3) 分支的合并操作

通过命令git merge dev,合并master到dev中。git merge命令用于合并指定分支到当前分支

(4) 合并后可以删除dev分支,命令git branch -d dev

4.2 冲突解决

(1) master和创建的分支都有提交,如图所示

(2) Git用<<<<<<<,=======,>>>>>>>标记出不同分支的内容

(3) 对合并的结果提交

git add <file>
git commit -m ‘conflict fixed’

(4) git log --graph --pretty=oneline --abbrev-commit查看分支的合并情况

4.3 分支管理策略

如果禁用Fast forward,需要添加参--no-ff

命令为git merge --no-ff -m ‘message’ dev

合并之后通过命令git log --graph --pretty=oneline --abbrev-commit查询

团队合作中的分支合并情况

Git分支十分强大,在团队开发中应该充分应用。

合并分支时,加上--no-ff参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并,而fast forward合并就看不出来曾经做过合并。

4.4 BUG分支

Git还提供了一个stash功能,可以把当前工作现场“储藏”起来,等以后恢复现场后继续工作,通过命令git stash储藏起来,然后在其他分支上工作,最后通过git checkout name切换到储藏的分支。

(1) 通过命令git stash list查看储藏的工作区存放在哪里

(2) Git把stash内容存在某个地方,需要恢复有两个办法:

一是用git stash apply恢复,但是恢复后,stash内容并不删除,你需要用git stash drop来删除;

另一种方式是用git stash pop,恢复的同时把stash内容并删除

4.5 Feature分支

开发一个新feature,最好新建一个分支;

如果要丢弃一个没有被合并过的分支,可以通过git branch -D <name>强行删除

4.6 多人协作

(1) 查看远程远程库的信息,命令为git remote

(2) 用git remote -v显示更详细的信息,上面显示了可以抓取和推送的origin的地址。如果没有推送权限,就看不到push的地址

(3) 推送分支,通过命令git push origin master

4.7 Rebase

Rebase操作的特点:把交叉的提交历史整理成一条直线,看上去更加的直观。缺点是本地分叉提交已经被修改。

Rebase操作可以把本地未push的分叉提交历史整理成直线。

Rebase的目的是使得查看历史提交的变化时更容易,因为分叉的提交需要三方对比。

5. 标签管理

发布版本时,通常为版本库打标签(tag),也就确定打标签版本,标签设计版本库的快照。标签与分支都是指针形式存在,但分支可以移动,标签不能移动。

5.1 标签创建

(1) 查看所有版本的标签

git tag

(2) 创建标签,首先通过命令git checkout u_branch切换到指定的分支,然后通过git tag 版本号。即
 

git checkout u_branch
git tag v1.0

(3) 对指定commit id添加标签

git tag v1.0 commit_id

(4) 查看标签的信息

git show <tagname>

(5) 创建带有说明的标签,-a指定标签名,-m指定说明文字

git tag -a v1.0 -m ‘<description>’ commit_id

5.2 标签操作

(1) 删除标签

git tag -d <tagname>

(2) 标签只存储在本地,不会自动推送到远程。如果想把标签推送到远程,则

git push origin <tagname>

或者一次性推送全部本地标签

git push origin --tags

(3) 删除远程标签,先删除本地,在远程

git tag -d <tagname>
git push origin :refs/tags/<tagname>

6. Git自定义

6.1 Git特殊文件的忽略

添加.gitignore文件,在文件中指定需要忽略的文件名或类型。

如果想提交忽略的文件,可以强制提交

git add -f <ignore_file>

6.2 Git服务器搭建

(1) 在Linux服务器上安装Git服务。

(2) 创建证书登录:收集所有用户的公钥,把所有公钥导入到/home/git/.ssh/authorized_keys文件里,用户的公钥文件为id_rsa.pub。

(3) 选择目录作为Git仓库,初始化一个裸仓库

git init --bare sample.git

(4) 然后就可以通过以下命令:

git clone git@server:/<git_content>/sample.git

猜你喜欢

转载自blog.csdn.net/YMilton/article/details/89040446
今日推荐