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    //比较工作目录和暂存区的差异
git diff --cached    表示查看已经 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操作)