Git的基本使用

Git基本使用

git添加用户

git config --global user.name "Your name"
git config --global user.email "Your email"

创建版本库

$ git init
Initialized empty Git repository in /Users/michael/learngit/.git/

里面有个.git的目录,这个目录是Git来跟踪管理版本库的,不要改动里面的文件否则改乱了,就把git仓库破坏了。

git添加文件

$ git add readme.txt

git提交文件

$ git commit -m "wrote a readme file"

git显示历史记录

$ git log
commit 3628164fb26d48395383f8f31179f24e0882e1e0
Author: Michael Liao <askxuefeng@gmail.com>
Date:   Tue Aug 20 15:11:49 2013 +0800

    append GPL

commit ea34578d5496d7dd233c827ed32a8cd576c5ee85
Author: Michael Liao <askxuefeng@gmail.com>
Date:   Tue Aug 20 14:53:12 2013 +0800

    add distributed

commit cb926e7ea50ad11b8f9e909c05226233bf755030
Author: Michael Liao <askxuefeng@gmail.com>
Date:   Mon Aug 19 17:51:55 2013 +0800

    wrote a readme file

使用 –pretty=oneline 参数来精简显示

$ git log --pretty=oneline
3628164fb26d48395383f8f31179f24e0882e1e0 append GPL
ea34578d5496d7dd233c827ed32a8cd576c5ee85 add distributed
cb926e7ea50ad11b8f9e909c05226233bf755030 wrote a readme file

版本回退

Git中HEAD表示当前版本,上一个版本是HEAD^,上上一个版本是HEAD^^,当版本在前面比较多的时候,可以写成HEAD~100

下面这个命令表示回到上一个版本

$ git reset --hard HEAD^
HEAD is now at ea34578 add distributed

版本前进

如果你想回到后来的版本可以使用两种方法,当你的命令行窗口还没有关掉的时候
先找到未来版本号的commit id,比如说3628164…(不用全部写出来,git会自动搜索)

$ git reset --hard 3628164
HEAD is now at 3628164 append GPL

第二种也是最靠谱的方法是使用git reflog来查看历史命令

$ git reflog
ea34578 HEAD@{0}: reset: moving to HEAD^
3628164 HEAD@{1}: commit: append GPL
ea34578 HEAD@{2}: commit: add distributed
cb926e7 HEAD@{3}: commit (initial): wrote a readme file

我们可以通过历史记录来完成搜索

.git的工作原理

  • 第一步,使用git add把文件加入暂存区
    first
  • 第二步,使用git commit提交更改,实际上就是把暂存区的所有内容提交到当前分支
    second
  • git跟踪的是文件的修改,而不是文件。只有当文件被add到缓存区的时候,被commit后才会提交更改。

git撤销修改

    git checkout -- file

git删除文件

git rm file
git commit -m 'rm file'

git远程仓库(远程同步到本地,推荐)

在github上新建一个repository,然后git clone
git clone可以克隆https协议的,也可以说是
git clone git@github.com:54BayMax/gitskills.git

GitHub给出的地址不止一个,还可以用https://github.com/michaelliao/gitskills.git这样的地址。实际上,Git支持多种协议,默认的git://使用ssh,但也可以使用https等其他协议。
使用https除了速度慢以外,还有个最大的麻烦是每次推送都必须输入口令,但是在某些只开放http端口的公司内部就无法使用ssh协议而只能用https。

git远程仓库(本地同步到远程)

  1. 创建SSH Key。在home目录下看看有没有.ssh目录,如果有再看看里面是否有id_rsa和id_rsa.pub两个文件。如果没有运行以下命令:
ssh-keygen -t rsa -C "yourname@example.com"

如果顺利的话会在home目录下面产生.ssh文件,里面有id_rsa和id_ras.pub两个文件

2.登录github,在account settings里面SSH Keys页面:点“Add SSH Key”,填上任意title,在文本框里面把id_rsa.pub文件里面的内容给拷贝进去.

3.创建一个新的repository,然后使用如下命令

git remote add origin git@github.com:54BayMax/learngit.git

现在origin这个库就是我们的远程库

4.第一次同步远程

git push -u origin master

使用了-u参数不仅会同步所有的文件还会把本地的master分支和远程的master分支连接起来,用来简化以后的操作

5.以后同步

git push origin master

git创建与合并分支

  • 查看分支:git branch
  • 创建分支:git branch
  • 切换分支:git checkout
  • 创建+切换分支:git checkout -b
  • 合并某分支到当前分支:git merge
  • 删除分支:git branch -d

git解决冲突

