Git 教程

引言

一直在硬盘里面吃灰,今天无意间看到了。备忘。全文均是整理自廖雪峰老师教程。

一、安装git

Linux安装:

$ sudo apt-get install git
$ git config --global user.name "Your Name"   #配置
$ git config --global user.email "email@example.com"
Windows安装:
https://git-scm.com/downloads
终端->git-bash.exe

二、创建版本库

选择合适路径,创建目录作为本地仓库:

$ pwd        #pwd命令⽤于显⽰当前目录
$ git init   #把把当前录变成Git可以管理的仓库
	#Windows下建议下载Notepad++代替记事本把Notepad++的默认编码设置为UTF-8 without BOM即可。

$ git add readme.txt   #告诉Git,把⽂件添加到仓库
$ git commit -m "wrote a readme file"    #告诉Git,把⽂件提交到仓库

三、时光穿梭

$ git status            #查看仓库当前的状态
$ git diff readme.txt   #查看difference  

四、版本回退

$ git log     #显⽰从最近到最远的提交⽇志
$ git log --pretty=oneline   #简洁版
版本回退指令:
$ git reset --hard HEAD^        #上个版本
$ git reset --hard HEAD^^      #上两个版本
$ git reset --hard HEAD~100    #上100个版本
$ git reset --hard 3628164      #根据git log出的commit id号精准回退
$ cat readme.txt               #查看内容
$ git reflog                     #记录每⼀次命令(意会:重返未来)

五、撤销修改

$ git checkout -- readme.txt   #(工作区)回到最近⼀次git commit或git add时的状态,命令中的“--”很重要,没有“--”,就变成了“创建⼀个新分⽀”的命令

六、删除文件

$ rm test.txt         #一般情况,和Linux命令一样
$ git rm test.txt     #从版本库中删除该⽂件,⽤git rm且commit
$ git commit -m "remove test.txt"

七、远程仓库

1、网页申请账号登录
2、本地创建SSH key
	$ ssh-keygen -t rsa -C "youremail@example.com"
	#在用户主目录下Ctrl+h显示隐藏文件夹.ssh/id_rsa.pub->copy
	#登录网页账户Account setting->SSHkeys->AddSSHKey->paste
3、关联本地仓库和远程仓库
	create a new repo后:
$ git remote add origin git@github.com:boonvon/learngit.git  #remote(远程)将本地仓库和远程仓库关联起来<第一次关联即可,以后不用>
$ git push -u origin master    #把本地库的所有内容推送到远程库上<第一次>
之后直接$ git push origin master
4、从远程仓库克隆
$ git clone git@github.com:boonvon/learngit.git  #也可以直接使用http格式
$ git clone https://github.com/boovon/learngit.git

八、分支管理<多人合作时>

$ git checkout -b dev       #(build)创建dev分⽀,然后切换到dev分⽀
等价于以下两句:
$ git branch dev       #创建dev分支
$ git checkout dev     #切换到Dev分支
$ git branch           #查看当前分⽀
$ git checkout master  #切回master
$ git merge dev        #(merge并入、合并)合并当前分支至master“快进模式”
$ git branch -d dev    #(delete)删除dev分⽀

九、解决冲突

$ git checkout -b feature1
$ git add readme.txt
$ git commit -m "AND simple"
$ git checkout master
$ git add readme.txt
$ git commit -m "& simple"
$ git merge feature1
$ git status

master和branch同时有新的提交在合并时导致冲突,这种情况下,Git⽆法执⾏“快速合并”必须⼿动解决冲突后再提交,修改后在提交。

$ git add readme.txt
$ git commit -m "conflict fixed"
$ git log --graph --pretty=oneline --abbrev-commit  #查看分⽀的合并情况
$ git branch -d feature1

十、分支管理策略

通常,合并分⽀时,如果可能,Git会⽤“Fast forward”模式,但这种模式下,删除分⽀后,会丢掉分⽀信息,可强制禁⽤“Fast forward”模式,Git就会在merge时⽣成⼀个新的commit,这样,从分⽀历史上就可以看出分⽀信息。

$ git checkout -b dev
$ git add readme.txt
$ git commit -m "add merge"
$ git checkout master
$ git merge --no-ff -m "merge with no-ff" dev   #fast forward
$ git log --graph --pretty=oneline --abbrev-commit

十一、bug分支—(类似于中断)

当前分支工作还未完成,以前的版本出现bug,需要立马处理但又不想提交现在的分支,Git还提供⼀个stash功能,可以把当前⼯作现场“暂藏”起来,等以后恢复现场后继续⼯作。

$ git status
$ git stash     #“暂藏”当前分支
$ git checkout master
$ git checkout -b issue-101
$ git add readme.txt
$ git commit -m "fix bug 101"

切换到master分⽀,并完成合并,最后删除issue-101分⽀

$ git checkout master
$ git merge --no-ff -m "merged bug fix 101" issue-101
$ git branch -d issue-101
$ git stash list      #查看“暂藏”列表
$ git stash pop       #恢复的同时把stash内容也删了

十二、多人协作

$ git remote                #查看远程库的信息
$ git remote -v             #显⽰更详细的信息

