git学习及git命令

git时光机

git是分布式版本控制系统,通过git可以快速回到某个版本.

git操作流程

  1. 首先创建版本库(仓库),进入某个目录,输入命令:git init,这个目录就变为gi可以管理的仓库.
  2. 把文件从工作区添加到暂存区,命令为:git add 文件名
  3. 把暂存区里的文件一次性提交到当前分支,命令为:git commit -m “说明”
    这样就完成了一次版本修改,如果文件在工作区发现错误,可以使用git checkout – file命令撤销修改,如果在暂存区发现错误,可以使用git reset HEAD file命令把暂存区的文件回退到工作区,在工作区中撤销修改,如果提交到版本库后才发现错误,那就要回退版本了,命令是git reset --hard 版本号,如果是push到远程版本库后才发现错误,那估计就是一个重大事故了…

删除

一般情况下,你通常直接在文件管理器中把没用的文件删了,或者用rm命令删了:
$ rm test.txt
如果确实要删,就在git中也删除并提交
git rm file
fit commit -m “说明”
如果是不小心删错了,就用git复原
git checkout – file
git restore file也可以

删除git仓库:

本地仓库可以手动删除.git文件,或者在本地仓库下输入命令
find . -name “.git” | xargs rm -Rf删除.git(这个命令需要在git bash中运行)
删除git仓库
cmd删除空文件夹的命令 rd xxx 或者 rmdir xxx
删除非空文件夹的命令 rd /s xxx 或者 rmdir /s xxx
删除文件命令 del xxx.xxx
查看文件夹内容命令 dir
删除所有后缀名为“.txt”的文件命令 del *.txt

分支

创建分支命令:git branch 分知名
转换当前分支命令:git checkout 分支名
合并分支命令:git merge 分知名 和 git rebase 分知名
从效果上来说前者是将其它分支合并到当前分支,后者是将当前分支合并到其它分支,说法不太严谨,以后想到更好的描述再来更改.

常用操作

git status 查看当前工作区和暂存区状态
git log 查看历史版本
git reflog 查看历史命令
git reset --hard 版本号/相对位置 回退版本
git reset三个参数(hard,soft,mixed)浅析:

  1. –hard:重置位置的同时,直接将working Tree工作目录、index暂存区及repository都重置成目标Reset节点的内容,所以效果看起来等同于清空暂存区和工作区。
  2. –soft:重置位置的同时,保留working Tree工作目录和index暂存区的内容,只让repository中的内容和reset目标节点保持一致,因此原节点和reset节点之间的【差异变更集】会放入index暂存区中(Staged file)。所以效果看起来就是工作目录的内容不变,暂存区原有的内容也不变,只是原节点和Reset节点之间的所有差异都会放到暂存区中。
  3. –mixed(默认):重置位置的同时,只保留Working Tree工作目录的内容,但会将Index暂存区和Repository中的内容更改和reset目标节点一致,因此原节点和Reset节点之间的【差异变更集】会放入Working Tree工作目录中。所以效果看起来就是原节点和Reset节点之间的所有差异都会放到工作目录中。
    reset参数浅析

git commit --amend 撤销上一次提交 并将暂存区文件重新提交
git checkout – 拉取暂存区文件 并将其替换成工作区文件
git reset HEAD – 拉取最近一次提交到版本库的文件到暂存区 该操作不影响工作区

git restore --staged file和git restore file两个命令总结

  1. 文件在暂存区且未做修改时,使用git restore --staged file把文件从暂存区移动到工作区,即文件不被追踪.
  2. 文件在暂存区且已经修改的情况,使用git restore --staged file 把文件从暂存区移动到工作区,且不会撤销修改的内容.使用git restore file文件仍在暂存区,且会撤销文件修改的内容.
  3. 文件在本地代码库已经修改的情况
  4. 使用git add file把文件重新放到暂存区,且保留文件的修改,使用git restore file文件仍在本地代码库且会撤销文件的修改.
  5. 总结一下就是对于git restore --staged file命令来说操作的是暂存区,效果等于是清空了暂存区,git restore file命令操作的是工作区,效果效果等于是把工作区的该文件相对于暂存区或本地代码库(一般是最后一次提交时状态) 一样.具体实现是直接清空然后复制还是对照找出不同进行修改还不得而知.

目的
想把以前的历史清理掉,作为一个干净库使用
方法
删掉本地.git,再删除远程库。下面是真删除,尝试前先备份。

#删除本地分支
git branch -D xxx

#删除远程分支(除了master其它分支都删掉)
git push :远程分支

#删本地git
rm -rf .git

#新建库
git init
git add -A
谁动了我的代码等
#关联远程仓库
git remote add origin http://xxxxxx.git

#强制提交并覆盖远程master
git push -f origin master

git clean用法

