工作区:就是你在电脑里能看到的目录。
暂存区:英文叫 stage 或 index。一般存放在 .git 目录下的 index 文件(.git/index)中,所以我们把暂存区有时也叫作索引(index)。
版本库:工作区有一个隐藏目录 .git,这个不算工作区,而是 Git 的版本库。
下面这个图展示了工作区、版本库中的暂存区和版本库之间的关系:
• 图中左侧为工作区,右侧为版本库。在版本库中标记为 “index” 的区域是暂存区(stage/index),标记为 “master” 的是 master 分支所代表的目录树。
• 图中我们可以看出此时 “HEAD” 实际是指向 master 分支的一个"游标"。所以图示的命令中出现 HEAD 的地方可以用 master 来替换。
• 图中的 objects 标识的区域为 Git 的对象库,实际位于 “.git/objects” 目录下,里面包含了创建的各种对象及内容。
• 当对工作区修改(或新增)的文件执行 git add 命令时,暂存区的目录树被更新,同时工作区修改(或新增)的文件内容被写入到对象库中的一个新的对象中,而该对象的ID被记录在暂存区的文件索引中。
• 当执行提交操作(git commit)时,暂存区的目录树写到版本库(对象库)中,master 分支会做相应的更新。即 master 指向的目录树就是提交时暂存区的目录树。
• 当执行 git reset HEAD 命令时,暂存区的目录树会被重写,被 master 分支指向的目录树所替换,但是工作区不受影响。
• 当执行 git rm --cached 命令时,会直接从暂存区删除文件,工作区则不做出改变。
• 当执行 git checkout . 或者 git checkout – 命令时,会用暂存区全部或指定的文件替换工作区的文件。这个操作很危险,会清除工作区中未添加到暂存区中的改动。
• 当执行 git checkout HEAD . 或者 git checkout HEAD 命令时,会用 HEAD 指向的 master 分支中的全部或者部分文件替换暂存区和以及工作区中的文件。这个命令也是极具危险性的,因为不但会清除工作区中未提交的改动,也会清除暂存区中未提交的改动。
git rm 命令用于删除文件。
如果只是简单地从工作目录中手工删除文件,运行 git status 时就会在 Changes not staged for commit 的提示。
git rm 删除文件有以下几种形式:
1、将文件从暂存区和工作区中删除:
git rm
以下实例从暂存区和工作区中删除 runoob.txt 文件:
git rm runoob.txt
如果删除之前修改过并且已经放到暂存区域的话,则必须要用强制删除选项 -f。
强行从暂存区和工作区中删除修改后的 runoob.txt 文件:
git rm -f runoob.txt
如果想把文件从暂存区域移除,但仍然希望保留在当前工作目录中,换句话说,仅是从跟踪清单中删除,使用 --cached 选项即可:
git rm --cached
以下实例从暂存区中删除 runoob.txt 文件:
git rm --cached runoob.txt
实例
删除 hello.php 文件:
$ git rm hello.php
rm ‘hello.php’
$ ls
README
文件从暂存区域移除,但工作区保留:
$ git rm --cached README
rm ‘README’
$ ls
README
可以递归删除,即如果后面跟的是一个目录做为参数,则会递归删除整个目录中的所有子目录和文件:
git rm –r *
进入某个目录中,执行此语句,会删除该目录下的所有文件和子目录。
菜鸟图解:
https://www.runoob.com/w3cnote/git-graphical.html
基本操作:
Git branch 一般用于分支的操作,比如创建分支,查看分支等。
1、git branch
不带参数:列出本地已经存在的分支,并且在当前分支的前面用“*”标记。
2、git branch –r
查看远程版本库分支列表。
3、git branch –a
查看所有分支列表,包括本地和远程。
4、git branch dev
创建名为dev的分支,创建分支时需要是最新的环境,创建分支但依然停留在当前分支。
5、git branch –d dev
删除dev分支,如果在分支中有一些未merge的提交,那么会删除分支失败,此时可以使用git branch –D dev:强制删除dev分支。
6、git branch –vv
可以查看本地分支对应的远程分支
7、git branch –m oldName newName
给分支重命名
Git checkout 操作文件和操作分支
操作文件
1.1、git checkout filename
将文件从暂存区的file版本替换到工作区的file版本,如果暂存区没有,就从版本库中的file版本替换工作区的file版本
1.2、git checkout .
放弃当前目录下的修改
2、操作分支
2.1、git checkout master
将分支切换到master
2.2、git checkout –b master
如果分支存在则只切换分支,若不存在则创建并切换到master分支,repo start是对git checkout –b这个命令的封装,将所有仓库的分支都切换到master,master是分支名。
2.3、 查看帮助
git checkout --help
常用操作:
1.提交了多余的文件xxx:
git rm xxx
git commit --amend
git push origin mybranch
2.撤销git add:
如果是撤销所有的已经add的文件:
git reset HEAD .
如果是撤销某个文件或文件夹:
git reset HEAD -filename
3.撤销git commit
git reset --soft HEAD^
HEAD^的意思是上一个版本,也可以写成HEAD12
如果你进行了2次commit,想都撤回,可以使用HEAD
–mixed
意思是:不删除工作空间改动代码,撤销commit,并且撤销git add . 操作
这个为默认参数,git reset --mixed HEAD^ 和 git reset HEAD^ 效果是一样的。
–soft
不删除工作空间改动代码,撤销commit,不撤销git add .
–hard
删除工作空间改动代码,撤销commit,撤销git add .
注意完成这个操作后,就恢复到了上一次的commit状态。
修改注释:–amend
4.git restore
工作区文件修改撤销
git restore file
git add到暂存区的文件撤销
git restore --staged
5.新建远程分支:
git checkout -b new_branch
git push origin new_branch #将新建分支推送到远程
git branch --set-upstream-to=origin/new_branch # 将本地分支new_branch 关联到远程分支new_branch
6.删除远程分支:
删除本地分支 git branch -d 本地分支名
删除远程分支 git push origin --delete 远程分支名
推送空分支到远程(删除远程分支另一种实现)git push origin :远程分支
6.把远程分支的更新同步到本地
git remote -v #查看远程仓库是否存在
git remote add platform 远程仓库 #添加远程仓库地址
git pull platform 远程分支:本地分支 #拉取主库指定分支合并
git push origin 本地分支 # 推送到自己的版本库
7.如果对一个代码仓提交多个commit未合并:
仔branch A
git checkout -b B
git commit --hard HEAD^
修改代码,然后提交
7.如果需要把另一个分支的代码推到当前分支:
git cherry-pick commitid
git push --force origin 当前分支
或者直接 git checkout b ;git merge a
8.将远程br_A分支的更新同步到本地br_A分支:
git fetch origin br_A
git pull --rebase platform br_A
git push --force origin br_A
9.解决冲突:主仓 platform 的br_A的代码和本地分支AA合并到主仓的代码有冲突
git pull --rebase platform br_A
去掉多余的内容
git add .
git rebase --continue
git push --force origin AA
10.新建github代码仓并把本地代码推送上去
进入要推送的目录
git init #生成.git
git add .
git commit -m “first commit”
git remote add origin 新建的代码仓地址
git push origin master #推送到默认的master分支
11.添加配置项目
git config --global user.email “”
git config --global user.name “”
如果执行报错:
warning: user.name has multiple values error: cannot overwrite multiple values with a single value Use a regexp, --add or --replace-all to change user.name.
这个错误是指在 Git 中尝试更改用户的名称时,发现该名称有多个值,无法使用单个值覆盖。这通常会发生在使用多个 Git 帐户时。
要解决这个问题,可以使用以下命令检查当前 Git 配置中 user.name 的所有值:
git config --global --get-all user.name
如果输出包含多个名称,请使用下面的命令替换所有名称:
git config --global --replace-all user.name “YOUR_NAME”
如果想为当前的 Git 账户添加一个新的用户名,而不是替换所有现有的用户名,则可以使用 --add 选项:
git config --global --add user.name “YOUR_NAME”
最后,如果想使用正则表达式替换用户名,可以使用 --regexp 选项:
git config --global --regexp --replace-all user.name “^OLD_NAME$” “NEW_NAME”
请注意,这些命令中的 --global 选项将更改全局 Git 配置,如果只想更改当前仓库的 Git 配置,则应省略此选项。
版权归原作者 liulanba 所有, 如有侵权,请联系我们删除。