Git的基本用法
Posted seliote
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Git的基本用法相关的知识,希望对你有一定的参考价值。
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的基本用法的主要内容,如果未能解决你的问题,请参考以下文章