git clean -d 清空新建文件夹
对于新创建的文件和文件夹之前只有用版本回退再回来才能清空,特意去学了git clean命令,专门用来处理这两类.
命令格式:
git clean [-d] [-f] [-i] [-n] [-q] [-e ] [-x | -X] [–] <path>
删除文件夹:
git clean -f -d或者git clean -fd
删除忽略文件:
git clean -f -X或者git clean -fX
删除忽略和非忽略的文件:
git clean -f -x或者git clean -fx

选项

-f,–force
如果Git配置变量为clean,requireForce没有设置为false,git clean将拒绝运行,除非指定-f,-n或-i.
-x
不要使用从.gitignore(每个目录)和$GIT_DIR/info/exclude读取的标准忽略规则,但仍然使用-e选项给出的忽略规则.这允许删除所有未跟踪的文件,包括构建产品.这可以用来(可能与git reset结合使用)创建一个原始工作目录来测试干净的构建.
-X
只删除被git忽略的文件,这对于从头重新构建一切可能很有用,但是要保持手工创建的文件.
-n,–dry-run
不要实际删除任何东西,只是显示将要做什么.
-d
删除未跟踪的目录和文件.如果一个未跟踪的目录由另一个Git存储库管理,默认情况下不会删除它.如果真的想要删除这样的目录,请使用-f选项两次.

举例

想批量删除branch中新加的文件(untracked files)
首先确认要删除的文件
git clean -fd -n
如果以上命令给出的文件列表是你想删除的,那么接下来执行
git clean -f -d或者git clean -fd就可以了

删除未跟踪文件

  1. 删除 untracked files
    git clean -f
  2. 连untracked的目录也一起删掉
    git clean -fd
  3. 连.gitignore的文件/目录也一起删掉(慎用,一般这个是用来删掉编译出来的.o之类的文件用的)
    git clean -xfd
  4. 在用上述git clean前,强烈建议加上-n参数来先看看会删掉哪些文件,防止重要的文件被删
    git clean -nxfd
    git clean -nf
    git clean -nfd
    放弃修改

撤销修改

如果不指定切换到哪个分支,那就是切换到当前分支,虽然HEAD的指向没有变化,但是后面的两个恢复过程依然会执行,于是就可以理解为放弃index和工作区的变动。但是出于安全考虑 git 会保持 index 的变动不被覆盖。

1、只放弃工作区的改动,index 保持不变,其实就是从当前 index 恢复 工作区:

放弃工作区中全部的修改
git checkout .

放弃工作区中某个文件的修改:
git checkout – filename

先使用 git status 列出文件,然后 git checkout – app/Http/Controllers/Read/Read3Controller.php

2、强制放弃 index 和 工作区 的改动:

git checkout -f

这是不可逆的操作,会直接覆盖,但是还是很有用的,有时候想放弃这些改动,使用svn的时候可以直接把文件删掉再update,但是使用git就不能这么操作,使用 git checkout 可以满足这一点。

git与GitHub交互

git准备

git配置
设置名字和邮箱
git config —global user.name “Your Name”
git config --global user.email “[email protected]
注意git config命令的–global参数,用了这个参数,表示你的这台机器上所有的Git仓库都会使用这个配置,当然也可以对某个仓库指定不同的用户名和Email地址.
设置SSH Key
ssh-keygen -t rsa -C “[email protected]
你需要把邮件地址换成你自己的邮件地址,然后一路回车,使用默认值即可,由于这个Key也不是用于军事目的,所以也无需设置密码。
如果一切顺利的话,可以在用户主目录里找到.ssh目录,里面有id_rsa和id_rsa.pub两个文件,这两个就是SSH Key的秘钥对,id_rsa是私钥,不能泄露出去,id_rsa.pub是公钥,可以放心地告诉任何人。

GitHub准备

找到Add SSH key,填上任意Title,在Key文本里粘贴id_rsa.pub文件的内容.
ssh key

添加远程库

找到Create a new repo按钮,创建一个新的仓库,在Repository name填入仓库名,其他保持默认设置,点击"Create repository"按钮,就成功地创建了一个新的仓库.
在本地仓库中运行命令:
git remote add origin [email protected]:用户名/远程仓库名
把本地仓库和远程仓库关联起来
接下来,就可以把本地仓库中的内容推送到远程仓库中去了,命令是:
git push -u origin master
把本地库的内容推送到远程,用git push命令,实际上是把当前分支master推送到远程。
由于远程库是空的,我们第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送到远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。
从现在起,只要本地作了提交,就可以通过命令:
$ git push origin master
把本地master分支的最新修改推送至GitHub,现在,你就拥有了真正的分布式版本库!

从远程库克隆

git clone [email protected]:用户名/仓库名

分支

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_43770110/article/details/120089187