zoukankan      html  css  js  c++  java
  • git操作详解

    http://www.ruanyifeng.com/blog/2015/12/git-workflow.html

    个人小结:

    gitHub: 163邮箱
    
    
    Repository 版本库(也就是仓库)
    新建一个file mkfile -n k +文件名
    
    提交到本地
    git add 修改的文件名
    git commit -m “备忘信息”
    git status 查看当前状态
    git diff 查看修改内容
    
    小插曲:
    git add -A和 git add .   git add -u在功能上看似很相近,但还是存在一点差别
    git add . :他会监控工作区的状态树,使用它会把工作时的所有变化提交到暂存区,包括文件内容修改(modified)以及新文件(new),但不包括被删除的文件。
    git add -u :他仅监控已经被add的文件(即tracked file),他会将被修改的文件提交到暂存区。add -u 不会提交新文件(untracked file)。(git add --update的缩写)
    git add -A :是上面两个功能的合集(git add --all的缩写)
    
    # 删除 untracked files
    git clean -f  
    
    恢复某个已修改的文件(撤销未提交的修改):
$ git checkout file-name
    例如:git checkout src/com/Android/.../xxx.Java
    比如修改的都是java文件,不必一个个撤销,可以使用
    $ git checkout *.java
    撤销所有修改
    $ git checkout .
    
    git add 之后反悔,请用git reset HEAD
    
    
    
    回退版本:
    git reset --hard commit_id(注释:commit_id是你想要回退的版本,可以用git log查看提交历史)
    回退到上个版本 git reset --hard HEAD^ 
    (注释:HEAD代表当前版本,HEAD^代表上个版本,HEAD^^代表上上个本…)
    git reflog 查看命令历史,以便确定要回到未来的哪个版本。用处:回退版本之后反悔。
    
     git 管理的是修改说明
    1. 修改文件1 -> git 文件1 ->再次修改文件1 -> git commit -m “提交信息” ->git status 你会发现第二次修改并没有被提交 
    2. 原因是git 只负责把add到缓存区的代码提交,并不会对没有add到缓存去的代码做提交
    3. 解决办法是再次执行git add 修改文件1 ,然后再git commit -m “提交信息” 。就正常了。
    
    撤销修改案例
    在readme.txt中添加了一行,然后手动后悔删掉修改,然后分两种情况:
    1. git add 了
    2. 你没有git add
      git checkout -- readme.txt  结果:(丢弃掉工作区的修改)
    1. 因为add了,文件被放到了缓存区,所以手动后悔删除不该写的话会回退到
    2. 没add, 那就和添加一行修改前一模一样了
    
     注意 git checkout -- readme.txt  中 --如果没有,就变成切换分支了 。
    
    也可这样做把add到缓存区的内容重新放回工作区:
    git reset HEAD 加到缓存区的内容
    然后执行 git checkout -- readme.txt 可以丢弃工作区的修改
    
    网友提供的方法:
    如果想反悔add到缓存区:git reset --mixed这样文件退出暂存区,但是修改保留, 然后git stash 即可忽略修改。哈哈。
    
    删除文件
    git rm test.txt  别忘了 git commit -m "删除testrm.txt"
    git checkout其实是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”。
    
     - - - - - -  - - - - - -以上都是基于本地的操作 -  - -  - - - — -  - - -  
    
    创建SSH Key
    ssh-keygen -t rsa -C “liuw_flexi@yo-ren.com”
    在.ssh目录下找到id_rsa.pub公钥 上传到gitHub
    /Users/liuwei/.ssh/id_rsa.pub
    
    将本地代码库和远程仓库关联
    git remote add origin git@github.com:nwgdegitHub/learngit.git
    接下来就把本地内容推到远程去 git push -u origin master
    
    新建分支 git checkout -b dev 
    -b代表创建并切换
    git branch查看所有分支和当前分支
    
    切换分支  git checkout master
    
    merge分支 git merge dev 代表把dev分支合并到当前所在的master分支
    
    删除分支 git branch -d dev  一般用在合并之后不需要该分支了
    git branch -D <name>强行删除 一般用在没有合并之前不想要该分支了,因为如果用git branch -d dev的话会出现还有分支未合并的提示。
    
    
    - - - - - -- - - - - - - -- - - - - - - - --- - - - - - - 
    - 解决冲突
    
    新建分支feature1,在feature1分支中对ready.txt文件修改 一句话 Creating a new branch is quick AND simple.  之后提交
    同样在 master分支 也修改 Creating a new branch is quick & simple. 
    
    当合并git merge  feature1 时产生冲突 。
    
    分别把feature1 和 master 中那句话改成一样的即可。就能成功merge了。
    
    
     - - - — - - —  — - - - — - - - - —————— - — - - - ——————— — - - - — 
    
    在只有一个共同分支的基础上,如果是A同事改了和B同事同一处,B要推代码了,怎么办?
    只能把待提交的内容隐藏,然后git pull , 再申请恢复修改了。
    
    ——————————————————————————————————————————
    
    
    分支管理策略 强制禁用Fast forward模式 
     使用理由:Fast forward模式,但这种模式下,删除分支后,会丢掉分支信息。
     --no-ff方式的git merge   会在merge时生成一个新的commit,这样,从分支历史上就可以看出分支信息。
    git merge --no-ff -m "merge with no-ff" dev
    
    ————————————————————————————————————
    git stash  应用场景:工作只进行到一半,还没法提交,预计完成还需1天时间。但是接到一个bug修复任务,必须在两个小时内修复该bug。这时可以使用git stash 把当前工作现场“储藏”起来,等以后恢复现场后继续工作。
    完成bug 修复之后回到之前自己的工作分支:git stash list 查看 
    两种方式恢复:
    1. git stash apply恢复,但是恢复后,stash内容并不删除,你需要用git stash drop来删除
    2. git stash pop,恢复的同时把stash内容也删了
    
    ------------------------------------------
    远程仓库的默认名称是origin
    查看远程库的信息,用git remote
    git remote -v显示更详细的信息
    
    git push origin master 把本地master分支上的提交推送到远程库
    
    多人协作:
    首先,可以试图用git push origin branch-name推送自己的修改;
    如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并;
    如果合并有冲突,则解决冲突,并在本地提交;
    没有冲突或者解决掉冲突后,再用git push origin branch-name推送就能成功!
    
    
    ———————————————————————————————————————————
    Github - 一个网站,提供给用户空间创建git仓储,保存用户的一些数据文档或者代码等
    GitLab - 基于Git的项目管理软件,GitLab 是一个用于仓库管理系统的开源项目。使用Git作为代码管理工具,并在此基础上搭建起来的web服务。
    
    ______________________________________________________________________________
    
    打标签 git tag <name>
    
    找到历史提交的commit id  : git log --pretty=oneline --abbrev-commit
    对某次指定commit提交打标签 : git tag <tagname>  <commitId>
    git tag -a v0.1 -m "version 0.1 released" 3628164这里的-a指定标签,-m 指定信息
    
    
    A B都在Master修改
    A推了内容
    B第二天来没拉代码就进行了修改 
         有两种情况 B提交到了本地,这时git pull有问题,git push也会出问题。
                         B没提交到本地:B运行git pull的话会提示你说你本地修改没提交,如果修改了和远程有冲突的地方,git pull会自动merge把远程的覆盖本地修改,所以本地做的全没了。
              这时B是直接拉代码?

    当git status 时,出现红色的
    modified:   .DS_Store

    这个是Mac 上打开关闭文件夹时的修改记录

    如果在.gitignore 添加,不起作用的时候,可以试试

    git rm --cached -- .DS_Store

    然后再修改提交。
    此文仅为鄙人学习笔记之用,朋友你来了,如有不明白或者建议又或者想给我指点一二,请私信我。liuw_flexi@163.com/QQ群:582039935. 我的gitHub: (学习代码都在gitHub) https://github.com/nwgdegitHub/
  • 相关阅读:
    Leetcode 1489找到最小生成树李关键边和伪关键边
    Leetcode 113 路径总和 II
    hdu 1223 还是畅通工程
    hdu 1087 Super Jumping! Jumping! Jumping!
    hdu 1008 Elevator
    hdu 1037 Keep on Truckin'
    湖工oj 1241 畅通工程
    湖工oj 1162 大武汉局域网
    hdu 2057 A + B Again
    poj 2236 Wireless Network
  • 原文地址:https://www.cnblogs.com/liuw-flexi/p/6899411.html
Copyright © 2011-2022 走看看