Git操作

1、写在前面

工作目录:都还没add的文件
暂存区:把文件add了,就是暂存区
git init后新建.gitignore文件    //作用:在里面写入文件路径,该文件就被忽略,不会被上传到github中,git status也不会显示

2、删除文件

删除文件
git rm [file]  //删除文件并存入暂存区
git rm --cached [file]   //从远程库中移除文件,文件会保留在工作目录中
git rm -r --cached [file]   //从远程库中移除文件夹,文件夹会保留在工作目录中
//然后在.gitignore中查看,没有路径的话添加下,然后git add .了该文件也不会上传到github了
//放弃本地修改
git checkout .

3、分支操作

//分支  (作用:在分支上检测代码无误了再合并到master)
git branch    //列出本地分支,加上-r列出远程分支,-a列出本地和远程分支
git branch [name]     //新建分支,停留在当前分支
git branch -d [name]     //删除分支
git checkout -b [name]     //新建分支并切换到此分支,去掉-b表示切换到此分支
git push   //远程已有demo分支并且已经关联本地分支demo且本地已经切换到demo
git push -u origin/demo1 //远程已有demo1分支但未关联本地分支demo1且本地已经切换到demo1
git push origin demo1:demo1  //推送本地的demo1(冒号前面的)分支到远程origin的demo1(冒号后面的)分支(没有会自动创建)
git merge [branch]       //合并分支到当前分支(都是针对本地的分支)
//在一个分支上修改了文件,但是想要推送到另一个分支上
git stash   //储藏未提交已暂存的修改
git stash list    //列出储藏的列表
git stash pop   //恢复上一次的储藏
git stash apply stash@{2}    //应用储藏

4、解决冲突

//查看差异
git diff <file>   //比较工作目录和暂存区的差异
git diff --cached <filename>   表示查看已经 add 进暂存区但是尚未 commit 的内容同最新一次 commit 时的内容的差异。
//解决冲突
1. git pull
2. 打开文件,会显示文件冲突的地方
3. 选择保留哪一个,在保存,推送到远程库上
//本地已pull所有远程库,但是比如改掉一个文件名引起与远程冲突
git push -f   //强制更新远程库
//本地回滚
操作的是你的本地代码仓库,可能你add,commit以后发现代码问题,准备取消提交,取消的是未提交的add,commit
git reset [--soft | --mixed | --hard
其中HEAD代表版本库,index代表暂存区

git reset(等价于git reset --mixed):
场景:不想提交本次修改和本次添加的文件
回退版本库,暂存区,会保留工作区代码。只是将git commit和index 信息回退到了某个版本.

git reset --soft:
场景:不想提交本次修改,但是添加的文件还是要提交的
回退版本库,保留暂存区和工作区源码。只回退到commit 信息到某个版本.不涉及index的回退,如果还需要提交,直接commit即可.

git reset --hard:
场景:多用于远程回滚
回退版本库,暂存区和工作区。源码也会回退到某个版本,commit和index 都回回退到某个版本

//远程回滚
对于已经把代码push到线上仓库,你回退本地代码其实也想同时回退线上代码,回滚到某个指定的版本,线上,线下代码保持一致.2种方式
1、git reset --hard:
git reset --hard 回退到某个版本
git push -f 强推到远程,因为git push已经不能推了

2、git revert:
git revert到某个版本
git push 到远程,2种不同的是git revert 会产生新的commit,你还可以回退

git log  //查看提交的历史版本号,再执行git revert
git revert c011eb3c20ba6fb38cc94fe5a8dda366a3990c61

5、遇到问题

1、用git pull来更新代码的时候,遇到了下面的问题:
error: Your local changes to the following files would be overwritten by merge:  
    xxx/xxx/xxx.php  
Please, commit your changes or stash them before you can merge.  

解决方案:
1、暂存后拉远程

$ git stash  //备份当前的工作区的内容,从最近的一次提交中读取相关内容,让工作区保证和上次提交的内容一致。
$ git pull  //拉一下远程

2、恢复修改内容

$ git stash pop  //读取最近一次保存的内容,恢复工作区的相关内容。pop会从最近的一个stash中读取内容并恢复。

// 出现提示
Auto-merging c/environ.c
CONFLICT (content): Merge conflict in c/environ.c
意思就是系统自动合并修改的内容,但是其中有冲突,需要解决其中的冲突。

3、解决文件中冲突的的部分

打开冲突的文件,会看到类似如下的内容:
其中Updated upstream 和=====之间的内容就是pull下来的内容,====和stashed changes之间的内容就是本地修改的内容。
碰到这种情况,git也不知道哪行内容是需要的,所以要自行确定需要的内容。
2、分支的问题:
There is no tracking information for the current branch.
Please specify which branch you want to merge with.

原因:

是因为本地分支和远程分支没有建立联系

解决方案:

git branch --set-upstream-to=origin/远程分支的名字 本地分支的名字 
如:git branch --set-upstream-to=origin/demo1 demo1

文献:
git工作流指南

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Git常用语法 [TOC] Git简介 描述 ​ Git(读音为/gɪt/。)是一个开源的分布式版本控制系统,...
    君惜丶阅读 3,619评论 0 13
  • 2018年9月10号入司,历经4个月的历练,从一开始不知道什么是Git到后来能在工作中应用,公司的分享会给了我很大...
    菜根_阅读 673评论 0 2
  • git 指南 git操作 本地操作 git add <file>暂存工作区的修改到暂存区 git commit将暂...
    IrisZL阅读 617评论 0 0
  • 如何快速掌握git操作 本人以前也看过git教程的pdf,但是说的都不太让人理解,让人难以掌握。但是在现实开发中,...
    安卓小生阅读 587评论 0 5
  • RACSignal类基本使用 基本的执行流程:1.创建信号(实际返回的是保存了didSubscribe的RACDy...
    curious_cat阅读 372评论 0 0