当两个或者两个以上的分支对同一个文件进行更改的时候,并且各自都添加并且提交的时候,可能会发生冲突,这个时候我们就需要解决冲突。我们应该打开产生冲突的文件,然后进行更改后再提交。这样合并才会完成。

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

git分支管理策略

通常,分支合并时,如果可能,Git会用Fast forward模式,但这种模式下,删除分支后,就会丢到分支信息。如果要强制禁用Fast forward模式,git就会在**merge的时候生成一个新的commit
,这样就可以在分至历史上查看分支信息**。

master是非常稳定的,一般用来发布大版本。我们在dev分支上干活,dev分支是不稳定的,到某个时候,比如1.0版本发布的时候,再把dev分支合并到master分支上,在master分支发布1.0版本。你和你的小伙伴每个人都在dev分支上干活,每个人都有自己的分支,时不时的往dev分支上合并就好了。合并分支时,加上–no-ff参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并,而fast forward合并就看不出来曾经做过合并。
git

bug分支

假设我们我们需要修复一个bug,bug代码issue-101,那么我们需要做的首先是创建一个分支,用这个临时分支去修复代码。那么假如我们现在的分支上的任务还没有结束怎么办?
可以使用git stash这个命令,把工作现场保存

$ git stash
Saved working directory and index state WIP on dev: 6224937 add merge
HEAD is now at 6224937 add merge

等我们回来后可以通过git stash list来看工作现场

$ git stash list
stash@{0}: WIP on dev: 6224937 add merge

恢复工作现场有以下两个方法:
1. git stash pop,恢复的同时把stash的内容也删了
2. git stash apply恢复,但是stash的内容并不会删除,需要git stash drop来删除

git stash apply stash@{0}

Feature分支

对于新特性,我们最好需要建立一个feature分支,写完后合并到dev分支。如果没用了可以通过git branch -D feature强行删除

多人协作

  • 通过==git remote -v==来查看远程库信息
  • 通过git push origin master或者dev来推送分支
  • master分支是主分支,因此要时刻与远程同步;
  • dev分支是开发分支,团队所有成员都需要在上面工作,所以也需要与远程同步;
  • bug分支只用于在本地修复bug,就没必要推到远程了,除非老板要看看你每周到底修复了几个bug;
  • feature分支是否推到远程,取决于你是否和你的小伙伴合作在上面开发。
  • 把本地的分支同步到远程,==git push origin dev==,如果失败先用==git pull==抓取远程的新提交
  • 本地新建的分支如果不推送到远程,对其他人就是不可见的。
  • 在本地创建和远程分支对应的分支,使用==git checkout -b branch-name origin/branch-name==,本地分支最好和远程分支一样。

打标签

  • git tag 用于新建一个标签,默认为HEAD,也可以指定commit id
  • git tag -a -m “balbal” 可以指定标签信息
  • git tag -s -m “balbal” key 可以指定私钥
  • git tag查看所有标签
  • git tag -d 删除标签
  • git push origin 推送标签到远程
  • git push origin –tags 推送所有标签
  • git push origin :refs/tags/可以删除一个远程标签(前提是先把本地标签删除)

github仓库

  • 在github上可以任意fork开源仓库
  • 自己可以拥有fork后的仓库的读写权限
  • 可以推送pull request来给官方贡献自己的代码

git使用码云

除了使用github外,还可以使用国内的其它代码托管平台,比如码云,和GitHub相比,码云也提供免费的Git仓库,并且,免费版本还包含私有库。此外,还集成了代码质量检测、项目演示等功能。对于团队协作开发,码云还提供了项目管理、代码托管、文档管理的服务,5人以下小团队免费,而且速度也比github要快。


  • git remote rm origin 删除远程仓库
  • git remote add git@github.com:xxx来添加远程库
  • git push github master来推送到远程库

我们可以这样来使用,添加两个远程库,一个是github一个是gitee,然后到时候看情况分别推送.
git remote add github git@github.com:54BayMax/learngit.git
git remote add gitee git@gitee.com:loveyyp/learngit.git
git push github master
git push gitee master

git 忽略特殊文件

当git不需要追踪某个类型的文件的时候,可以建一个.ignore文件,然后在里面写上你要忽略跟踪的文件。

# Windows:
# 缩略图文件,桌面文件
Thumbs.db
ehthumbs.db
Desktop.ini
# pyc文件,so文件,dist,build文件夹
# Python: 
*.py[cod]
*.so
*.egg
*.egg-info
dist
build
# My configurations:
db.ini
deploy_key_rsa

git配置别名

使用别名来代替原来的github命令

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.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"

然后使用git lg的效果
lg

搭建GIT服务器

链接

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值