您的位置:首页 > 其它

git基本使用教程

2017-11-26 09:53 337 查看
题外话

以前不了解git的时候,总感觉git是非常高大上的东西,很长一段时间都没有接触上。但后来用了一段时间后,发现git这个东西真是厉害啊,在厉害的同时它还这么地”接地气”,既能让线上线下同步仓库,多条分支工作,也能随时fork别人的优秀的项目来参考学习,真是受用无比。我这人忘性比较高,为方便记忆,特意记录下git 的基本使用。(ps:以下部分截图来自廖雪峰老师的git教程)

正文笔记(以下内容针对windows平台)

首先安装git可以去git官网下载git for windows.

安装好git后在任意一个目录下右键选择 git bash here



配置git的身份

就是如果你想克隆服务器上的仓库,你得告诉别人你的身份

git config --global user.name <your_name>
git config  --global user.email <your_email>


创建版本库

//learngit就是仓库所在地方,你可以设为任意名字
mkdir learngit
cd learngit


空仓库初始化

git init




这句命令会初始化空仓库learngit,cd 进入 learngit,会发现多了个.git目录,这个目录是git用来跟踪版本库的,一般不要去碰它。

一般仓库下都会有个README.md文件用来对仓库进行必要的说明。



注意:在编辑README.md时不要用windows 自带的记事本保存utf-8编码的文件时会自动在文件头部添加Oxefbbbf(十六进制)的字符。替代记事本:NotePad++,EditPlus,sublime Text3.等

添加文件到git仓库

//告诉git这是个要放到仓库的文件,放在暂存区
git add README.md
/**
*提交到git仓库,-m 后面是指该次提交的说明信息
*提交成功后会返回提示:多少个文件被提交,插入了多少行内容
*/
git commit -m "update README.md"


版本回退

git log 命令会显示从最近到最久的提交日志,如果嫌输出信息太多,可以在后面加上 –pretty=online参数



git reset –-hard HEAD^ //HEAD表示当前版本,^表示回退到上一个版本,^^回退到上两个版本,以此类推,太多数的话可以写HEAD~100

也可以根据commit id号回退到特定的版本,没必要写全,写几个前面的数字就可以,git会自动寻找。

git reset --hard 3628164


现在总结一下:

HEAD指向的版本就是当前版本,因此,Git允许我们在版本的历史之间穿梭,使用命令git reset –hardcommit_id

穿梭前,用 git log 可以查看提交历史信息,以便确定要回退到那个版本。

要重返未来,用 git reflog 查看命令历史,以便确定要回到未来的那个版本。

-

工作区与暂存区

工作区就是在电脑中能看到的目录,比如learngit文件夹就是一个工作区。工作区里有一个隐藏目录.git,这个不算工作区,而是Git的版本库。

Git的版本库里存了很多东西,其中最重要的即是称为 stage(或者叫index)的暂存区,还有git为我们自动创建的第一个分支master,以及指向maser的一个指针叫HEAD

你可以简单理解为,需要提交的文件修改通通放到暂存区,然后,此一次性提交到暂存区的所有修改。

比如,你对README.txt(或者README.md)进行修改一下,暂存区就会变成这样:



一旦提交后,如果你没有对工作区做任何修改,那么工作区就是“”干净的“”!nothing to commit.



小结:

暂存区是Git非常重要的概念,弄明白了暂存区,就弄明白了Git的很多操作到底干了什么。

管理修改

为什么Git比其他版本控制系统设计得优秀,因为Git跟踪并管理的是修改,而非文件。每次修改,如果不 add 到暂存区,那就不会加到 commit 中。命令:

git add <something>
git commit -m "description"


撤销修改

git checkout --README.txt //可以撤销最近一次的修改


有两种情况:

README.txt自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态。

README.txt已经添加到暂存区后,又作了修改,现在,撤销修改就会回到添加到暂存区后的状态。

删除文件

eg:

git rm test.txt
git commit -m "delete test.txt"


如果是删除了的话,可以用 git checkout – test.txt 来恢复文件。

远程仓库

Github 专门提供 git 仓库的托管服务 。

