Git总结

1.初始化本地Git仓库: git init
2.添加文件到Git本地仓库: git add 文件名.扩展名
3.提交到Git本地仓库: git commit
4.查看Git本地仓库状态: git status
6.查看某个文件的修改: git diff 文件名.扩展名
   查看某个文件的内容: cat 文件名.扩展名
7.拉取当前分支远程最新代码: git pull 
  如果拉取失败,报There is no tracking information for the current branch错误,是因为没有指定本地分支与远程origin/分支名的链接,则创建链接关系:
git branch --set-upstream 本地分支名 origin/远程分支名
  前提是在本地创建和远程分支对应的分支,本地和远程分支的名字最好一致:
git checkout -b 本地分支名 origin/远程分支名

  注:创建本地分支 + 创建链接关系 = 第8条中的 git checkout --track origin/分支名


8.克隆远程项目:
git clone 项目地址
   在克隆仓库时,Git会自动在本地创建一个master分支来跟踪origin/master,故默认情况下,只能看到本地的master分支,如果需要创建并关联不同的分支,用:
git checkout --track origin/分支名


9.查看commit提交(从最近到最远)历史:
git log git log --pretty=oneline
   查看所有命令(从最近到最远)历史(包含commit和reset等):
git reflog
   查看分支合并图:
git log --graph --pretty=oneline --abbrev-commit

10.时光机(HEAD表示当前版本, 回退的实质是将HEAD指针指向某个commit_id,然后顺便把工作区的文件更新了):
git reset --hard HEAD^ 回退到当前版本的上一个版本
git reset --hard HEAD^^ 回退到当前版本的上上一个版本
git reset --hard HEAD~100 当然往上100个版本写100个^容易数不过来,所以写成HEAD~100
git reset --hard 某个commit_id(可以只写前几位,但要确保唯一性) 回退到指定版本

     注:使用该命令的前提是还没有把自己的本地版本库push到远程
   
11.创建标签(由于commit_id不直观,故用标签与commit_id唯一对应,默认标签是打在当前分支的最新提交commit上)
给当前分支最新commit_id创建标签: git tag 标签名
给指定commit_id创建带有说明的标签: git tag -a 标签名 -m "说明文字" commit_id
查看标签列表(不是按时间顺序列出,而是按字母排序): git tag
查看标签详细信息: git show 标签名

还可以通过-s用私钥签名一个标签: git tag -s 标签名 -m "说明文字" commit_id
签名采用PGP签名,故必须先安装GnuPG,如果没有找到GnuPG,或者没有GnuPG密钥对,就会报错,用PGP签名的标签是不可伪造的

12.操作标签
删除标签: git tag -d 标签名 (因为创建的标签都只存储在本地,不会自动推送到远程。故打错的标签可以在本地安全删除)
推送某个标签到远程: git push origin 标签名
推送全部尚未推送到远程的本地标签: git push origin --tags

如果标签已经推送到远程,要删除远程标签就麻烦一点,先从本地删除:
git tag -d 标签名
然后,从远程删除,但是格式如下:
git push origin :refs/tags/标签名


11.概念:
工作区: clone下来的在本地的文件目录
版本库: 工作区中的隐藏目录.git
暂存区: 版本库(.git)中的index(或stage)文件

注: 新建仓库时,Git会为我们自动创建第一个分支master, 以及指向master的HEAD指针, 故
git add   实际上就是把文件修改添加到暂存区(index)
git commit实际上就是把暂存区的所有内容提交到当前分支(HEAD指向的分支), 并清空暂存区, 方便下次add


12.撤销修改: git checkout -- 文件名.扩展名
1.一种是该文件在工作区修改后还没有被add到暂存区,现在,撤销修改就回到和版本库一模一样的状态;
2.一种是该文件已经add到暂存区后,再修改,现在,撤销修改就回到add到暂存区后的状态
总之,就是让这个文件回到最近一次commit或add后的状态, 其实质是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”

注:该命令中的 -- 很重要,若没有,就变成了“切换到另一个分支”的命令

13.撤销add: 即把add到暂存区的文件重新放回到工作区(unstage), 若还需要继续撤销工作区的修改,则用"第九"命令
git reset HEAD 文件名.扩展名

14.创建,关联,推送远程仓库
1.首先在远程(Github或Gitlab等)创建一个空仓库
2.在本地仓库的命令行中: 
git remote add origin https://github.com/Sprout4188/testRepository.git
其中Sprout4188为自己Github帐户名, testRepository 为Github上的空仓库
3.将本地仓库的所有内容 推送到 关联的远程仓库上(实质是将本地当前分支master推送到远程origin):
git push -u origin master

注: 由于远程库是空的,故第一次推送master分支时,加了-u参数,表示Git不但会把本地的master分支推送到远程新的master分支,
还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。

4.从现在起, 推送到远程仓库:
git push origin master (即将本地的master分支推送到远程)
git push origin 分支名 (即将本地的 指定分支 推送到远程)
5.查看远程库的信息
git remote
git remote -v (会显示可以抓取fetch和推送push的origin地址。如果没有推送权限,会看不到push地址)

15.克隆远程库:
git clone https://github.com/Sprout4188/testRepository.git
其中Sprout4188为自己Github帐户名, testRepository 为Github上待克隆的仓库

16.分支:
查看分支: git branch
该命令会列出所有分支,其中当前分支前面会标一个*号
创建分支: git branch 分支名
切换分支: git checkout 分支名
创建+切换: git checkout -b 分支名
合并分支:
git merge 分支名
即将指定分支合并到当前分支, 如果可能,Git会以Fast forward模式合并该分支, 但这种模式下,删除分支后,会丢掉分支信息, 即看不出来曾经做过本次合并
git merge --no-ff -m "描述" 分支名
表示在合并该分支时禁用 Fast forward模式, 即在本次合并时会生成一个新的commit, 这样从分支历史上就可以看到分支信息
删除分支: git branch -d 分支名


17.BUG分支(如需要在thirdbranch分支上修改bug):
1.保存当前工作现场: git stash
2.切换到thirdbranch分支 git checkout thirdbranch
3.基于thirdbranch分支创建并切换新分支: git checkout -b issue-101
4.在issue-101分支修改bug并commit后,切换回thirdbranch分支: git checkout thirdbranch
5.将issue-101分支合并到thirdbranch分支上: git merge --no-ff -m "描述" issue-101
6.删除issue-101分支: git branch -d issue-101
   如果要删除一个还没有被合并的分支,可用本命令强行删除 git branch -D 分支名
7.返回之前保存的工作现场, 再删除stash:
查看stash列表: git stash list
恢复指定stash: git stash apply 指定stash名(如果只有一个stash,则可省)
删除指定stash: git stash drop 指定stash名(如果只有一个stash,则可省)
恢复并删除指定stash: git stash pop 指定stash名(如果只有一个stash,则可省)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值