码迷,mamicode.com
首页 > 其他好文 > 详细

Git的基本用法

时间:2018-07-15 12:28:46      阅读:201      评论:0      收藏:0      [点我收藏+]

标签:stage   stat   efs   不可   相对   本地   reset   res   读写权限   

GIT原理
工作区:git init的目录

版本库:git init文件夹下有个.git文件夹,此即版本库,其中存储了stage(或叫做index)的暂存区,这是git add后文件修改添加的地方与git为我们创建的第一个分支master,也就是说,git commit后实际是将stage中的内容提交到当前分支以及指向master的指针HEAD

版本控制原理:git内部有个HEAD指针,你所做的回退版本只是将HEAD指针指向了相应的commit,然后顺带更新了你的工作区,也就是说HEAD指向哪个commit id,版本就定位在哪里

创建本地仓库
切换至某目录(可非空)后执行

# git init

将文件纳入GIT仓库管理
# git add $filename1, $filename2

递归添加本目录下所有文件

# git add .

或使用

# git add -A

将文件提交到本地仓库
可以多次add后统一commit

# git commit -m "本次提交的信息"

查看仓库当前状态
# git status

查看已修改的文件与仓库中的不同
# git diff $filename

查看COMMIT历史
# git log

加上参数--pretty = oneline则可以看到每次commit的历史,每次commit都对应一个commit id (即版本号,是一个sha1序列)

回退到上一个版本
# git reset --hard HEAD^

将版本回退或前进(已COMMIT但回退了)到制定COMMIT
# git reset --hard $commitId

其中的commitId不需要整个序列,只需要可以和其他序列区分开的前几位就行了

查看之前的操作
# git reflog

查看工作区与版本库中最新版的区别
# git diff HEAD -- filename

如果省略了filename则比较所有文件

撤销工作区的修改,回到最近一次的ADD或COMMIT
# git checkout -- $filename

撤销暂存区的修改

#git reset HEAD $filename

删除版本库中的文件
# git rm $filename

执行删除后也是需要commit的

本地与远程GITHUB仓库互连
在github中新建仓库并添加本机Key

将本地库中的内容推送至远程库
# git push origin master

本地仓库为第一次推送的话,需要在push后加上-u参数

更新本地库至与远程库一致
# git pull origin master

查看远程仓库
# git remote

-v参数可用来显示详细信息

克隆远程库
# git clone $URL

默认克隆远程仓库origin,且克隆后本地master自动与远程master分支相对应起来

创建与切换分支
切换分支之前一定要记得先将改动提交!否则会将改动带到切换后的分支

创建并切换至该分支:

# git checkout -b $branchName

创建分支:

# git branch $branchName

切换分支:

# git checkout $branchName

查看分支
# git branch

当前分支前会有一个 *

对当前分支的修改不会直接影响到其他分支

合并分支
# git merge $branchName

当前分支内容会更新为branchName的

查看分支合并图:

# git log --graph

合并冲突
当两个分支都有新的提交时合并就会造成冲突,需要解决冲突(删一个留一个)后重新合并

禁用FAST FORWORD模式
Fast Forword模式会在合并分支并删除分支后丢掉分支信息,–no-ff参数可禁用此模式

# git merge --no-ff -m "分支信息" $branchName

该命令会在merge时生成一个commit,从而查看出分支信息

保存当前分支(不提交)
# git stash

查看当前状态:

# git stash list

恢复当前分支
恢复后不删除stash

# git stash apply

手动删除stash:

# git stash drop

恢复并删除stash:

# git stash pop

强制删除分支(COMMIT后未MERGE)
# git branch -D $branchName

抓取分支
默认抓取的是master分支,如果想要抓取其他分支,则在

# git clone $URL

后再执行:

# git checkout -b $branchName origin/$branchName

推送时:

# git push origin $branchName

标签
标签,相当于版本库中的快照,实际上是指向某commit的指针,但标签是不可移动的,tag是一个有意义的名称,与某个commit绑定在一起,创建标签后只会先存储在本地,不会自动推送到远程

在当前位置打标签:

# git tag $tagName

查看所有标签:

# git tag

打标签至某个commit:

# git tag $tagName $commitId

创建含有说明的标签:

# git tag -a $tagName -m "标签说明" $commitId

查看标签信息:

# git show $tagName

删除一个标签:

# git tag -d $tagName

推送某标签到远程:

# git push origin $tagName

推送全部标签到远程:

# git push origin --tags

删除某个远程标签,第一步,删除本地标签,第二步,删除远程标签

# git push origin :fefs/tags/$tagName

多人合作
首先,试图用

# git push origin $branchName

推送自己的分支,若推送失败,则说明远程库比本地库新,先用

# git pull

试图合并,若和并有冲突,解决冲突后再本地提交,若无冲突或解决冲突后,再次执行第一步

其他一些需要注意的:
clone的仓库要是自己github中的才有权推送,GitHub上可以fork任意仓库,fork后自己就有了该仓库的读写权限

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

忽略git目录下的某些文件有以下办法:不add也不commit该文件,配置.gitignore,gitignore文件中写入要忽略的目录名即可,以.git所在目录为根目录,比如,加入/build即可忽略buile目录

设置别名,如:

# git config --global alias.st status

后,则可以使用

# git st

来代替

# git status

–global为全局参数,即这台电脑上该用户的所有git仓库中都可用,不加–global则只对当前仓库起作用

Git的基本用法

标签:stage   stat   efs   不可   相对   本地   reset   res   读写权限   

原文地址:https://www.cnblogs.com/seliote/p/9313162.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!