您的位置:首页 > 其它

git使用详解

2015-07-11 13:22 531 查看
git是一个免费、开源的分布式版本控制系统,可以高效的对大/小项目进行版本管理。工作了一段时间,踩了一些坑以后才发现,使用git对代码和版本进行控制真的是十分必要的。本文总结了git的基础知识和常用的命令,具体内容分为如下:

一、 git基础知识。

二、git配置文件。

三、git本地工作目录操作。

四、git远程仓库。

五、git标签。

六、git分支

七、git diff管理

一、git基础知识

Git本地有三个工作区域:工作目录(Working Directory)、暂存区(Stage/Index)、资源库(Repository或Git Directory)。如果在加上远程的git仓库(Remote Directory)就可以分为四个工作区域。文件在这四个区域之间的转换关系如下:








二、git配置文件

1. git配置文件位置:
针对所有用户: /etc/gitconfig
针对当前用户: ~/.gitconfig
2. 查看配置的方法:
git config --list
3. 修改配置的方法:
git config --global user.name "username"
git config --system user.email "useremail"
git remote origin set-url "url"
4. 配置让git忽略某些文件:
可以使用.gitignore文件(gitignore文件的通配和正则类似)
gitignore文件示例:
4.1: fd1/* ---忽略目录fd1下的全部内容,会递归忽略
4.2:
/*
!.gitignore
!/fw/bin/
!/fw/sf/ ---忽略除.gitignore、fw/bin、fw/sf以外的所有文件

三、git本地工作目录操作

1. git 中文件的各个状态:

unstaged - git 仓库中没有此文件的相关记录

modified - git仓库中有这个文件的记录,并且此文件有改动

staged - git仓库追加、删除的文件被暂时保存,且这些追加删除并未提交到git仓库

commited - git追加或修改的文件被比较到本地仓库(git仓库中大部分是这种文件,所以git status并不显示这种文件)

2. git clone现有仓库:

git clone url (URL支持 git, ssh, http, https等多种协议)

3. git 查看仓库中各文件状态:

git status

4. git 初始化一个仓库
git init
5. git追加文件
git add test.c
此时有如下两种选择可选:
a. git reset HEAD test.c ---状态变回modified,恢复本地仓库中的test.c文件

b. git commit -m "my message" ---比较文件到仓库
git commit -m "my message"
6. 删除文件
git rm test.c

git rm --cache test.c ---git仓库

此时如果做如下操作:
git commit -m 'rm test.c' ---git仓库以后不再维护test.c,但当前目录仍有test.c
7. 误删除后的回复:
git log (查看各次的提交信息)
git checkout commi号 (恢复到之前的commit号的版本)
git checkout master(备份好删除文件后,再恢复到最新的状态)




四、git远程仓库

1. git查看远程仓库
1.1 简单查看远程---所有仓库
git remote (只能查看远程仓库的名字)
1.2 查看更多内容---所有仓库
git remote -v (远程仓库的名字及git地址)

1.3 查看单个仓库
git remote show [remote-branch-name]
2. 新建远程仓库:
git remote add [branchname] 2.3 后期追加tag
git log --pretty=online (查看所有commit号)
git tag -a [tag-name] [commit前几位即可]
3. 删除标签
git tag -d [tag-name]
4. 提交标签到远程仓库
git push [remote-name] --tags
ex. git push origin --tags

六、git分支

1. 查看和切换分支
git branch --- 查看所有分支及当前处于哪个分支
git branch -v/-a --- 查看所有分支的详细信息
git branch --merged --- 查看已经合并的分支
git branch --no-merged ---查看还没有合并的分支
git checkout [branch-name] --- 切换到某个分支
2. 新建分支
git branch [branch-name] --- 新建分支
git branch -b [branch-name] --- 新建分支并切换到该分支
3. 合并分支
git merge [branch-name]
.eg 将分支btest合并到主分支上
git checkout master
git merge btest
4. 删除分支
git branch -d/-D [branch-name]

七、git diff 查看文件修改

1. git log dir/file 查看当前文件夹/文件的修改

git log
-p -n 1 查看最近一次修改的详细

2.




" target=_blank>
3. 修改远程仓库:
git remote rename [oldname] [newname]
4. 删除远程仓库:
git remote rm [remote-name]
5. 获取远程仓库
5.1 获取数据
git fetch [remote-name] (获取仓库所有更新,但不自动合并当前分支)
git pull (获取仓库所有更新,并自动合并到当前分支)
5.2 上传数据
git push [remote-name] [branch]
.eg git push origin master
6. 新建远程分支
git checkout [local branch]
git remote add [remote_repo] [remote_branch]
6.1 向远程分支推送数据
git push remote_repo remote_branch ---推送数据到远程分支
git push remote_repo: remote_branch ---删除远程分支

五、git 标签

1.列出标签
1.1 查看所有tag
git tag
1.2 查看某个tag
git show [tag-name]
2. 新建tag
2.1 轻量级tag
git tag [tag-name]
2.2 带标注的tag
git tag -a [tag-name] -m "tag message"
2.3 后期追加tag
git log --pretty=online (查看所有commit号)
git tag -a [tag-name] [commit前几位即可]
3. 删除标签
git tag -d [tag-name]
4. 提交标签到远程仓库
git push [remote-name] --tags
ex. git push origin --tags

六、git分支

1. 查看和切换分支
git branch --- 查看所有分支及当前处于哪个分支
git branch -v/-a --- 查看所有分支的详细信息
git branch --merged --- 查看已经合并的分支
git branch --no-merged ---查看还没有合并的分支
git checkout [branch-name] --- 切换到某个分支
2. 新建分支
git branch [branch-name] --- 新建分支
git branch -b [branch-name] --- 新建分支并切换到该分支
3. 合并分支
git merge [branch-name]
.eg 将分支btest合并到主分支上
git checkout master
git merge btest
4. 删除分支
git branch -d/-D [branch-name]

七、git diff 查看文件修改

1. git log dir/file 查看当前文件夹/文件的修改

git log
-p -n 1 查看最近一次修改的详细

2.


[url=http://s7.51cto.com/wyfs01/M02/44/B6/wKioOVK6kfmAqNoZAAH6JrPIqao786.png]

[url=http://s7.51cto.com/wyfs01/M02/44/B6/wKioOVK6kfmAqNoZAAH6JrPIqao786.png]



八、其他常用git场景:
1. 撤销本地commit:
2. 放弃本地所有修改,包括commit和未提交的内容:
git fetch origin niepengyu
git reset --hard origin/niepengyu
3. 代码合并:
git revert commitnum — 撤销commitnum的修改,并产生一条撤销的commit记录
git reset --hard — 相当于git的HEAD变了,文件也变了。如果有文件修改未track会直接丢弃修改
git reset --soft — 相当于git的HEAD回退了,但是把文件修改放在缓存区
git reset --mixed —相当于git的HEAD变了,文件改变了,但文件并未在缓存区
HEAD ~n ---最近的n次
HEAD ^n —第n次
例如有三个commit,它们的commit顺序分别为
commit3
commit2
commit1
下面运行:
git revert HEAD 回退commit3,并产生revert commit2的记录。
git revert HEAD ~1 回退commit2,并产生revert commit2的记录。
git reset --hard HEAD ~1 撤销commit3,直接回退到commit2结束。
git reset --soft HEAD ~1 撤销commit3,把修改存储在暂存区
git reset --mixed HEAD ~1 撤销commit3,修改并未存储在暂存区
git rebase/merge
当master和mywork各自向前有多个commit以后,这时master和mywork就存在分叉了。这时如果想在mywork分支上把master分支的提交和mywork的分支合并可以使用如下命令,先把本地commit取消,并把它们临时保存为布丁,存放到.git/rebase中。
然后把mywork分支更新为最新的master分支后,再把保存的布丁应用到mywork分支上。git merge与git rebase产生的commit顺序不同。
git checkout mywork
git rebase master
git stash/ git stash pop
git stash 把当前目录和index的所有修改压入一个栈,并保留一个clean的工作状态,即处于上一次最新提交处。
git stash list 会显示这个栈list
git stash apply: 取出stash list中的上一个项目。也可以git stash apply stash@{1}

git stash drop:删除上一个,也可以指定参数删除一个项目
git stash clear: 删除所有项目
4. git merge:
git merge origin test ---把test branch的修改合并到当前分支
5. git 删除branch恢复:
慎重删除分支,一旦删除只能通过其他分支或者本地记录的commit号修复分支了。
6. git fetch与pull的区别:
git fetch相当于从远程获取并merge到本地。git pull仅相当于从远程的origin的master分支上下载到origin/master上。

7. git cherry-pick 提取某个commit号到其他的branch:
git checkout new_branch

git cherry-pick commit-id
九、正确的开发流程:
1. 基于staging/online分支,创建自己的开发分支。
2. 基于自己的开发分支修改,并提交。
3. 开发测试。
4. 提交merge request。 提交到online版本,发布。

参考文献:
1. git 的使用 http://www.cnblogs.com/wang_yb/p/3867221.html 2. 图文详解Git的使用场景:http://www.cnblogs.com/wang_yb/p/3867221.html
3. git 详解之git基础: http://www.open-open.com/lib/view/open1328069733264.html 4. git log常用命令及详解:http://www.cnblogs.com/BeginMan/p/3577553.html


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: