zoukankan      html  css  js  c++  java
  • git使用手册

    一、安装git
    运行git bash
    二、创建版本库(仓库)reposity,并提交文件
     
    #新建文件夹
    mkdir learngit
    cd learngit
    #显示当前目录
    pwd
    #将目录变为git仓库,生成 .git 文件(git用来跟踪管理版本库)
    git init
    #显示文件夹中所有文件(包括隐藏文件)
    ls -ah
    #将文件添加到git仓库,支持一次添加多个文件
    git add reademe.txt
    #将文件提交到仓库,支持多次添加,最后统一提交
    git commit -m "create reademe.txt"
     
    git commit命令中,-m后面输入的是本次提交的说明,方便查阅。
     
    三、修改文件
    修改文件后:
     
    #查看仓库状态,modified会告知那些文件修改了
    git status
    #查看修改内容
    git diff
    #添加
    git add reademe.txt
    #可以再次查看仓库状态
    git status
    #提交
    git commit -m "change file"
    #再次查看仓库状态,此时为 nothing to commit
     
    四、时光机穿梭
    1、版本回退
     
     #显示从最近到最远的提交日志
    git log
    #已版本号的方式显示提交日志
    git log --pretty=oneline
    #回退到上一个版本
    git reset --hard HEAD^
    #回退到某一个版本(版本号可以不写完整)
    git reset --hard 3628164
    #查看历史命令,以便回到过去版本后再恢复到未来的某个版本
    git reflog
     
    HEAD表示当前版本
    HEAD^表示上一个版本
    HEAD^^表示上上个版本
    HEAD~100 表示第几个版本
     
    2、工作区和暂存区
    ①工作区:电脑中能看到的目录。
    ②版本库:工作区中有一个隐藏的目录 .git,这个不算是工作区,而是git的版本库。
    ③暂存区:又称state,存在于版本库中。
    ④分支:存在于版本库中,git会默认创建一个master分支。
    ⑤指针:又称HEAD,存在于版本库中,默认指向master分支。
     
    git add命令就是将文件添加到暂存区,git commit就是将暂存区的所有文件,一次提交到HEAD指向的分支上。因此,文件修改必须先add到暂存区,再commit到仓库。
    git add 和 git commit是将修改分别同步到暂存区和仓库,并不会将暂存区的内容清除。
    如果一个文件未曾被添加到暂存区过,则git status查看仓库状态时,此文件为 untracked。
     
    #对比工作区和暂存区的不同
    git diff
    #对比暂存区和分支的不同
    git diff --cached
     
    3、撤销修改
     
    #将文件回退到最近一次git commit 或git add时的状态
    git checkout -- reademe.txt
    -- file 很重要,如果没有就变成了另一个“切换到另一个分支”的命令。
     
    4、删除文件
     
    #删除本地文件
    rm test.txt
    #从版本库恢复删除文件
    git checkout -- test.txt
    #从版本库删除
    git rm test.txt
     
    无论是修改还是删除,git checkout 其实是用版本库中的版本替换工作区的版本。
     
    五、分支管理
    1、分支操作
     
    #查看分支,其中带*为当前分支
    git branch
    #创建分支,创建的分支与当前分支内容一致
    git branch <name>
    #切换分支
    git checkout <name>
    #创建+切换分支
    git checkout -b <name>
    #合并某分支到当前分支
    git merge <name>
    #删除分支
    git branch -d <name>
    #查看分支合并图
    git log --graph
     
    HEAD永远指向当前分支,合并分支实际是将当前分支指向要合并的分支的指向。
    当git无法自动合并分支时,必须先解决冲突。冲突解决后,再提交,合并完成。
     
    2、分支合并模式
    Fast forward模式:通常合并分支时,如果可能,git会用Fast forward模式,这种模式下,删除分支,会丢掉分支信息。
    普通模式:用--no-ff 禁用Fast forward模式,git会在merge时生成一个新的commit,这样从分支历史上就能看到分支的信息。
     
    #合并分支,并创建一个新的commit,所有用-m参数,添加版本描述
    git merge --no-ff -m "merge with no-ff" dev
    #查看分支历史
    git log
    3、分支策略
    master分支:应该是非常稳定的,也就是仅用来发布新版本,平时不能在此分支开发。
    dev分支:用于平时开发,是不稳定的,等到发布新版本时,再合并到master上。
    每个开发者都在dev分支进行开发,那每个人都有自己的分支,再时不时的往dev上合并即可。
    4、bug分支
    举个栗子:
    如果在master分支上有一个代号为101的bug,但是你在dev分支上的开发还没有完成,不能提交。那如何完成bug修改,并且不影响现有开发?
    第一步:保存工作现场
    #把当前工作现场“储藏”起来,等以后恢复现场后继续工作
    git stash
    #stash后,git status查看工作区就是干净的,可以放心的创建分支
    git status
     
    第二步:修改bug
    #确定在哪个分支上修复bug,即切换到哪个分支
    git checkout master
    #从 master分支创建临时分支,并切换
    git checkout -b "issue-101"
    #修复完成后,提交,此时提交到issue-101分支
    git add reademe.txt
    git commit -m "fix bug 101"
    #测试端bug验证完后,切换到master分支,完成合并删除issue-101
    git checkout master
    git merge -no-ff -m "merged bug fix 101" issue-101
    git branch -d issue-101
     
    第三步:恢复现场
    #修改完bug了,现在恢复dev的工作区
    git checkout dev
    #此时工作区还是干净的
    git status
    #查看stash list 工作现场的保存
    git stash list
    #两种恢复工作现场方法
    #第一:恢复后,stash内容不删除,再手动删除
    git stash apply
    #删除stash内容
    git stash drop
    #第二种:恢复的同时,删除stash内容
    git stash pop
     
    切换分支及创建分支时,要保证工作区的状态是干净的,即都当前修改均已提交到git仓库。因为,切换分支后,未提交仓库的修改将不被保留。
     
    5、feature分支
    feature:开发中用于开发新功能的分支。
     
    #新建分支
    git checkout -b feature-1
    #开发完毕后,提交
    git add reademe.txt
    git commit -m "add feature-1"
    #合并到dev分支
    git checkout dev
    git merge --no-ff -m "fix feature-1" feature-1
    #若开发过程中,新功能取消,删除未合并的分支
    git branch -D feature-1
     
    6、多人协作
     
    #查看远程库信息,远程库的名称默认origin
    git remote
    #远程库更详细信息,抓取和推送的远程地址
    git remote -v
    #推送分支,指定本地分支,会将该分支所有本地提交到远程库对应分支上
    git push origin master
     
    master:主分支,要时刻与远程同步
    dev:开发分支,团队所有成员都需在上面工作,所以需要远程同步
    bug:只用于本地修复bug,没必要推到远程
    feature:是否推到远程,取决于你是否与你的小伙伴合作开发
     
    #抓取分支
    #克隆
    git clone git@github.com:michaelliao/learngit.git
    #从远程库clone时,只能看到本地的master分支
    #查看分支
    git branch
    #想要在dev分支开发,必须创建远程origin的dev分支到本地
    git checkout -b dev origin/dev
    #开发工程中是不是把dev分支push到远程
    git add reademe.txt
    git commit -m "add"
    git push origin dev
    #如果同时修改同一文件,push失败,就要先pull
    git pull
    #如果pull失败,原因为没有指定本地dev与远程origin/dev的链接,“no tracking information”
    git branch --set-upstream dev origin/dev
    #再pull
    git pull
    #解决完冲突,再提交,上传
     
    六、标签管理
    标签:发布一个版本是,通常在版本库中打一个标签tag,其实是指向某个commit的指针,(分支也是指向commit的指针,但是分支可以移动,标签不能),标签跟某个commit绑定在一起,为了方便查找某个固定的版本,如使用标签tag v1.2 ,而不是使用某个commit 6a5819e。
    1、创建标签
     
    #切换到需要打标签的分支
    git checkout master
    #打一个新标签,默认标签是打在最近的commit上
    git tag v1.0
    #对历史commit,打标签
    git tag v0.9 6224937
    #查看所有标签,标签按字母排序
    git tag
    #查看标签详情
    git show v0.9
    #创建带有说明的标签,-a指定标签名,-m指定说明
    git tag -a v0.1 -m "version 0.1 released" 32534344
     
    2、操作标签
    #删除标签
    git tag -d v0.1
    #推送标签到远程
    git push origin v1.0
    #一次性推送全部尚未推送到远程的本地标签
    git push origin --tags
    #如果删除推送到远程的标签
    #先删除本地标签
    git tag -d v0.9
    #再删除远程标签
    git push origin :refs/tags/v0.9
     
    七、自定义git
    1、.gitignore文件
    添加忽略文件
     
    2、配置别名
    例如: --global 是全局参数,也就是这些命令可以在这台电脑的所有git仓库下应用
     
    #git status -> git st
    git config --global alias.st status
    git config --global alias.co checkout
    git config --global alias.ci commit
    git config --global alias.br branch
    #git reset HEAD file将暂存区的修改撤销,即unstage,相当于将工作区将文件git add的这边操作撤回,工作区仍保持不变
    git config --global alias.unstage 'reset HEAD'
    #使用别名
    git unstage test.txt
    #显示最后一次提交信息
    git config --global alias.last 'log -1'
    #使用不同颜色显示log信息
    git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"
     
    每个仓库的配置都放在 .git/config 文件中,别名再【alias】后面,如果要删除别名,直接把对应的行删掉即可。
     
     
     
     
     
     
  • 相关阅读:
    CF1454F Array Partition
    leetcode1883 准时抵达会议现场的最小跳过休息次数
    leetcode1871 跳跃游戏 VII
    leetcode1872 石子游戏VIII
    CF1355C Count Triangles
    CF1245D Shichikuji and Power Grid
    CF1368C Even Picture
    CF1368D AND, OR and square sum
    CF1395C Boboniu and Bit Operations
    SpringBoot和开发热部署
  • 原文地址:https://www.cnblogs.com/zuozuo-blog/p/6567524.html
Copyright © 2011-2022 走看看