美文网首页
git 使用

git 使用

作者: Bystander_1996 | 来源:发表于2019-10-12 17:46 被阅读0次
    git工作流程图

    Workspace:工作区
    Index / Stage:暂存区/缓冲区
    Repository:仓库区(或本地仓库)
    Remote:远程仓库

    1.配置:

    $ git config --global user.name "rui"
    $ git config --global user.email "guangruiw@163.com"
    

    2. git 基本命令

    $ git clone <repo>   //从git 仓库拉取代码
    $ git status   //查看当前目录,提交之后是否有新的修改
    $ git add <filename>  //添加到缓冲区, -u将tarck到的全部添加到缓冲区
    $ git diff  // 查看执行给git status 的结果的详细信息,尚未缓存的改动, --cached 查看已缓存的改动,-- stat :显示摘要
    $ git diff <filename>  //产看文件的具体 改动
    $ git diff HEAD  //查看本地工作区和版本库之间的差异
    $ git diff HEAD^  //查看本地工作区和上一个版本之间的差异
    $ git commit -m "message"  //将缓冲区添加到本地仓库中,并添加注释
    $ git commit -a  // 提交所有改变的内容,直接到仓库区
    $ git commit -v  //提交时显示所有diff信息
    $ git commit --amend -m [message]  //使用一次新的commit,替代上一次提交,如果代码没有任何新变化,则用来改写上一次commit的提交信息
    $ git commit --amend [file1] [file2] ...  //重做上一次commit,并包括指定文件的新变化
    $ git rm <file>  //删除文件
    $ git rm -f <file>  //删除之前已经修改并且放到缓冲区,需要强制的删除
    $ git rm --cached <file>  //只删除缓冲区文件,仍保留在当前的工作目录中
    $ git mv <sourchfile> <targetfile>  //移动或重命名文件,目录,软连接
    $ git tag -a v1.0   //创建一个带注解的标签
    

    3. git 分支管理

    $ git branch   //列出分支
    $ git branch <branchname>  //创建分支
    $ git branch -r   //查看远程分支
    $ git branch -a   //查看本地和远程的所有分支\
    $ git checkout <branchname>   //切换分支
    $ git checkout -b <branchname>  //创建分支并立即切换到该分支下面
    $ git branch -d <branchname>  //删除分支
    $ git checkout –b dev origin/dev  //创建本地dev分支并将远程的origin的dev分支到本地来,
    $ git merge <branchname>   //将branchname分支合并到当前分支下面(当前分支认可合并所有分支的所有修改,合并冲突时,需要手动修改冲突文件,然后再用git add 和 git commit
    $ git stash  //隐藏当前的工作现场(等待恢复后继续任务),执行该命令后(git status 命令查看是没有任何的改动的)可以创建其他分支用于进行其他的任务
    $ git stash list  //查看git stash隐藏的工作现场
    $ git stash apply  //恢复后,stash内容并不删除,你需要使用命令git stash drop来删除。
    $ git stash pop  //恢复的同时把stash内容也删除了。
    

    4. git版本控制

    $ git log   //最新修改在最前面
    $ git log --oneline  //查看历史记录的简洁版本
    $ git log --graph   //查看历史记录
    $ git log --reverse   //逆向显示所有日志
    $ git log --author=rui   //查看指定用户提交的日志
    $ git reset --hard HEAD^  //返回到上一个版本,回退到上上个版本只需把HEAD^ 改成 HEAD^^ 以此类推
    $ git reset --hard HEAD~100  //回退到前一百个版本
    $ git reset --hard <版本号>  //回退到指定的版本
    $ git rebase origin/master  //直接和远端的master分支之间rebase
    $ git rebase master  //和本地的master分支之间rebase(本地master和远端的master之间可能不是同步的)
    

    reset 三种模式的区别

    1. --hard:重置位置的同时,直接将 working Tree工作目录、 index 暂存区及 repository 都重置成目标Reset节点的內容,所以效果看起来等同于清空暂存区和工作区。

    (1) 要放弃目前本地的所有改变時,即去掉所有add到暂存区的文件和工作区的文件,可以执行 git reset -hard HEAD 来强制恢复git管理的文件夹的內容及状态;(2) 真的想抛弃目标节点后的所有commit(可能觉得目标节点到原节点之间的commit提交都是错了,之前所有的commit有问题)。

    1. --soft:重置位置的同时,保留working Tree工作目录和index暂存区的内容,只让repository中的内容和 reset 目标节点保持一致,因此原节点和reset节点之间的【差异变更集】会放入index暂存区中(Staged files)。所以效果看起来就是工作目录的内容不变,暂存区原有的内容也不变,只是原节点和Reset节点之间的所有差异都会放到暂存区中。

    原节点和reset节点之间的【差异变更集】会放入index暂存区中(Staged files),所以假如我们之前工作目录没有改过任何文件,也没add到暂存区,那么使用reset --soft后,我们可以直接执行 git commit 將 index暂存区中的內容提交至 repository 中。为什么要这样呢?这样做的使用场景是:假如我们想合并「当前节点」与「reset目标节点」之间不具太大意义的 commit 记录(可能是阶段性地频繁提交,就是开发一个功能的时候,改或者增加一个文件的时候就commit,这样做导致一个完整的功能可能会好多个commit点,这时假如你需要把这些commit整合成一个commit的时候)時,可以考虑使用reset --soft来让 commit 演进线图较为清晰。总而言之,可以使用--soft合并commit节点。

    1. --mixed(默认):重置位置的同时,只保留Working Tree工作目录的內容,但会将 Index暂存区 和 Repository 中的內容更改和reset目标节点一致,因此原节点和Reset节点之间的【差异变更集】会放入Working Tree工作目录中。所以效果看起来就是原节点和Reset节点之间的所有差异都会放到工作目录中。总之工作目录的修改、暂存区的内容以及由 reset 所导致的新的文件差异,都会被放进工作目录

    (1)使用完reset --mixed后,我們可以直接执行 git add 将這些改变果的文件內容加入 index 暂存区中,再执行 git commit 将 Index暂存区 中的內容提交至Repository中,这样一样可以达到合并commit节点的效果(与上面--soft合并commit节点差不多,只是多了git add添加到暂存区的操作);(2)移除所有Index暂存区中准备要提交的文件(Staged files),我们可以执行 git reset HEAD 来 Unstage 所有已列入 Index暂存区 的待提交的文件。(有时候发现add错文件到暂存区,就可以使用命令)。(3)commit提交某些错误代码,或者没有必要的文件也被commit上去,不想再修改错误再commit(因为会留下一个错误commit点),可以回退到正确的commit点上,然后所有原节点和reset节点之间差异会返回工作目录,假如有个没必要的文件的话就可以直接删除了,再commit上去就OK了。

    使用fetch更新仓库

    //方法一
    $ git fetch origin master //从远程的origin仓库的master分支下载代码到本地的>origin master
    $ git log -p master.. origin/master//比较本地的仓库和远程参考的区别
    $ git merge origin/master//把远程下载下来的代码合并到本地仓库,远程的和>本地的合并
    //方法二
    $ git fetch origin master:temp //从远程的origin仓库的master分支下载到本地>并新建一个分支temp
    $ git diff temp//比较master分支和temp分支的不同
    $ git merge temp//合并temp分支到master分支
    $ git branch -d temp//删除temp
    

    git fetch 后可以使用git log FETCH_HEAD产看差异
    可以使用git merge命令或者git rebase命令,在本地分支上合并远程分支。 git merge origin/master 或者git rebase origin/master表示在当前分支上,合并origin/master

    5. 替换本地改动

    $ git checkout -- filename  //丢弃工作区的修改,不会影响已经提交到缓冲区的内容。指令先从缓存区中拉取版本还原,如果没有再到版本库中拉取还原。
    $ git fetch origin   //丢弃本地的所有改动和提交,到服务器上获取最新的的版本历史
    $ git reset --hard origin:master   //切换到拉到本地时的master
    $ git pull <远程主机名><远程分支名>:<本地分支名>   //在工作目录获取并合并远端的改动
    $ git fetch origin 远程分支:本地分支   //拉取远程分支并创建本地分支
    $ git pull [remote] [branch]  //取回远程仓库的变化,并与本地分支合并
    

    git pull和 git fetch 跟着一个 git merge FETCH_HEAD实现的功能一样,原理不一样

    6.删除恢复文件

    $ git rm fillename  //删除指定文件
    $ git rm 
    

    使用rm filename删除文件后使用git status查看的时候能发现,只是在工作区删除了文件,操作并没有被add到缓存区,可以是使用git checkout -- filename来恢复文件到工作区,或使用git add 来将删除提交到缓冲区。
    使用git rm fillename删除文件,指令执行之后git status查看的时候发现删除操作已经add到了缓冲区这时候要恢复文件可以使用git reset head filename
    执行后将删除的文件恢复到缓冲区后使用git checkout -- filename恢复文件到工作区
    从效果上看rm filename + git add filename == git rm filename

    7. 推送改动

    $ git remote   //列出远程主机名
    $ git push <远程主机名><本地分支名>:<远程分支名>   //推动到远端仓库
    $ git push origin master  //将改动提交到远端仓库,可以把 master 换成你想要推送的任何分支
    

    8. 子模块

    $ git clone --recursive  //
    

    9:代码提交示例:

    $ git status  //查看修改
    $ git add -u (git add <filename>)//将修改添加到缓冲区
    $ git diff  //查看改动,确定是要提交的内容
    $ git commit -m "annotation"  //将缓冲区提交到了 HEAD,并添加注释
    $ git push <远程主机名><本地分支名>:<远程分支名>   //推动到远端仓库
    

    相关文章

      网友评论

          本文标题:git 使用

          本文链接:https://www.haomeiwen.com/subject/xyzqmctx.html