git 学习记录

闲来无事就学习了下git 

linux 下安装 git
yum install git

创建版本库
创建一个git项目的文件夹
mkdir gitdata
git init

git status //仓库当前的状态
git diff readme.txt //文件修改了哪些内容
git log //查看提交的记录

回到上一个版本
先用 git log 查看 版本
git reset --hard HEAD^
回到任意一个版本 commit_id : 01a3b33d94154c22b6d59bbeebd28d9b5ba094e8
git reset --hard 01a3b33d94154c22b6d59bbeebd28d9b5ba094e8
回到上上个版本
git reset --hard HEAD^^ 或者 git reset --hard HEAD~2

git reflog  //记录使用过的每一行命令

当修改了文件还没提交的时候
git checkout -- readme.txt  //取消文件的修改
命令git checkout -- readme.txt意思就是,把readme.txt文件在工作区的修改全部撤销,

当修改文件 并且git add 但是没提交的情况下
git reset HEAD readme.txt    把暂存区的文件回退到工作区
git reset --hard HEAD^ 把文件回退到上一个版本
或者丢弃工作区的修改
git checkout -- readme.txt


删除文件
git rm del.txt
git commit -m "del"
当误删除文件了 恢复上一个版本即可
git reset --hard HEAD^


在git服务器上创建 远程仓库
创建ssh key
ssh-keygen -t rsa -C "sgravity@163.com"
然后一路默认下去 不需要填密码 和 帐号
设置->ssh keys 把id_rsa.pub 里面的内容添加到后台

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

然后在本地的git下运行命名
git remote add origin https://github.com/sgravity/gitdata.git    关联一个远程库
git push -u origin master    //第一次推送master分支的所有内容
git push origin master    //推送最新修改


在git上克隆一个下来
首先创建一个git仓库
然后在需要的目录下 比如我是在 /home/git/ 下运行
git clone git@github.com:sgravity/gitclone.git ./
然后就克隆下来了 如果有新文件的存在
git add .
git commit -m "sss"
git push origin master

window 下同样的道理
右键 git bash


创建git分支
git checkout -b dev    创建并切换到dev分支
or
git branch dev    //创建dev分支
git checkout dev  //切换到dev分支

用git branch命令查看当前分支
git branch命令会列出所有分支,当前分支前面会标一个*号。

然后,我们就可以在dev分支上正常提交,比如对readme.txt做个修改,加上一行:
然后提交:
现在,dev分支的工作完成,我们就可以切换回master分支:
切换回master分支后,再查看一个readme.txt文件,刚才添加的内容不见了!因为那个提交是在dev分支上,而master分支此刻的提交点并没有变:

现在,我们把dev分支的工作成果合并到master分支上
在master的分支下面做合并
git merge dev
合并完成 然后删除dev分支
git branch -d dev
因为创建、合并和删除分支非常快,所以Git鼓励你使用分支完成某个任务,合并后再删掉分支,这和直接在master分支上工作效果是一样的,但过程更安全。
Git鼓励大量使用分支:
查看分支:git branch
创建分支:git branch name
切换分支:git checkout name
创建+切换分支:git checkout -b name
合并某分支到当前分支:git merge name
删除分支:git branch -d name


bug分支
git status
git checkout dev
git stash    //以把当前工作现场“储藏”起来,等以后恢复现场后继续工作
git checkout master
git checkout -b bug001
vim xxx.txt
git add xxx.txt
git commit -m "bug" xxx.txt    //提交修改完成的bug
git merge --no-ff -m "bug ok " bug001
git branch -d bug001    //删除bug分支
git stash list    //查看储藏起来的工作库
恢复工作库
1:git stash apply stash@{0}
   git stash drop stash@{0}
2: git stash pop stash@{0}    //直接从git stash 列表里面删除储藏的工作库


