git使用方法之我有一个文件要上传

上手阶段

我有一个文件要上传。不仅如此,后期还要不断的修改、添加等等,于是我觉得应该用git。于是,我用了,打开“开始”按钮,找到git目录夹,里面有三个不知道是什么鬼的东西,于是有了下面三段文字。

Git Bash:
Bash,Unix shell的一种,Linux与Mac OS X v10.4都将它作为默认shell。
Git Bash就是一个shell,是Windows下的命令行工具,可以执行Linux命令。
Git Bash是基于CMD的,在CMD的基础上增添一些新的命令与功能。所以建议在使用的时候,用Bash更加方便。

Git CMD:
(命令行提示符)是Windows操作系统上的命令行解释程序。当你在Windows上安装git并且习惯使用命令行时,可以使用cmd来运行git命令。

Git GUI:
基本上针对那些不喜欢黑屏(即命令行)编码的人。它提供了一个图形用户界面来运行您喜欢的git命令。

于是,我打开了Git GUI,准备践行人类前进的不竭动力——懒,没想到,对方让我建立一个“工程”,于是,我发现了一个真理:懒,是优秀的另一种表现形式。
我要让自己变优秀。
于是,我打开了Git Bash。

开始

git装上,就没用过,于是我执行下面两行代码来证明我是我,因为我有我的账号和密码,当然,是需要修改的。config的意思是“配置”,--global表全局。即,你这台机器上所有的Git仓库都会使用这个配置,当然也可以对某个仓库指定不同的用户名和Email地址。

$ git config --global user.name "Your Name"
$ git config --global user.email "[email protected]"

我用的是windows,先建个文件夹,命名为git-upload.并在Git Bash里cd到这个文件夹(每个文件夹都要进行一次cd,不能一步到位)。为了确保是否转到这个文件夹,输入pwd(“骗我的?”好记,哈哈),防止计算机骗我,哈哈。计算机立马显示当前仓库的位置。

初始化

仓库的厂房已经搭建好了,现在该初始化了,搭建一些基础配置。
于是,git init,我发现多了一个.git文件,这个属于基础设施类文件,意味着不要乱动,否则“牵一发而动全身”,后果很严重。如果还没看到,那是隐藏了,输入ls -ah,就OK了。

往仓库添加货品

厂房搭建好了,基础配置也好了,那就上货吧。可是,我只有一个文件:文本.txt。于是,我用git add 文本.txt,把货品放到了暂存区,也就是放到了小推车上,我也可以再往小推车上放几个,最后来一个git commit -m "备注信息,很重要,尽量备注吧,你会感谢自己的",然后,就把小推车(暂存区)上的货品,全放上去了。
后来,要把一整个文件夹放小推车上,那我就用了 git add 文件夹/ 来添加整个文件夹及内容或者用 git add *.文件类型 来添加目录中所有此文件类型的文件。
然后,我有了一个大胆的想法,我想一下子把所有文件全部上传,git真不错,早就想到了,用 git add . ,全给放小推车(暂存区)上了。

关联远程仓库

虽然把货品都用commit进行提交了,但也只是提交到了本地仓库,还没有上传到远程仓库,让别人都看到我的工作。于是,我打开了我的Gitee(本文以Gitee为例,其与GitHub操作基本是一样的),点开SSH公钥,将公钥标题设置为ssh-key-02,然后,要粘贴公钥内容,才想起来没有公钥,于是乎,在git bash里输入 ssh-keygen -t rsa -C "[email protected]" (不要直接复制粘贴,是你的email),然后其实是可以一路回车的,我就这么干的。然后,根据bash的提示,打开文件目录,打开.ssh文件夹,发现一个密钥对 (两个文件),id_rsa是私钥,不能泄露出去,id_rsa.pub是公钥,可以放心地告诉任何人。然后,我就打开公钥,一波复制粘贴,公钥搞定。
另外,涉及git的文本文件,不要使用Windows自带的记事本,建议Notepad++,不然,容易出错。
现在只是让我的gitee信任了我的计算机,即,让Git信任了本地仓库,还没有关联远程仓库,可现在远程仓库并不存在,所以,先创建远程仓库,在我的gitee上,仓库名称同样是git-upload,点击创建,成功后,就可以关联了。
git remote add origin [email protected]:wsgdiv/git-upload.git(修改成你的地址,这是我的。)
关联成功了。
我发现关联的名称是origin,我又有了一个大胆的想法,我想让我的本地仓库同时关联gitee和github,当然,GitHub的密钥对也是要建立好的。
然后, 我先git remote -v查看了一下,当前本地仓库已经关联的远程仓库,只有gitee,我先把gitee远程库删掉,git remote rm origin,OK,然后,关联两个远程库,为了有所区别,名字不能一样。
git remote add gitee [email protected]:wsgdiv/git-upload.git
git remote add github [email protected]:wsgdiv/git-upload.git
现在,我的本地仓库关联两个远程库了。
然后,我用git push -u origin master把本地库的内容推送到远程,实际上是把当前分支master推送到远程。因为是第一次推送,所以加了 -u ,还把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。
当然,现在是两个远程库,所以,不能用origin了,要用各自的远程库名字。

文件修改与回退

突然想起来,有个文件需要更改,于是乎,在 文本.txt 中又加了一行。这时文件进行了更改,我想看一下本地git状态,用git status,那我到底更改了什么呢?git diff 文本.txt 了解一下。

Administrator@XTZ-01804182126 MINGW64 ~/Desktop/git-upload (master)
$ git status
On branch master
Changes not staged for commit:
  (use "git add ..." to update what will be committed)
  (use "git checkout -- ..." to discard changes in working directory)

        modified:   "\346\226\207\346\234\254.txt"

no changes added to commit (use "git add" and/or "git commit -a")

Administrator@XTZ-01804182126 MINGW64 ~/Desktop/git-upload (master)
$ git diff 文本.txt
diff --git "a/\346\226\207\346\234\254.txt" "b/\346\226\207\346\234\254.txt"
index c6a6747..bf2adc1 100644
--- "a/\346\226\207\346\234\254.txt"
+++ "b/\346\226\207\346\234\254.txt"
@@ -1,3 +1,5 @@
 写点啥呢,不知道,所以就这吧。
 再写一行
-第三行。
\ No newline at end of file
+第三行。
+
+第五行
\ No newline at end of file

Administrator@XTZ-01804182126 MINGW64 ~/Desktop/git-upload (master)
$

其实,文件的修改在于,我加了三个字:第五行。
现在可以提交了,git commit -m "在文本.txt第五行加了三个字:第五行"
然后,我又对文件做了修改,不小心写了废话,这可咋整?算了,就让我们回到过去,还记得“那天放学,夕阳下的奔跑,那是我逝去的青春”
git log 查看,这样查看,信息繁杂,用 git log --pretty=oneline

$ git log --pretty=oneline
ade5f84dd686f31d12d1fa008820d29493b1abc1 (HEAD -> master) 写的废话
d0615a755560e0604098886f9a4d0a2a9810f05e (origin/master) first commit
d9addb3c08be0b087ddff59030fe90d454faa1dd 第一个文本文件
Administrator@XTZ-01804182126 MINGW64 ~/Desktop/git-upload (master)

回到写废话之前,git reset --hard HEAD^,因为是回到往前数第二个版本,所以,两个,如果100个的话,可以写HEAD~100。
然而,我发现我应该撤回到ade5f84dd686f31d12d就可以了,完了,这咋整?“来的时候好好的,回不去了”。
这时,千万不要关闭时光通道,也就是命令行窗口
git reset --hard ade5f
OK,回来了。万一把窗口关了,就git reflog,会显示每一次的操作。

对修改的撤销

我又对文件做了修改,发现修改错了,我想回到修改之前,现在只是对文件进行了保存,还没有用git add放到小推车(暂存区)上,因为修改了多处,工作量又很大,于是
git checkout -- 文本.txt
就好了,哪个文件做了修改,就操作哪个文件。
问题来了,如果用git add放到了小推车(暂存区)上,还没用git commit放到货架上,就用
git reset HEAD 文本.txt
git checkout -- 文本.txt
就撤销了。
如果已经git commit了呢?这个刚扯过,往上翻。

文件的删除与恢复

删除文件
rm test.txt
git rm test.txt
git commit -m "remove test.txt"
如果删错了,想要恢复。(已用commit提交过或者add过)
git checkout -- test.txt
当然,如果没提交过,就没法恢复了。

分支

现在,我有一些节日货品还没到上货时间,节日还没有到来,可现在货品已经提前送到,那怎么办,先放在一边的小仓库里吧,这个临时的小仓库叫分支,也可以进行add和commit操作。
git checkout -b dev 创建并切换dev分支
等同于:
git branch dev
git checkout dev
还有,可以用 git branch 查看当前所处分支。
现在,节日到了,要把dev这个小仓库的货品合并到大仓库里。
git checkout master 切换到主分支
git merge dev 合并dev分支到当前分支
git branch -d dev 删除dev分支
补充:
创建并切换到新的dev分支,可以使用:
git switch -c dev
直接切换到已有的master分支,可以使用:
git switch master
git log --graph命令可以看到分支合并图
git merge --no-ff -m "merge with no-ff" dev 注意--no-ff参数,表示禁用Fast forward,因为Fast forward模式下,删除分支后,会丢掉分支信息。加上--no-ff参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并,而fast forward合并就看不出来曾经做过合并。

bug分支

bug的出现,往往很突然,刚好你正在忙,去临时修bug,所以,先把当前工作现场保存起来
git stash 把当前工作现场“储藏”起来,等以后恢复现场后继续工作
git stash list 查看“储藏”起来的工作现场
如何恢复?
一是用git stash apply恢复,但是恢复后,stash内容并不删除,你需要用git stash drop来删除;
另一种方式是用git stash pop,恢复的同时把stash内容也删了:
当然,也可以多次stash,恢复的时候,先用git stash list查看,然后恢复指定的stash,用命令:
$ git stash apply stash@{0}
在master分支上修复了bug,往往这个bug在dev分支上也是存在的,所以
cherry-pick xxx(bug分支commit版本号前缀) 让我们能复制一个特定的提交到当前分支
补充:
git branch -D feature 强行删除,需要使用大写的-D参数
git remote 查看远程库的信息,用git remote -v显示更详细的信息
git push origin master 把该分支上的所有本地提交推送到远程库
git push origin dev 把dev分支上的所有本地提交推送到远程库对应的dev分支
git checkout -b dev origin/dev 创建远程origin的dev分支到本地
git pull把最新的提交从origin/dev抓下来,然后,在本地合并,解决冲突,再推送
git branch --set-upstream-to=origin/dev dev 设置dev和origin/dev的链接
git rebase 把分叉的提交历史“整理”成一条直线,看上去更直观。缺点是本地的分叉提交已经被修改过了。

标签

其实,就是我们经常遇到的用来区分版本的版本号
git tag v1.0 打了个标签
git tag 查看所有标签
git tag v0.9 f52c633 要对add merge这次提交打标签,它对应的commit id是f52c633
git show 查看标签信息
git tag -a v0.1 -m "version 0.1 released" 1094adb 创建带有说明的标签,用-a指定标签名,-m指定说明文字
注意:标签总是和某个commit挂钩。如果这个commit既出现在master分支,又出现在dev分支,那么在这两个分支上都可以看到这个标签。
git tag -d v0.1 删除标签
git push origin v1.0 推送某个标签到远程
git push origin --tags 一次性推送全部尚未推送到远程的本地标签
如果标签已经推送到远程,要删除远程标签就麻烦一点,先从本地删除:
git tag -d v0.9
git push origin :refs/tags/v0.9

参考链接:
https://www.liaoxuefeng.com/wiki/896043488029600
https://www.cnblogs.com/lbbog/p/11458988.html

你可能感兴趣的:(git使用方法之我有一个文件要上传)