• 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/
  • 相关阅读:
    2021.11.20 MapReduce实验
    Linux串口应用编程
    Linux系统中的TTY
    69 进程创建的优化设计 上
    71 键盘驱动程序设计(上)
    有关EXPORT_SYMBOL_GPL
    73 键盘驱动程序设计(下)
    72 键盘驱动程序设计(中)
    本地maven打包无法被导入
    java 8 Stream 递归实现树形结构
  • 原文地址:https://www.cnblogs.com/liuw-flexi/p/6899411.html
Copyright © 2020-2023  润新知