修复bug时,我们会通过创建新的bug分支进行修复,然后合并,最后删除;
简单来说 就是在开发途中 当手头工作没有完成时,并且不想合并分支的情况下 先把工作现场git stash(隐藏)一下,然后去修复bug,修复后,再git stash pop,回到工作现场。

强行删除分支 在分支没有合并的情况下
git branch -D feature-vulcan


多人协作
git pull //获取git服务器上最新的代码 相当于 svn up
要查看远程库的信息,用git remote -v :
$ git remote -v
origin  git@github.com:michaelliao/learngit.git (fetch)
origin  git@github.com:michaelliao/learngit.git (push)
上面显示了可以抓取和推送的origin的地址。如果没有推送权限,就看不到push的地址。
推送分支
$ git push origin master
如果要推送其他分支,比如dev,就改成:
$ git push origin dev
但是,并不是一定要把本地分支往远程推送,那么,哪些分支需要推送,哪些不需要呢?
    master分支是主分支,因此要时刻与远程同步;
    dev分支是开发分支,团队所有成员都需要在上面工作,所以也需要与远程同步;
    bug分支只用于在本地修复bug,就没必要推到远程了,除非老板要看看你每周到底修复了几个bug;
    feature分支是否推到远程,取决于你是否和你的小伙伴合作在上面开发。

当另一台机器开发一个分支的时候
先创建自己本地分支 同时和服务器的分支关联起来
git checkout -b dev origin/dev
在开发分支的时候 最好先用
git branch --set-upstream dev origin/dev  //本地dev分支与远程origin/dev分支的链接 设置dev和origin/dev的链接
git pull //最新的提交从origin/dev抓下
因此,多人协作的工作模式通常是这样:
    首先,可以试图用git push origin branch-name推送自己的修改;
    如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并;
    如果合并有冲突,则解决冲突,并在本地提交;
    没有冲突或者解决掉冲突后,再用git push origin branch-name推送就能成功!
如果git pull提示“no tracking information”,则说明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream branch-name origin/branch-name。

git标签
git tag v1.0
git push origin v1.0    //推送标签
git push origin --tag //一次性推送全部尚未推送到远程的本地标签
    命令git tag name用于新建一个标签,默认为HEAD,也可以指定一个commit id;
    -a tagname -m "blablabla..."可以指定标签信息;
    -s tagname -m "blablabla..."可以用PGP签名标签;
    命令git tag可以查看所有标签;
git log --pretty=oneline --abbrev-commit    //查看历史提交记录

    命令git push origin tagname可以推送一个本地标签;
    命令git push origin --tags可以推送全部未推送过的本地标签;
    命令git tag -d tagname可以删除一个本地标签;
    命令git push origin :refs/tags/tagname可以删除一个远程标签。

git忽略特殊文件
在Git工作区的根目录下创建一个特殊的.gitignore文件,然后把要忽略的文件名填进去,Git就会自动忽略这些文件。
然后把.gitignore提交到远程仓库 这样大家都能看到 并且修改了

当你敲入命令:
$ git unstage test.py
实际上Git执行的是:
$ git reset HEAD test.py
配置一个git last,让其显示最后一次提交信息:
$ git config --global alias.last 'log -1'


linux 搭建git服务器
ssh 模式 各种需要输入密码 所以使用 git 模式
安装git-daemon
yum install git  git-daemon
cd /home/
mkdir git
chown -R git:git git/
开启git服务 放到后台运行    --base-path git的目录
/usr/bin/git daemon --base-path=/home/git/ --export-all --enable=upload-pack --enable=upload-archive --enable=receive-pack --user=root &
cd git
在git里面创建一个仓库
git init --bare project.git
chown -R git:git project.git
在客户端上clone这个仓库    因为之前指定了 git 的目录 所以这里不需要在写了 要不然会报错
sudo git clone git://5x.8x.1xx.1xx/project.git    ./
如果出现端口错误的话
vim ~/.ssh/config
Port 7710    //重新指定下端口


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值