git的基本操作

############ssh key及 配置信息#############

设置Git的user name和email:

$ git config --global user.name ""

$ git config --global user.email ""

生成SSH密钥过程:

1.查看是否已经有了ssh密钥:cd ~/.ssh

如果没有密钥则不会有此文件夹,有则备份删除

2.生存密钥:$ ssh-keygen -t rsa -C “邮箱”

按3个回车,密码为空

.在github上添加ssh密钥,这要添加的是“id_rsa.pub”里面的公钥

#############本地初始化一个目录为代码仓库##################

git init  初始化仓库

1、创建一个新目录作为代码仓库

2、执行 git init;

  执行之后会发现多了一个.git目录

  这就说明仓库已经初始完成

3、在github上创建一个新的代码仓库(创建对应的代码仓库)

4、git remote add origin git链接 

5、正常提交代码即可。 

########克隆一个项目#######

https  速度慢、需要输入账号和密码/ ssh 会被公司限制 两种协议

要克隆一个仓库,首先必须知道仓库的地址,后使用git clone命令克隆然。

git clone git链接

Git支持多种协议,包括https,但通过ssh支持的原生git协议速度最快。

git clone git https链接

or

git clone git链接

通常推荐大家直接git clone 一个项目的方式来创建本地的代码仓库!

演示一下在github上如何创建一个代码仓库!!!

###############创建分支################

Git鼓励大量使用分支:

创建分支:git branch <name> (默认当前所在分支为基础分支,可以指定其它分支)

切换分支:git checkout <name>

创建+切换分支:git checkout -b <name> <基础分支名称>(origin/master)

提交刚创建的分支:git push origin branch-name

更新分支:Git pull origin branchname  or Git fetch origin branchname  git merge --no-ff 目标分支

合并某分支到当前分支:git merge --no-ff <branch1分支名称>(把分支branch1合并到当前分支上)

git merege (fast forward  and --no-ff )

通常,合并分支时,如果可能,Git会用Fast forward模式,但这种模式下,删除分支后,会丢掉分支信息。

如果要强制禁用Fast forward模式,Git就会在merge时生成一个新的commit,这样,从分支历史上就可以看出分支信息

请注意--no-ff参数,表示禁用Fast forward请注意--no-ff参数,表示禁用Fast forward

git merge --no-ff -m "merge with no-ff" dev

因为本次合并要创建一个新的commit,所以加上-m参数,把commit描述写进去

查看本地分支:git branch  or git branch -l

查看远程分支:git branch -r

查看所有分支(本地+远程):git branch -a

带*的分支为当前工作的分支

删除本地分支:

git branch -d branchnamne

or

git branch -D  branchname 强制删除

删除远程分支:

Git push origin --delete branchname (删除远端分支branchname)

Git push origin :branchname (直接删除远端分支branchname)

获取远程仓库的分支(本地没有的分支)

git pull origin $branch:$branch

实例:git pull  origin  branchname:branchname

############git commit####################

git commit -m''  只会提交已经git add过的文件(包括新增、修改、删除等所有修改操作)

git commit -a -m'' 会提交除新增未add的文件之外的所有修改操作

#############git diff ####################

Git diff  filename  显示本地文件修改的内容同版本库的差别

Git diff  branchone  branchtwo  对比两个branch不同之处

Git diff  tagone  tagtwo    对比两个tag 不同之处

########删除文件###########

在本地直接删除文件

1、rm  file  (工作区中文件删除)

2、git add file (文件删除的状态添加到暂存区中)

3、git commit  (提交文件删除的状态到本地的版本库中)

以上三步可以缩减为两步:

1、git rm file (直接把删除的文件添加到暂存区中)

2、git commit  (提交文件删除的状态到本地的版本库中)

#############删除文件###############

1、git rm filename  然后 git commit 即可

2、rm filename  / git add  / git commit

git rm filename 就是 rm filename 的简化版

########查看当前工作区修改状态#######

git status;

要随时掌握工作区的状态,

使用git status命令

如果git status告诉你有文件被修改过,

用git diff可以查看修改内容。

git diff 默认查看所有被修改过的文件(不包括新增未add的文件)

git diff filename (查看具体某个文件的修改内容 )

###########查看log记录#####

git log  默认列出之前提交过记录(根据提交时间由近到远排列)

git log -n  列出指定提交次数的记录

git log --pretty=oneline  列出简单记录信息(commitid 和 提交注释)

git reflog -n 查看指定次数的提交操作的记录信息(commitid)

log  and  reflog

两者都是查看所有的commit操作的记录,log查看不到reset回退时跳过的commit操作的commitid

(可以夸版本回退一次,进行实际演示)

git log

git reflog

git reset --hard commitid

git log

git reflog

git log  --graph  可以查看分支合并图

