Git 学习

来源:互联网 发布:php的memcache 编辑:程序博客网 时间:2024/06/05 16:25
 1、git文件的三种状态之间的转换:  http://phplaber.iteye.com/blog/1699926  在该网址有详细的说明


                                     版本回退 和 重返未来版本问题


    当使用commit命令后,意味着你有了一个新的版本号,head指针指向新的版本位置, 要在回到不同版本,
    当你回退到以前的版本时,首先 使用 git log命令,以便确定回退到那个版本, git reset --hard commit_id
    当你要重返未来的版本时, 使用git  reflog 命令查看命令历史,以便确定回到未来那个版本。


                            
                                          暂存区和工作区概念理解
我们直接看到的文件路径 就是工作区,当使用 git add命令时,即将工作区中的文件保存到暂存区,工作区的内容没有发生变化
    ,如果此时我们使用git commit命令,那么暂存区的内容就会被放到相应的分支中去,提交一次commit就会产生一个新的版本,
    当commit命令后,暂存区的内容此时和 分支内容一样,并不是 网上说的 暂存区没有任何内容。 注意,commit命令提交到分支中的是暂存区的内容而不是
工作区的内容!

     注意:
http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/0013745374151782eb658c5a5ca454eaa451661275886c6000                               
                                         
       这个 网站上说的 暂存区没有内容 是 错的 ,commit  之后暂存区的内容并不会消失
  
                                管理修改
git diff HEAD -- filename  命令可以查看工作区和版本库里面最新的区别。
    
git diff  查看working tree与index  file的差别
git diff -cached 查看index file 与commit的差别
git diff HEAD 查看working tree 与commit的差别

git  rm -- 
rm 删除文件后,可以使用git checkout -- filename 来恢复文件。  git checkout 其实使用版本库里的版本替换
                                                             工作区的版本,无论是删除还是修改都可以“一键还原”

                                撤销修改


    git checkout -- filename  : 可以丢弃工作区的修改
    一种是  修改后没有被放到暂存区 ,撤销后和版本库一致
    一种是   添加到暂存区, 撤销后 和暂存区内容一致

git reset HEAD filename :  把暂存区的修改撤销,重新放回工作区, HEAD  表示最新的版本

                               分支管理
git checkout -b 分支名字NAME:  创建分支,并切换到新建的分支
上述命令可以 表示为 :  git branch NAME ; git checkout NAME;
git branch: 命令查看当前分支
git branch -d  branchname : 删除某个分支

git log --graph --pretty=online --abbrev-commit 图形化分析commit版本

--------------------------------------------------------------------------------------------------------------------------------------------
   自己对合并及其冲突的理解: 分支是为了做测试而产生的,而 矛盾是 在不同的分支 修改了同一个文件而导致的,
在图形化分析中,我之所以产生了那个错误的想法,是因为我把 每一次提交后的仓库版本 与文件混为一谈,每一次commit其实只是修改了
部分文件内容,而我下意识将 一个节点当做一个 单文件结构,故而产生这个错误的认识。


git merge --no-ff  : 这个参数,其实也是我自己思维进入了一个混乱中, fast-fward是默认的合并模式,但是这种合并是建立在 分支有了new commit而
                    主分支没有 commit,此时为了简洁 直接将HEAD 指针指向 测试分支,但是 如果当前分支也 有了new commit,那么 即使你不加 --no-ff
参数,此时,加不加参数没有区别,因为HEAD指针没法直接指向当前分支,必须系统建立一个commit 那个合并所有修改的文件


10.23 日 关于冲突 及其系统新建 commit的思考 , 10.26在此做出 解答
--------------------------------------------------------------------------------------------------------------------------------------------
                         
 
                                             远程仓库的管理


    git remote: 查看远程库的信息  git remote -v :查看跟详细的信息
 
git push originname localbranchname : 将本地的 分支 推送到远程库
    
如果本地推送到远程库失败则说明有冲突,解决如下:
1、git branch --set-upstream branch-name origin/branch-name  //建立本地分支与远程分支的关联
2、git pull  //把最新的提交从远程库中抓下来
冲突后再次进行推送




------------------------------------------------------------------------------------------
    以下操作经过亲测

git clone只能clone远程库的master分支,无法clone所有分支,解决办法如下:


1. 找一个干净目录,假设是git_work
2. cd git_work
3. git clone http://myrepo.xxx.com/project/.git ,这样在git_work目录下得到一个project子目录
4. cd project
5. git branch -a,列出所有分支名称如下:
remotes/origin/dev
remotes/origin/release
6. git checkout -b dev origin/dev,作用是checkout远程的dev分支,在本地起名为dev分支,并切换到本地的dev分支
7. git checkout -b release origin/release,作用参见上一步解释
8. git checkout dev,切换回dev分支,并开始开发。
----------------------------------------------------------------------------------------------- 



    标签用来在发布版本时使用,唯一确定commit的状态,也就是说,标签唯一指向了某个commit的指针,而且是常量,不能改变。
不做过多的了解。
     详情:  
http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/001376951758572072ce1dc172b4178b910d31bc7521ee4000  
 
    
     git的学习目前到此为止。
    -------------------------------------------------------------------------------------------------------------------------------------------
 
















                               
0 0
原创粉丝点击