文档开发者中心
我的

Git基础培训

受开发者llky之邀,希望看看Git基础培训内容,拷贝的一个ppt文档,大伙格式问题就忽略吧;

----------------------------华丽分割线-----------------------------

1.安装Git
l1. $ sudo apt-get install git l安装完成后,还需要最后一步设置,在命令行输入:

l2. $ git config --global user.name 'Your Name“

l3. $ git config --global user.email 'email@example.com'


2.创建版本库

1.创建一个空目录learngit

 $ mkdir learngit

l$ cd learngit

2.  通过git init命令把这个目录变成Git可以管理的仓库

 $ git init

 

2.1      把文件添加到版本库


l第一步,用命令git add告诉Git,把文件添加到仓库: l$ git add readme.txt

l第二步,用命令git commit告诉Git,把文件提交到仓库: l$ git commit -m 'wrote a readme file“ l

lgit commit命令,-m后面输入的是本次提交的说明,可以输入任意内容,当然最好是有意义的,这样你就能从历史记录里方便地找到改动记录。

l可以多次add不同的文件, commit可以一次提交很多文件

2.2      工作区和暂存区

l1.工作区(Working Directory):就是你在电脑里能看到的目录,比如我的learngit文件夹就是一个工作区: l

2.版本库(Repository):工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库。 lGit的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD。

l把文件往Git版本库里添加的时候,是分两步执行的:

l第一步是用git add把文件添加进去,实际上就是把文件修改添加到暂存区;

l第二步是用git commit提交更改,实际上就是把暂存区的所有内容提交到当前分支。

l我们创建Git版本库时,Git自动为我们创建了唯一一个master分支,所以,现在,git commit就是往master分支上提交更改。

l随时用git status查看一下状态: l$ git status

2.3   小结

l初始化一个Git仓库,使用git init命令。

l添加文件到Git仓库,分两步:

l·         第一步,使用命令git add file_name,注意,可反复多次使用,添加多个文件;

l·         第二步,使用命令git commit –m “xxx”,完成。

3.时光机穿梭

l$ git diff file_name l查看对文件作了什么修改.

ll用git diff HEAD -- file_name命令可以查看工作区和版本库里面最新版本的区别:

l$ git diff HEAD -- file_name

l l要随时掌握工作区的状态,使用git status命令。

l如果git status告诉你有文件被修改过,用git diff可以查看修改内容。

3.1      版本回退

l把当前版本回退到上一个版本,就可以使用git reset命令:

l$ git reset --hard HEAD^ l把当前版本回退到上上一个版本就是HEAD^^,往上100个版本写成HEAD~100,也可以指定会退到某个版本.

l$ git reset --hard commit_id l查看提交的历史记录

l$ git log l如果嫌输出信息太多,可以加上
--pretty=oneline参数

l$ git log --pretty=oneline

如果想恢复到新版本, Git提供了一个命令git reflog用来记录你的一次命令:

 $ git reflog

小结:

lHEAD指向的版本就是当前版本,因此,Git允许我们在版本的历史之间穿梭,使用命令git reset --hard commit_id。 l穿梭前,用git log可以查看提交历史,以便确定要回退到哪个版本。 l要重返未来,用git reflog查看命令历史,以便确定要回到未来的哪个版本。

3.2撤销修改

l$ git checkout -- readme.txt l意思就是,把readme.txt文件在工作区的修改全部撤销.

l$ git reset HEAD readme.txt l意思就是, 把暂存区的修改撤销掉(unstage),重新放回工作区.

3.3删除文件

l一般情况下,你通常直接在文件管理器中把没用的文件删了,或者用rm命令删了. 这个时候,Git知道你删除了文件,因此,工作区和版本库就不一致了,git status命令会立刻告诉你哪些文件被删除了.

l现在你有两个选择,一是确实要从版本库中删除该文件,那就用命令git rm删掉,并且git commit:

l$ git rm test.txt

l$ git commit -m 'remove test.txt“

l另一种情况是删错了,因为版本库里还有呢,所以可以很轻松地把误删的文件恢复到最新版本:l$ git checkout -- test.txt

4.远程仓库

l由于你的本地Git仓库和GitHub仓库之间的传输是通过SSH加密的,所以,需要一点设置: l第1步:创建SSH Key .在用户主目录下,看看有没有.ssh目录,如果有,再看看这个目录下有没有id_rsa和id_rsa.pub这两个文件,如果已经有了,可直接跳到下一步.如果没有,打开Shell ,创建SSH Key:

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

l如果一切顺利的话,可以在用户主目录里找到.ssh目录,里面有id_rsa和id_rsa.pub两个文件,这两个就是SSH Key的秘钥对,id_rsa是私钥,不能泄露出去,id_rsa.pub是公钥,可以放心地告诉任何人。

l第2步:登陆GitHub,打开“Account settings”,“SSH Keys”页面:

l然后,点“Add SSH Key”,填上任意Title,在Key文本框里粘贴id_rsa.pub文件的内容: l点“Add Key”,你就应该看到已经添加的Key:

4.1      添加远程库

l1.首先,登陆GitHub,然后,在右上角找到“Create a new repo”按钮,创建一个新的仓库

l2.在Repository name填入learngit,其他保持默认设置,点击“Create repository”按钮,就成功地创建了一个新的Git仓库.

l3.关联远程库,在本地的learngit仓库下运行命令:

l$ git remote add origin git@github.com:michaelliao/learngit.git

l4. 把本地库的所有内容推送到远程库上: l第一次推送 : $ git push -u origin master l之后推送: $ git push origin master

