0


git总结

在这里插入图片描述
工作区:就是电脑里本地能看到的目录,它持有实际文件。
缓存区/暂存区:英文名叫 stage 或 index。在执行git add命令之后,会把工作区的修改记录添加到缓存区以便跟踪。它像个缓存区域,临时保存你的改动。
说明:缓存区的文件一般存放在 .git 目录下的 index 文件(.git/index)中,所以我们把暂存区也叫作索引(index)。
版本库/本地仓:英文名Repository,管理代码版本的地方,在执行git commit命令之后,会把缓存区的修改记录提交到版本库里。
说明:在一个空文件下,执行git init命令之后,会在该文件下创建一个版本库(.git),它是一个隐藏的目录。

一、放弃本地修改

1、没有git add 的

$ git checkout – <某文件>… #在工作区,撤销对某文件的修改
如果是放弃所有文件里的修改,直接使用git checkout .
说明:此命令只针对已经修改的内容和已经删除的文件,但不会删除刚新建的文件,因为刚新建的文件还没有加入到git的管理系统中。所以对于git来说,刚新建的文件是未知的。自己动手删除即可。

2、已经git add的

情况说明:已经修改的文件已经add到暂存区/缓存中了,但是没有commit,此时如果不想提交这个文件的修改。
$ git reset HEAD <某文件> #用版本库内容清空暂存区
如果是放弃所有修改,直接使用get reset HEAD .

3、已经git commit的

  1. 提交的文字说明写的不合适,需要修改时可如下操作。 保留已经提交源码,只是将git commit和index信息回退到某个版本,push入远端库之前提交的commit信息还在。 $ git reset --soft <commit_id>
  2. 提交的文字说明没问题,但index信息需要回退到某个版本,需要修改时可如下操作。 $ git reset --mixed <commit_id>
  3. 本地仓的源码,文字说明和index,全部回退到某个版本,相当于清空某个版本以后的提交记录。 $ git reset --hard <commit_id> 上面时按照commit_id回退的,也可以按照提交次数回退,如下: $ git reset --hard HEAD^^或者gitreset --hard HEAD~2 #回退2次

4、放弃本地修改,全部与远程仓同步,强制覆盖。

1) $ git fetch --all #拉去所有的更新,不同步;
2) $ git reset --hard origin/master #本地代码同步远程最新版本(会覆盖本地所有与远程仓库上同名的文件),git reset指令把HEAD指向master最新版本。
3) $ git pull #再次更新,其实也可以不用执行这一步,因为第2步命令已经保证了与远程仓相同。
简化命令:$ git fetch --all && git reset --hard origin/master && git pull

二、分支切换

1、游离状态

从正常切换到游离状态
$ git branch -a
从游离状态切换到正常
$ git checkout <某分支名称>

三、合并分支

1、将一个A分支的提交合并到另一个B分支。

1)获取A分支上需要合并的那一笔commit-id
$ git log #找到需要合并的id
2、切换到B分支
$ git checkout <B分支名称>
3、将A分支上的提交合并到B分支
$ git cherry-pick

2、合并时发生冲突

1) 手动解决冲突
2) 将修改的文件重新加入暂存区
$ git add .
3)继续合并:$ git cherry-pick --continue
放弃合并:$ git cherry-pick --abort
退出合并:$ git cherry-pick --quit

三、修改本地仓关联的远程仓

1、查看当前远程仓
$ git remote -v
2、方式一:直接修改
$ git remote set-url origin xxxxx.git
方式二:先删后加
$ git remote rm origin
$ git remote add origin xxxxx.git

checkout用法
  1. git checkout #显示工作区相对于版本库修改过的文件。git checkout和git status的区别是git checkout没有显示未跟踪文件(Untracked files:),而git status则显示未跟踪的文件。
  2. git checkout 分支名 #表示切换分支
  3. git checkout -b 新分支名 #表示以当前分支的当前状态来创建新分支并切换到新分支 -b 表示创建新分支
  4. git checkout -b 分支名 commitID #表示以当前分支的commitID提交节点创建新的分支并切换到新分支。此时工作区的内容和切换分之前commitID提交节点的内容一样。
  5. git checkout . #表示将工作区的所有文件的内容恢复到暂存区的状态。这里暂存区的状态是指暂存区原来的状态,也就是现在要扔掉没有加入到缓存区的所有文件
  6. git checkout filename #表示将工作区的指定文件的内容恢复到暂存区的状态。这里暂存区的状态是指暂存区原来的状态,也就是现在要扔掉没有加入到缓存区的指定文件
  7. git checkout commitID filename #表示将工作区和暂存区的指定文件都恢复到指定版本的状态,此时的HEAD指针不变。即就是把工作区的指定文件(filename)修改到指定版本后(也就是扔掉后),再把当前状态的该文件(这里指commitID版本的修改)添加到暂存区,这也就是执行此命令后,就可以直接执行git commit而不需要先执行git add。相当于版本回退吗?
  8. git checkout commitID #表示以指定的提交节点commitID创建了一个临时性分支,此临时性分支可用于做实验性修改。注意:此时HEAD不位于任何分支上,处于游离状态。更准确的说,此命令是以指定的提交节点创建了一个临时分支,一个临时的HEAD指向了这个临时分支,可以在这个临时分支上修改内容并且提交内容。但从临时分支切换到原有分支或其他分支,这个临时分支就会消失,并且在临时分支上的实验性修改也会消失,不影响原有分支。 实际用例:(1)在游离状态的分支下,实验修改后不再需要修改记录,即扔掉实验代码,使用切换分支命令(git checkout 分支名),即可结束游离状态 (2)在游离状态的分支下,实验修改后需要在原有分支上保留这些修改记录,可以用临时分支(游离状态)的当前状态创建一个新分支(git checkout -b 新分支名),再把这个新分支上的修改合并到原有分支上即可。
标签: git github

本文转载自: https://blog.csdn.net/Watom_663/article/details/125649309
版权归原作者 @海~涛 所有, 如有侵权,请联系我们删除。

“git总结”的评论:

还没有评论