git的使用介绍

来源:互联网 发布:知乎精华故事 编辑:程序博客网 时间:2024/06/05 21:04

git 的使用

[参考廖雪峰的链接](https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/0013743256916071d599b3aed534aaab22a0db6c4e07fd0000)

对github的理解:

GitHub就是一个免费托管开源代码的远程仓库。但是对于某些视源代码如生命的商业公司来说,既不想公开源代码,又舍不得给GitHub交保护费,那就只能自己搭建一台Git服务器作为私有仓库使用。


创建版本库
git init /Users/michael/learngit

文件添加到仓库
git add readme.txt
git commit -m “wrote a readme file”


本文具体讲git操作的命令


要关联一个远程库,使用命令git remote add origin git@server-name:path/repo-name.git
origin 默认的远程库的别名

关联后,使用命令git push -u origin master第一次推送master分支的所有内容;

此后,每次本地提交后,只要有必要,就可以使用命令git push origin master推送最新修改;


克隆一份到本地仓库:默认为master分支
git clone git@github.com:michaelliao/gitskills.git


分支管理

查看分支:git branch

创建分支:git branch name

切换分支:git checkout name

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

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

删除分支:git branch -d name


解决分支冲突
git status也可以告诉我们冲突的文件
Git用<<<<<<<,=======,>>>>>>>标记出不同分支的内容
在主分支上提交
git add readme.txt
git commit -m "conflict fixed"

用带参数的git log也可以看到分支的合并情况
git log --graph --pretty=oneline --abbrev-commit

删除feature1分支
git branch -d 分支名


分支策略

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

首先,master分支应该是非常稳定的,也就是仅用来发布新版本,平时不能在上面干活;
git merge --no-ff -m "merge with no-ff" dev
合并分支时,加上–no-ff参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并,而fast forward合并就看不出来曾经做过合并。


忽略某些文件时,需要编写.gitignore文件;
.gitignore文件本身要放到版本库里,并且可以对.gitignore做版本管理!


工作流程:

当你从远程仓库克隆时,实际上Git自动把本地的master分支和远程的master分支对应起来了,并且,远程仓库的默认名称是origin
要查看远程库的信息,用git remote -v
1. git clone git@github.com:michaelliao/learngit.git
2. 现在,你的小伙伴要在dev分支上开发,就必须创建远程origin的dev分支到本地,于是他用这个命令创建本地dev分支:
git checkout -b dev origin/dev
3. 推送分支
git add hello.py
git commit -m "add coding: utf-8"
git push origin dev
4.分支冲突,推送失败
先用git pull把最新的提交从origin/dev抓下来,然后,在本地合并,解决冲突,再推送:
指定本地dev分支与远程origin/dev分支的链接
git branch --set-upstream dev origin/dev
git pull
git add hello.py
git commit -m "add coding: utf-8"
git push origin dev


版本回退
(一旦你把文件改乱了,或者误删了文件,还可以从最近的一个commit恢复,然后继续工作)
git log –pretty=oneline命令显示从最近到最远的提交日志
在Git中,用HEAD表示当前版本,上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100,例如:
git reset –hard HEAD^
git reset –hard 3628164
Git提供了一个命令git reflog用来记录你的每一次命令

Git是用来管理修改的,每次修改,如果不add到暂存区,那就不会加入到commit中
git checkout – readme.txt用来让这个文件回到最近一次git commit或git add时的状态
git rm用于删除一个文件

Git fetch vs git pull都是从远程拉取代码到本地,git fetch只是拉取到本地,git pull不仅拉取到本地还merge到本地分支中。所以git pull是git fetch与git merge的集合体。

一般我们把别的分支合并到master时用merge,而把master合并到别的分支时会用到rebase的原因,这是因为master分支一般commit会比较频繁。

原创粉丝点击