您的位置:首页 > 其它

git-总结

2016-01-26 09:43 260 查看

安装git

查看git是否安装

git
The program 'git' is currently not installed. You can install it by typing:
sudo apt-get install git
安装git
sudo apt-get install git

创建版本库

mkdir learngit
cd learngit
git init

添加文件到git仓库,分两步

第一步:git add <file>
第二步:git commit -m "description information"

git add --all
git add 命令的all参数,表示保存所有变化(包括新建、修改和删除)。从git 2.0开始,all是git add的默认参数,所以也可以用git add . 代替

查看当前git仓库状态

git status
查看修改后的文件跟原先有什么不同
git diff <file>

显示从最近到最远的提交日志
git log
git log --pretty=oneline

版本回退

git reset --hard HEAD^

版本回退到某个版本
git reset --hard 3628164

git是跟踪修改的,每次修改如果不add到暂存区,就不会加入到commit中

撤销修改

git checkout -- file
命令git checkout -- readme.txt 的意思是,把readme.txt文件在工作区的修改全部撤销,这里有两种情况
一种是readme.txt自修改后还没被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;
一种是readme.txt已经添加到暂存区,后又作了修改,现在,撤销修改就回到了添加到暂存区后的状态;
总之,就是让这个文件回到最近一次git commit 或git add的状态。

删除文件

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

远程仓库

创建ssh key   

   ssh-keygen -t rsa -C "1126785053@qq.com"

登录Github,打开Account settings

   Add SSH Key

添加远程仓库

git remote add origin git@github.com:liruizhong/learngit.git
git push -u origin master
git push origin master

克隆一个远程仓库到本地

git clone git@github.com:liruizhong/gitskill.git

分支管理

创建与合并分支

创建一个dev分支,然后切换到dev分支

git checkout -b dev

  等同于

git branch dev
git checkout dev

查看当前分支

git branch
*dev
master
当前分支前会标一个*号

合并指定分支到当前分支

git merge dev

删除分支,此处以删除dev为例

git branch -d dev

小结

查看分支:git branch

创建分支:git branch

切换分支:git checkout

创建+切换分支:git checkout -b

合并某分支到当前分支:git merge

删除分支:git branch -d

解决冲突

git log --graph --pretty=oneline --abbrev-commit 可以查看到分支合并图

分支管理策略

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

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

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

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

小结

Git分支十分强大,在团队开发中应该充分应用

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

DUG分支

去修复bug前,将当前工作去储存 git stash

然后切换到要修复bug的分支git checkout master

创建临时分区修复bug :git checkout -b issue-101

修复完成提交:git add readme.txt git commit -m "fix bug issue-101"

切换回主分支:git checkout master

将issue-101分支合并到主分支:git merge --no-ff -m "merged bug fix 101" issue-101

删除临时分支issue-101:git branch -d issue-101

然后切换回原工作区:git checkout dev

查看自己当时的储存工作现场:git stash list

恢复工作现场:

一种方法: git stash apply stash@{0} git stash drop

另一种方法:git stash pop

Feature分支

小结:

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

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

多人协作

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

首先,可以试图用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 remote -v

本地新建的分支如果不推送到远程,对其他人就是不可见的

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

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

建立本地分支和远程分支的关联,使用git branch --set-upsream branch-name origin/branch-name

从远程抓取分支,使用git pull,如果有冲突,要先处理冲突。

标签管理

创建标签

小结

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

git tag -a -m "blablabla..." 可以指定标签信息;

git tag -s -m "blablabla..." 可以用PGP签名标签;

命令git tag 可以查看所有标签;

操作标签

小结

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

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

命令git tag -d 可以删除一个本地标签;

命令git push origin :refs/tags/可以删除一个远程标签

使用GitHub

小结

在GitHub上,可以任意Fork开源仓库;

自己拥有Fork后的仓库的读写权限;

可以推送pull request给官方仓库来贡献代码。

忽略特殊文件

小结

忽略某些文件时,需要编写.gitignore;

.gitignore文件本身要放到版本库里,并且可以对.gitinore做版本管理!

配置别名

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"

配置文件

$ cat .git/config
[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
ignorecase = true
precomposeunicode = true
[remote "origin"]
url = git@github.com:michaelliao/learngit.git
fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
remote = origin
merge = refs/heads/master
[alias]
last = log -1

$ cat .gitconfig
[alias]
co = checkout
ci = commit
br = branch
st = status
[user]
name = Your Name
email = your@email.com
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: