命令
查看对文件修改了哪里
git diff 可以查看已经修改但未暂存的文件
git diff --cached可以查看已暂存,但未提交的文件
git diff
查看日志
第二个是在一行显示,比较简洁
git log
git log --pretty=oneline
git reflog
版本跳转
这是回退到前一个版本:
git reset --hard head^
这是跳转到指定版本:
git reset --hard 每次执行命令的commitId
查看文件内容
cat 文件名(必须包含扩展名)
撤销修改
从工作区中撤销修改:
git restore 文件名(包含扩展名)
从暂存区中撤销文件到工作区中:
git restore --staged 文件名(包含扩展名)
从本地版本库中撤销修改:
版本回退
删除文件
在文件管理器中删除文件的命令:(类似于手动右键删除文件)
rm test.txt
删除文件后git status查看后,提示使用下面使用这个命令来让git正式从工作区中删除这个文件
git rm 需要删除的文件名(包括扩展名)
正式删除后,这个删除的操作需要提交到本地版本库,使用git commit -m ‘相关注释’ 来提交删除的这个操作。
操作
连接远程仓库
将本地仓库和远程仓库(github)连接起来,需要用到SSH,点我了解。
- 先自己在git bash中生成 SSH Key,命令如下:
$ ssh-keygen -t rsa -C “youremail@example.com”
一路回车,不需要设置密码,完成后在用户主目录里面就有.ssh文件夹,里面有id_rsa和id_rsa.pub两个文件,这两个就是SSH Key的秘钥对,id_rsa是私钥,不能泄露出去,id_rsa.pub是公钥,可以放心地告诉任何人。
- 进入github官网,添加公钥。
- 在github中创建新的仓库,了解
- 将本地的仓库和远程的仓库连接起来
创建完成后,我们回到git bash中根据SSH Key将本地已经有的仓库连接到这个新创建的仓库中。使用命令:
$ git remote add origin 这里是SSH看下图
以上的连接命令中,origin是自定义的远程仓库的名称,可以任意写。
注意点:
如果使用连接命令后,git bash报错:
error: remote origin already exists.
说明此时已经连接到远程中的某一个仓库身上了(可以使用命令git remote -v查看连接到了远程的那个仓库):
$ git remote rm origin
然后再使用连接命令:
$ git remote add origin git@github.com:Shiyibande123/learngit.git
- 把本地库的所有内容推送到远程库的指定分支上
以下是推送到远程库的master分支上,第一次推送时候要加-u,以后给这个分支推送文件时就可以省去-u参数了,因为第一次时已经将本地仓库的这个分支和远程仓库的这个分支联系起来了,为以后推动或者拉取文件时简化了命令。
$ git push -u origin master
处理冲突
在其他分支上对一个文件内容进行修改,并且在此分支commit后,切换回主分支,如果也在这个文件内容进行修改,*可见,这是在不同的分支上对同一个文件进行了修改操作,*当在主分支上commit提交修改的内容后,到合并其他分支到主分支上这一步时,就会出现合并出现冲突的错误。
右上图可知,冲突是出现在 in flic.txt文件上。
此时处理冲突的方法是,打开出现冲突的这个文件,这里是flic.txt,然后手动合并,删除如<<<<<<<,=======,>>>>>>>这些标记,处理好后,重新添加到暂存区,最后提交到本地仓库即可。
git status的几种状态
git 中vim编辑器的使用
bug分支
了解
当我们在做开发任务时,领导给我们另外一个任务让我们去修bug,而且这个bug和我们正在开发的功能无关,那么我们就有必要把我们正在做的功能保存起来,而不是直接commit提交了,因为功能还没做完。
把我们还没做完的功能临时保存起来命令:
git stash
当我们去另外一个分支修改完bug回来后,恢复刚才临时保存起来的“现场”的命令:
git stash pop
我们去另外一个分支修改完bug提交修改后,这个bug修改只是在另外那个分支提交而已,而我们需要把这个bug的修改也合并到自己的之前做到一半的功能开发,这时需要回到自己做功能开发的分支,使用命令:
git cherry-pick 修改bug后commit提交后的commitId
这样就可以把自己当前分支刚处理的bug也修改完成了。
克隆分支
先创建一个文件夹,鼠标右键打开git bash,然后输入命令。
想克隆哪个分支就在-b后面写哪个分支的名字,分支名字后面的那一串(SSH)从github中复制即可。
git clone -b dev git@github.com:Shiyibande123/learngit.git
注意点:
- 克隆时如果不使用参数-b 指定分支名称的话,如这样:
git clone git@github.com:Shiyibande123/learngit.git
会有两种结果,第一:如果远程仓库中只有一个分支,会克隆这个分支下来。第二:如果远程仓库中有多个分支,有可能一个分支也克隆不下来,形如:
虽然在git bash中显示克隆成功,但是一个分支没有克隆下来:
- 使用命令克隆下来和直接在github中点击下载zip压缩包的区别:
下载压缩包时只能下载选中的分支的压缩包;
如果手动点击下载某个分支的压缩包的话,不能对它里面的文件内容的修改进行git的管理,比如修改完成后再次推送或者拉取就不行,而使用命令克隆下来的话则相反。了解 - 使用命令克隆下来一个分支后,就可以在当前本地仓库创建远程仓库的其他分支,并一 一进行对应,只需一行命令就可以创建本地分支并联系到远程仓库的指定分支。
如以下创建本地dev分支并和远程仓库对应起来:
git checkout -b dev origin/dev
恢复误删的分支
创建与操作标签
了解
创建标签是给某一个commit创一个人类比较容易理解的标记。因为记一个commitId和记一个commitId对应的标记是有很大的区别的。
- 创建标签的命令:
git tag 标签名
如果不指定commitId的话,标签是打在最近最新的commitId身上。可以使用以下来查看最近的commitId是什么:
git reflog --pretty=oneline
指定commitId的创建标签命令:
git tag 标签名 commitId
- 查看本地所有标签命令:
git tag
- 查看某个标签的信息:
git show 标签名
注意:标签总是和某个commit挂钩。如果这个commit既出现在master分支,又出现在dev分支,那么在这两个分支上都可以看到这个标签。
- 删除本地标签:
git tag -d 标签名
- 将本地标签推送到远程仓库:
git push -u origin 标签名
将本地所有标签推送到远程仓库:
git push -u origin --tags
- 删除远程仓库中指定的标签:
git push origin :refs/tags/远程标签名
拉取分支
了解
指的是从远程仓库中拉取某个分支的代码,使用git pull拉取代码之前,需要将git bash 和远程指定的仓库建立git remote连接(这就是和git clone的区别),如何连接到到远程的仓库,上面“连接远程仓库”这部分已经赘述。顺便提醒一下,连接到远程仓库之前需要用git init先初始化当前的文件夹,再连接。
拉取代码的命令:
$ git pull origin 远程分支
撤销修改
了解
当我们对文件进行修改后,想反悔,回到修改之前的状态(前提是没有commit提交,如果已经提交了,可以进行版本回退来跳到修改之前的版本,使用git reset --hard commitId命令)。
撤销修改的命令:(最后有一个点)
git checkout .
公钥与私钥
生成公钥的命令(在终端中输入):
ssh-keygen -t rsa -C “注册码云/github时的邮箱”
测试公钥命令:
ssh -T git@gitee.com