Git

  1. Git
    1. 基本
    2. 改错要撤回
    3. 远程仓库github
    4. 分支
    5. 标签
    6. .gitignore
    7. 指令

Git

基本

(file为具体文件名)
git add file将工作区文件存入暂存区
git commit -m “” 将暂存区文件提交至分支并加注释
git status 掌握仓库当前的状态 看修改和增加的状况
git diff file 查看具体修改
git log 查看提交的历史日志 可以看到commit id
HEAD指向当前的版本 当前分支
git reset —hard HEAD^ 回到上一版本
git reset —hard (commit id 前几位) 回到对应的版本
git reflog 查看命令历史 可以确定版本的id
cat file 查看文件内容
Git管理的是修改而不是文件
git diff HEAD — file 查看工作区和版本库里面最新版本的区别
rm file 就是在工作区删文件
git rm file 就是删文件,并且把删文件的修改提交到暂存区 相当于rm删文件后,git add 提交 要撤回和上述相同

改错要撤回

  1. 改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,git restore file 回到最近一次git commit或git add时的状态
  2. 不但改乱了工作区某个文件的内容,还添加到了暂存区时(add),第一步git restore —staged file,把暂存区的修改撤销掉,重新放回工作区,就回到1,第二步按1操作。
  3. 已经提交了不合适的修改到版本库时(commit),想要撤销本次提交,版本回退git reset —hard HEAD^ 工作区,暂存区,版本库都是上次的内容

远程仓库github

  • 关联远程库:
    在GitHub上新建仓库 git remote add origin git@github.com:vzerzz/gitest.git 把本地仓库和远程仓库关联 远程库的名字就是origin
    git push -u origin master 把当前分支master推送到远程 第一次加-u直接把本地master和远程master关联
    之后本地提交后可直接git push origin master 推送分支git push origin dev
    git remote -v 查看远程库信息 显示了可以抓取和推送的origin的地址。如果没有推送权限,就看不到push的地址。
    git remote rm origin 解除了本地和远程的绑定关系 远程库未删除(在GitHub删)
    好处:本地提交可无网络 有网了直接push到远程库
  • 克隆远程库:
    git clone git@github.com:vzerzz/gitest.git
    库内容会在gitest文件夹中 此时库已和远程库关联
  • 参与别人项目:
    Fork 在自己的账号下克隆了一个别人的仓库
    从自己的账号下clone仓库(一定要自己的 别人的没有权限推送修改)
    修改完后推送给自己的仓库 希望别人能接受你的修改,那就在GitHub上发起一个pull request

分支

分支可视作指针 master是指向提交 HEAD指向当前分支
git checkout -b dev 创建并切换到dev分支 git branch dev +git checkout dev
git branch 查看当前分支
git log —graph —pretty=oneline —abbrev-commit 查看分支历史

  1. 在dev上提交 切换回master后看不见修改
    git merge dev 合并dev分支到当前分支(快速合并) 可以看见修改

    git branch -d dev 删除dev分支

  2. 当master分支和dev分支各自都分别有新的提交 则无法快速合并 只能试图把各自的修改合并起来,但这种合并就可能会有冲突 只能修改后再合并

  3. 禁用Fast forward Git就会在merge时生成一个新的commit 不删除分支
    git merge —no-ff -m “merge with no-ff” dev 加上-m参数,把commit描述写进去 合并后的历史有分支,能看出来曾经做过合并,而fast forward合并就看不出来曾经做过合并

  • 分支策略:
    master分支仅用来发布新版本,不能在上面干活 每个人都在dev分支上干活,每个人都有自己的分支,时不时地往dev分支上合并就可以
    当dev分支工作没有完成时,去修别的分支的bug 先把git stash一下,工作现场“储藏”起来(此时status是干净的)然后换分支去修复bug,换回来后再git stash pop,恢复工作现场的同时把stash内容也删了(或git stash apply恢复 git stash drop删除)
    在master分支上修复的bug,想要合并到当前dev分支,可以用git cherry-pick commit id(修复bug操作的commit id),把bug提交的修改“复制”到当前分支 相当于把修改又提交了一次
    要丢弃一个没有被合并过的分支,可以通过git branch -D dev强行删除
    master分支是主分支 dev分支开发分支 bug分支修复bug feature分支实现新功能

  • 多人开发:
    git clone下来只是一个本地的master
    再git checkout -b dev origin/dev创建本地dev上修改 提交到本地master后
    再远程提交到origin的dev分支 git push origin dev
    如果另一个人早在你之前在远程提交更新了dev 那么可能会有冲突 此时git pull把最新的提交从origin/dev抓下来,然后,在本地合并,解决冲突,再推送
    如果失败则git branch —set-upstream-to=origin/dev dev 指定本地dev分支与远程origin/dev分支的链接 再pull 之后手动解决合并冲突之类的push即可
    git pull 后 git rebase 把你的提交“放置”在远程拉取的提交之后 把分叉的提交历史“整理”成一条直线,看上去更直观

标签

标签不能移动 相当于一个commit的引用别称之类
git tag v1.0 用于新建一个标签,默认为HEAD,也可以指定一个commit id
git tag 查看所有标签 git show v0.9 查看标签信息
标签总是和某个commit挂钩。如果这个commit既出现在master分支,又出现在dev分支,那么在这两个分支上都可以看到这个标签
git tag -d v0.1 删除标签 创建的标签都只存储在本地,不会自动推送到远程
推送某个标签到远程 git push origin tagname
一次性推送全部尚未推送到远程的本地标签 git push origin —tags
删除远程标签先删本地 git tag -d v0.9 再删远程 git push origin :refs/tags/v0.9

.gitignore

在Git工作区的根目录下创建.gitignore文件,把要忽略的文件名填进去,Git就会自动忽略这些文件
.gitignore文件模板

1
2
3
*.exe # 排除所有.exe结尾的文件
.* # 排除所有.开头的文件
!.gitignore # 不排除.gitignore

git add -f filename 强制添加到Git

指令

Command

参考教程
练习网站

×

喜欢就点赞,疼爱就打赏