git学习

以下统一将filename代指文件名

一、创建一个版本库:  ①创建一个空目录:mkdir 目录名     ②git init  将这个目录变成git管理仓库
二、创建文件 mkdir filename
三、将文件添加到仓库(暂存区):  git add filename
四、将文件提交到仓库:           git commit -m "提交的说明"

五、
①掌握工作区状态:git status
②查看文件修改的内容:git diff
③查看工作区日志:git log  (git log --pretty=oneline   简化只输出日志码)
查看日志线:git log --graph --pretty=online --abbrev-commit
注:只有commit之后,才会有日志,出现日志码


六、回退撤销操作!!
在git中  HEAD表示当前版本,上一个版本为HEAD^ ,上上版本就是HEAD^^   
①回退到上一个版本:git reset --hard HEAD^     或     git reset --hard 日志码
②查看操作的历史命令记录: git reflog
③将修改了的文件返回到修改前的状态的方法: git checkout -- filename  
《1》修改test文件,若没有提交到暂存区,可以直接使用git checkout -- test.txt 可以将文件直接返回到修改前的状态---直接撤销工作区的修改。
《2》修改test文件,且将文件提交到暂存区(git add) : 首先将暂存去修改撤销--git reset HEAD test.txt ;再使用git checkout -- test.txt 撤销工作区的修改
④ git revert <commitid> 撤销指定的提交

七、删除操作
①从版本库中删除文件: git rm filename   
(若文件是提交到版本库中的,删除错了可以恢复:git checkout -- filename 只能恢复到文件最新版本,丢失最近一次提交后修改的内容 )

八、关联远程库
①关联远程库:git remote add origin git@github.com:账户名/远程仓库名.git
②本地提交后,也要提交到远程库: git push [-u] origin master     (第一次提交需要带参数-u,后续可不需要)
③查看远程信息: git remote -v
④根据名字删除远程库:git remote rm 仓库名

九、克隆远程库(前提条件:有一个已经存在的远程库 )
克隆一个本地库: git clone git@github.com:账户名/远程仓库名.git

十、分支管理
①查看分支:git branch
②创建分支:git branch <分支名>
③切换分支: git checkout <分支名>  或    git switch <分支名>
④创建+切换分支:git checkout -b <分支名>   或   git switch -c <分支名>
⑤合并到某分支:git merge <分支名>   
合并分支时,git会使用Fast forward 模式,但这种模式下删除分支信息,会丢掉分支信息,
因此提交的时候需要禁用该模式,采用普通模式---->git merge --no-ff -m "说明" <分支名>  
(--no-ff 普通模式合并  合并后历史有分支信息,存在历史记录)
⑥删除分支: git branch -d <分支名>
⑦ git checkout --    回退当前文件的所有改动

注:
1.创建一个分支test,在test分支中修改一个文件,但是不执行add 及commit操作 ,则返回master分支后也可以看到文件的修改
2.创建一个分支test,在test分支中修改一个文件,执行add及commit操作,返回master分支后,在master分支是看不到test分支修改的内容的。
原因:在dev分支上修改了文件,但是并没有执行git add.和git commit命令,然后切换到master分支,仍然能看到dev分支的改动现象
当我们创建一个新的分支dev,并且在新分支上修改了原文件,在我们没有提交到仓库的前提下,将分支再切换到master分支上,执行git status ,可以看到dev操作的状态:
(1)因为未add的内容不属于任何一个分支,未commit的内容也不属于任何一个分支。也就是说,对于所有分支而言,工作区和暂存区是公共的。
(2)你在dev分支修改了文件,但是你没有提交到仓库,实际上就是相当于你在本地手动修改了这个文件仓库并不能保存你做的改动,
所以在master分支能看到文件被改动了(相当于你没用dev分支直接修改了这个文件一样),所以你可以用master分支add、commit。

在dev分支上工作时(暂不想提交到暂存区),急需在master分支上改一个bug时
①将分支上的工作进行"储藏": git stash
②返回master分支,并创建一个bug分支: git switch master    git switch -c bug
③修改bug后提交(add, commit),合并 git merge --no-ff -m "fix bug" bug
④返回dev分支:git switch dev      git status
⑤返回工作区: git stash list   ---->  git stash apply stash@{0}

十一、丢弃一个没有被合并的分支: git branch -D <分支名>    强行删除

十二、远程库多人协作
①查看远程库信息: git remote -v
②推送分支(把该分支的所有本地提交推送到远程库):git push origin <分支名>[master/dev/...]
master主分支,dev开发分支都需要与远程同步!!
③创建远程(origin)的(dev)分支到本地: git checkout -b dev origin/dev    --->dev 代指分支名
④推送dev分支到远程:git push origin dev

当与小伙伴的dev分支提交有冲突时:
《1》指定本地dev分支与远程origin/dev分支的链接:git branch --set-upstream-to=origin/dev dev
《2》把最新的提交从origin/dev抓取下来:git pull
《3》抓取成功后如果存在冲突,手动解决,解决完在commit
《4》把本地dev提交到远程库:git push origin dev

十三、多人协作同一个分叉且暂未push到远程,此时查看的日志十分繁乱
把分叉的提交历史整理成一条直线:git rebase   (缺点:本地的分叉提交已经被修改了)


十四、创建标签 
注:(标签总是和某个commit挂钩,如果这个commit既出现在master分支,也出现在dev分支,那么这两个分支上都可以看到这个标签)
①查看所有标签:git tag
②找到历史提交的commit id: git log --pretty=oneline --abbrev-commit
③创建标签:git tag -a <标签名> -m "之地那个说明" <commit-id号>
标签名默认为HEAD
④展示标签:git show <标签名>

十五、删除标签
①删除只存储在本地的标签:git tag -d <标签名>
②推送某个标签到远程:git push origin <标签名>    
  一次性推送全部尚未推送到远程的本地标签:git push origin --tags
③针对已经推送到远程的仓库:
《1》先本地删除:git tag -d <标签名>
《2》再远程删除:git push origin :refs/tags/<标签名>

十六、拓展
①git rm 命令   将文件从暂存区和工作区删除
git rm filename           从暂存区河工作区中删除文件
git rm -f filename        强行从暂存区和工作区中删除修改后的文件
git rm --cached filename  把文件从暂存区移除,但仍希望保留在当前工作目录中
②git mv 命令  用于移动或重命名一个文件,目录或软链接
git mv filename 
git mv -f filename   新文件名已经存在但仍然要重命名
③git commit命令  
git commit -m [massage]  提交暂存区到本地仓库中,  -m前可跟文件名,将文件单独提交
git commit -F [massage_filename]   提交暂存区到本地仓库
git commit -a     add和commit合集
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值