由于本地 git 仓库和 github 仓库之间的传输是通过 SSH 设置的,因此,需要设置一下 。

1.创建 SSH KEY

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


为什么 github 需要 SSH KEY 呢? 因为 github 需要识别出你推送的提交时你推送的,而不是别人冒充的,而 git 支持 SSH 协议,所以, github 只要知道了你的公钥,就可以确认只有你自己才能推送。

2.添加SSH KEY 到 github 或 coding net

github



coding net



添加远程仓库

1.将本地的内容推送关联到 github 仓库

git remote add origin git@github.com:your_usename/repos_name.git


注意账户名不要写错,添加后,远程库的名字就是origin,这是 git 的默认叫法,也可以改成别的。

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

把本地库的内容推送到远程,用 git push 命令,实际上是把本地的 master 推送到远程仓库。

git push -u origin master


如果远程仓库是空的,第一次推送 master 分支时,加上了 -u 参数, git 不但会把本地的 master 分支内容推送的远程到远程新的 master 分支,还会把本地的 master 分支 和远程的 master 分支关联起来,在以后的推送或者拉取时间时就可以简化命令。

若要删除远程仓库的关联,可以用命令: git remote rm hello-world.git



从远程仓库克隆

git clone git@github.com:your_username/repos_name.git


小结:

要克隆一个仓库,首先必须知道仓库的地址,然后使用 git clone 命令克隆。

git 支持多种协议,包括 https ,但通过 ssh 支持的原生 git 协议才最快

分支管理

分支可以创建属于个人的工作空间,开发完毕后再一次性合并到原来的分支上,这样安全又不影响别人工作。

创建与合并分支

在 git 中, master 分支也叫主分支,HEAD 严格来说不是指向提交,而是指向 master

首先,创建 dev 分支,然后切换到 dev 分支

git checkout -b dev ,这个命令相当于:

git branch dev
git checkout dev


可以用 git branch 来查看分支,当前分支前面会出现一个”*”号;

git checkout dev 切换分支,回到 master 分支

合并分支: git merge dev ,把 dev 分支修改的内容合并到 master 分支上。

合并完成后,便可以放心删除 dev 分支。



解决冲突

假设这种情况:新建一个分支 future,修改 readme.txt 内容后提交;切换回 master 分支又修改 readme.txt 内容后提交;



这种情况下,git 无法执行 “快速合并”,只能试图把各自修改合并起来 ,但这种合并可能会有冲突。



果然冲突了,git 告诉我们, readme.txt 文件存在冲突,必须手动解决再提交, git status 可查看冲突的文件。

只能手动修改,git用 <<<<<<<,=======,>>>>>>标记处不同分支的内容。修改保存再提交。



可见冲突解决了。

小结:

当 git 无法自动合并分支时,就必须首先解决冲突,解决冲突后,再提交,合并完成。用 git log

–graph命令可以看到分支合并图。

分支管理策略

一般合并分支时,git 会用 fast forward模式,这种模式下,删除分之后会丢掉分支的信息,如果要强制禁用 Fast Forward 模式,git 就会在 merge 时生成一个新的 commit,这样,从分支历史上就可以看出分支信息。

git merge --no-ff -m "merge with no-ff" dev


因为这个合并要创建一个新的 commit ,所以加上 -m 参数,把 commit 描述写进去。合并用 git log 查看操作信息。

git log --graph --pretty=online --abbrev-commit




Bug分支

软件开发过程中遇到 bug 时可以新建一个分支来修复,修复完成后,合并分支,然后将临时分支删除。

那现场的工作怎么办?git 提供了一个 stash 功能,可以把当前工作现场储藏起来,等以后恢复现场后继续工作。

git stash


修复 bug 后,返回之前的分支

git stash list


查看之前的工作现场。

恢复现场:

git stash apply
git stash drop
//或
git stash pop


推送分支

推送分支,就是把该分支上的所有本地提交都推送到远程库。推送时,要指定本地分支,这样,git 就会把该分支推送到远程仓库对应的分支上。

git push origin master
//或
git push origin dev


bug 分支只用于在本地修复 bug ,就没必要推到远程仓库了。

END
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  git