4.2      从远程库克隆

l首先,登陆GitHub,创建一个新的仓库,名字叫gitskills:

l我们勾选Initialize this repository with a README,这样GitHub会自动为我们创建一个README.md文件。创建完毕后,可以看到README.md文件:

l现在,远程库已经准备好了,下一步是用命令git clone克隆一个本地库:

l$ git clone git@github.com:michaelliao/gitskills.git

l然后进入gitskills目录看看,已经有README.md文件了

5 .分支管理
l 5.1      创建与合并分支

l l查看分支:git branch l创建分支:git branch <name>

l切换分支:git checkout <name>

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

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

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

5.2      解决冲突

l用带参数的git log也可以看到分支的合并情况:

l$ git log --graph --pretty=oneline --abbrev-commit

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

l用git log --graph命令可以看到分支合并图。

5.3      分支管理策略

l通常,合并分支时,如果可能,Git会用Fast forward模式,但这种模式下,删除分支后,会丢掉分支信息。

l如果要强制禁用Fast forward模式,Git就会在merge时生成一个新的commit,这样,从分支历史上就可以看出分支信息。

l准备合并dev分支,请注意--no-ff参数,表示禁用Fast forward:

l$ git merge --no-ff -m 'merge with no-ff' dev

5.3.1        分支策略

l在实际开发中,我们应该按照几个基本原则进行分支管理:

l首先,master分支应该是非常稳定的,也就是仅用来发布新版本,平时不能在上面干活;

l那在哪干活呢?干活都在dev分支上,也就是说,dev分支是不稳定的,到某个时候,比如1.0版本发布时,再把dev分支合并到master上,在master分支发布1.0版本;

l你和你的小伙伴们每个人都在dev分支上干活,每个人都有自己的分支,时不时地往dev分支上合并就可以了。

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

5.4      Bug分支

lGit还提供了一个stash功能,可以把当前工作现场“储藏”起来,等以后恢复现场后继续工作:

l$ git stash l查看保存的内容:$ git stash list

l恢复工作现场:

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

l另一种方式是用git stash pop,恢复的同时把stash内容也删了:

l$ git stash pop

5.5      Feature分支

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

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

5.6      多人协作

l要查看远程库的信息,用git remote -v显示更详细的信息:

l$ git remote –v l上面显示了可以抓取和推送的origin的地址。如果没有推送权限,就看不到push的地址。 l

5.6.1        推送分支

l推送时,要指定本地分支,这样,Git就会把该分支推送到远程库对应的远程分支上:

l$ git push origin master l如果要推送其他分支,比如dev,就改成:

l$ git push origin dev

5.6.2        抓取分支

l多人协作的工作模式通常是这样:

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

l2.  如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并;

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

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

l如果git pull提示“no tracking information”,则说明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream branch-name origin/branch-name

5.6.3        小结

l查看远程库信息,使用git remote -v;

l从本地推送分支,使用git push origin branch-name,如果推送失败,先用git pull抓取远程的新提交;

l在本地创建和远程分支对应的分支,使用git checkout -b branch-name origin/branch-name,本地和远程分支的名称最好一致;

l建立本地分支和远程分支的关联,使用git branch --set-upstream branch-name origin/branch-name; l从远程抓取分支,使用git pull,如果有冲突,要先处理冲突。 l

6 . 标签管理
l6.1      创建标签 l

l命令git tag <name>用于新建一个标签,默认为HEAD,也可以指定一个commit id;

lgit tag -a <tagname> -m 'blablabla...'可以指定标签信息;

 git tag -s <tagname> -m 'blablabla...'可以用PGP签名标签;

l命令git tag可以查看所有标签。 l命令git show <tagname>查看标签信息:

6.2      操作标签

l命令git push origin <tagname>可以推送一个本地标签;

l命令git push origin --tags可以推送全部未推送过的本地标签;

l命令git tag -d <tagname>可以删除一个本地标签; 命令git push origin :refs/tags/<tagname>可以删除一个远程标签

7   配置别名

l我们只需要敲一行命令,告诉Git,以后st就表示status:

l$ git config --global alias.st status l

l$ git config --global alias.co checkout

l$ git config --global alias.ci commit

l$ git config --global alias.br branch

l配置一个git last,让其显示最后一次提交信息:

l$ git config --global alias.last 'log -1' 这样,用git last就能显示最近一次的提交:

l$ git last

7.1    配置文件

l配置Git的时候,加上--global是针对当前用户起作用的,如果不加,那只针对当前的仓库起作用。 l每个仓库的Git配置文件都放在.git/config文件中:

l[core]                                                                        

  l        repositoryformatversion = 0                                          

  l        filemode = true                                                        

l        bare = false                                                            

l        logallrefupdates = true                                                

l[alias]                                                                        

l        st = status                                                            

l        last = log -1

点赞
收藏
回复
分享
举报
浏览1283 发布于2019-07-26 01:30未知归属地
全部评论
最多点赞
最新发布
最早发布
暂无评论
暂无评论
写回答
新增插入模板功能
一键使用模板,快速填写内容,轻松发帖~
知道了
  • 为了保障您的信息安全,请勿上传您的敏感个人信息(如您的密码等信息)和您的敏感资产信息(如关键源代码、签名私钥、调试安装包、业务日志等信息),且您需自行承担由此产生的信息泄露等安全风险。
  • 如您发布的内容为转载内容,请注明内容来源。

我要发帖子

了解社区公约,与您携手共创和谐专业的开发者社区。