推送分⽀,把该分⽀上的所有本地提交推送到远程库。推送时,要指定本地分⽀,这样,Git就会把该分⽀推送到远程库对应的远程分⽀上:

$ git push origin master     
$ git push origin dev

抓取分支,多⼈协作时,⼤家都会往master和dev分⽀上推送各⾃的修改。对同样的⽂件作了修改,并试图推送,推送失败,因为⼩伙伴的最新提交和你试图推送的提交有冲突,此时,Git已经提⽰我们,先⽤git pull把最新的提交从origin/dev抓下来,然后,在本地合并,解决冲突,再推送。

$ git pull          #抓取分支

git pull失败,原因是没有指定本地dev分⽀与远程origin/dev分⽀的链接,根据提⽰,设置dev和origin/dev的链接:

$ git branch --set-upstream dev origin/dev

再pull:

$ git pull

git pull成功,但是合并有冲突,需要⼿动解决,解决的⽅法和分⽀管理中的解决冲突完全⼀样。解决后,提交,再push:

$ git commit -m "merge & fix hello.py"
$ git push origin dev

如果git pull提⽰“no tracking information”,则说明本地分⽀和远程分⽀的链接关系没有创建,⽤命令:

$git branch --set-upstream branch-name origin/branch-name。

十三、标签管理

$ git branch
$ git checkout master
$ git tag v1.0             #打标签
$ git tag                  #查看所有标签

默认标签是打在最新提交的commit上的。有时候,如果忘了打标签可以找到历史提交的commit id,然后打上:

$ git log --pretty=oneline --abbrev-commit
$ git tag v0.9 6224937     #打标签
$ git tag -a v0.1 -m "version 0.1 released" 3628164  
#创建带有说明的标签,⽤-a指定标签名,-m指定说明⽂字
$ git show v0.9            #查看标签信息
$ git tag -s v0.2 -m "signed version 0.2 released" fec145a

#通过-s⽤私钥签名⼀个标签,签名采⽤PGP签名,因此,必须⾸先安装gpg(GnuPG),如果没有找到gpg,或者没有gpg密钥对,就会报错。

十四、操作标签

如果标签打错了,也可以删除:

$ git tag -d v0.1        #删除标签
$ git push origin v1.0   #推送某个标签到远程
$ git push origin --tags #⼀次性推送全部尚未推送到远程的本地标签

如果标签已经推送到远程,要删除远程标签就⿇烦⼀点,先从本地删除

$ git tag -d v0.9

然后,从远程删除。删除命令也是push,格式如下

$ git push origin :refs/tags/v0.9

十五、⾃定义Git

Git还有很多可配置项。⽐如,让Git显⽰颜⾊,会让命令输出看起来更醒目:

$ git config --global color.ui true

配置别名

$ git config --global alias.st status
$ git config --global alias.co checkout
$ git config --global alias.ci commit
$ git config --global alias.br branch
$ git config --global alias.unstage 'reset HEAD'  

#把暂存区的修改撤销掉
$ git config --global alias.last 'log -1'
#显⽰最后⼀次提交信息

甚⾄还有⼈丧⼼病狂地把lg配置成了:

$ git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr)%C(bold blue)<%an>%Creset' --abbrev-commit"

十六、搭建服务器

7x24⼩时开机并交换⼤家的修改,准备⼀台运⾏Linux的机器,强烈推荐⽤Ubuntu或Debian,sudo权限。

第⼀步,安装git:
$ sudo apt-get install git

第⼆步,创建⼀个git⽤户,⽤来运⾏git服务:
$ sudo adduser git

第三步,创建证书登录:
   收集所有需要登录的⽤户的公钥,就是他们⾃⼰的id_rsa.pub⽂件,把所有公钥导⼊到/home/git/.ssh/authorized_keys⽂件⾥,⼀⾏⼀个。

第四步,初始化Git仓库:
  先选定⼀个目录作为Git仓库,假定是/srv/sample.git,在/srv目录下输⼊命令:
$ sudo git init --bare sample.git
  Git就会创建⼀个裸仓库,裸仓库没有⼯作区,因为服务器上的Git仓库纯粹是为了共享,所以不让⽤户直接登录到服务器上去改⼯作区,并且服务器上的Git仓库通常都以.git结尾。然后,把owner改为git:
$ sudo chown -R git:git sample.git

第五步,禁⽤shell登录:
  出于安全考虑,第⼆步创建的git⽤户不允许登录shell,这可以通过编辑/etc/passwd⽂件
完成。找到类似下⾯的⼀⾏:
git❌1001:1001:,:/home/git:/bin/bash
改为:
git❌1001:1001:,:/home/git:/usr/bin/git-shell
  这样,git⽤户可以正常通过ssh使⽤git,但⽆法登录shell,因为我们为git⽤户指定的gitshell每次⼀登录就⾃动退出。

第六步,克隆远程仓库:
  现在,可以通过git clone命令克隆远程仓库了,在各⾃的电脑上运⾏:
$ git clone git@server:/srv/sample.git

管理公钥:小团队把每个⼈的公钥收集起来放到服务器的/home/git/.ssh/authorized_keys⽂件⾥就是可⾏的。
管理权限:Gitolite⼯具。

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值