#########撤回和回滚#######

1、在工作区内修改了文件但没有提交到暂存区撤销所有修改:

git checkout -- file.name  可以丢弃工作区的修改 ,只针对已跟踪的文件

git checkout -- file        命令中的--很重要,没有--,就变成了“切换到另一个分支”的命令

2、文件已经添加到暂存区撤回:

git reset HEAD file

or

git rm --cached filename

3、文件已经提交到了本地的版本库且未推向远端的版本库中:

git reset --hard HEAD~n

or

git reset --hard commitid(推荐)

HEAD 表示提交的最新版本。HEAD^表示上一个版本,HEAD^^表示上上个版本。HEAD~100表示往上100个版本。

(上两个版本 HEAD~2)

4、文件已经从本地仓库推倒远程仓库的回退

  git log  or git reflog 找到目标版本

  git reset --hard commitid

  git push -f origin master  (-f 参数是强制覆盖的意思,没有该参数会推送失败,因为远程仓库的版本高于当前版本)


  git revert commitid



git revert 是生成一个新的提交来撤销某次提交,此次提交之前的commit都会被保留

git reset 是回到某次提交,提交及之前的commit都会被保留,但是此次之后的修改都会被退回到暂存区


团队开发时,版本回退一定要通知其他人员!如果其他同事在每次提交前没有先更细后提交的意识或习惯的话,回退是白费功夫。

http://yijiebuyi.com/blog/8f985d539566d0bf3b804df6be4e0c90.html

######################状态冻结####################

git stash      冻结当前修改状态

git  stash list  列出总结列表

git  stash pop  可以按版本恢复某个冻结状态并删除

git  stash apply  只是按某个版本恢复某个冻结状态不删除

git  stash drop    删除指定某个冻结状态

####################tag管理#####################

创建tag:

git tag -a tagname  -m “添加tag的描述信息”  (tag要有个规则标识例如:feature_abc_v1.1 ,给当前分支打一个tag名为tagname)

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

提交创建的tag:

git push origin tagname (同提交分支操作一样)

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

查看tag:

git tag 

or

git tag -l

查看标签的具体信息:

git show tag-name

删除标签:

Git tag -d tagname (本地删除)

Git push orign (空格):refs/tags/tagname (把删除的tag提交到远端)

删除标签实例:

git tag -d v0.9

git push origin :refs/tags/v0.9

获取远程仓库的tag信息(本地没有)

git fetch origin tag $tag

##########同远程仓库关联#########

查看当前代码关联的远程仓库信息

git remote  直接回车,列出所有关联的远程仓库

git remote -v  回车 列出每个远程仓库名及对应的仓库地址url

git remote add [shortname] [url]: 添加同一个远程仓库的关联关系

git remote remove shortname : 删除同一个远程仓库的关联关系

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

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

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

分布式版本系统的最大好处之一是在本地工作完全不需要考虑远程库的存在,也就是有没有联网都可以正常工作,而SVN在没有联网的时候是拒绝干活的!

当有网络的时候,再把本地提交推送一下就完成了同步,真是太方便了!

 .gitignore规则不生效的解决办法

把某些目录或文件加入忽略规则,按照上述方法定义后发现并未生效,原因是.gitignore只能忽略那些原来没有被追踪的文件,如果某些文件已经被纳入了版本管理中,则修改.gitignore是无效的。那么解决方法就是先把本地缓存删除(改变成未被追踪状态),然后再提交:

git rm -r --cached .

git add .

git commit -m 'update .gitignore'

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,084评论 6 503
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,623评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,450评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,322评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,370评论 6 390
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,274评论 1 300
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,126评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,980评论 0 275
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,414评论 1 313
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,599评论 3 334
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,773评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,470评论 5 344
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,080评论 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,713评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,852评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,865评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,689评论 2 354

推荐阅读更多精彩内容

  • 1、直接克隆远程仓库的某个分支 git clone -b 远程分支名 远程仓库地址 本地文件夹名 如...
    曹轩跃阅读 637评论 0 1
  • 第一部分:Git的基本操作 初始化操作 $ git config -global user.name #设置提交...
    庄欲以莘阅读 1,904评论 0 4
  • git的基本操作 Git 的工作就是创建和保存你项目的快照及与之后的快照进行对比。 1.获取与创建项目命令git ...
    初夏凉雨阅读 270评论 0 1
  • 1. GIT命令 git init在本地新建一个repo,进入一个项目目录,执行git init,会初始化一个re...
    江边一蓑烟阅读 799评论 0 0
  • 这篇博文是自己在学习git过程中的思考总结。本文仅仅代表个人的看法,如有不妥地方还请本文文末留言。 😊 原文链接g...
    Ming_Hu阅读 1,075评论 4 18