开启新旅程
文章目录
git 的内容部分来自于下面的学习的链接,部分来自博主实际遇到的问题
https://www.liaoxuefeng.com/wiki/896043488029600/896827951938304
安装Git
默认安装
然后打开git bash
输入下述命令
git config --global user.name "Your Name"
git config --global user.email "email@example.com"
完成安装
git config --global 参数
创建一个新的版本库
Step1: 第一步创建空目录
mkdir learngit
cd learngit
pwd
mkdir // 创建文件夹
pwd //显示文件目录
Step2:将目录添加为可以管理的仓库
git init
添加新的文件
添加一个文件叫做BFS.cpp
首先在learngit的文件目录下面创建BFS.cpp文件夹
- 将文件添加导仓库
git add BFS.cpp
- 告诉Git将文件提交到仓库
git commit -m "wrote a BFS.cpp file"
git commit命令后面添加-m是本次提交的说明,可以输入任何的内容,用于说明本次的改动记录
这个操作对文件没有改动,只是为了告诉别人本次修改的内容
这个命令执行完成后,系统提示:
1file changed
96 insertions 插入了几行内容
creat mode (?) //还不知道是什么意思
为什么使用了add添加文件还要使用commit,因为commit 可以一次性提交多个文件,可以add多个不同的文件
例如:
$ git add file1.txt
$ git add file2.txt file3.txt
$ git commit -m "add 3 files."
git add . #添加所有的文件
git add -u #添加已经跟踪的文件
git add -A #添加已经跟踪的文件和未跟踪的文件
git reset HEAD +文件名 #取消添加
Tips:
添加文件到Git仓库,分两步:
- 使用命令git add ,注意,可反复多次使用,添加多个文件;
- 使用命令git commit -m ,完成。
修改文件后怎么办?
先修改原来添加的文件BFS.cpp
知道自己改了什么
使用命令git status 查看修改后的结果
git status
上述命令说明BFS.cpp被修改了,但是并不知道修改了什么
使用git diff 查看修改了什么
git diff
实际上我并没有修改语句,只是删除了两个换行
- 是删除的意思
- 是增加了什么的意思
重新添加到仓库
提交修改和提交新文件的步骤一致
git add BFS.cpp
git commit -m "delete line breaks"
这时候查看状态就没有什么问题了
版本回退
git是分布式版本控制系统,可以回退到之前的任何一个版本,防止文件该乱了,或者误删了什么文件,可以恢复到最近的commit.
回顾修改的所有的版本
使用命令 git log显示最近到最远的提交日志
git log
回顾版本的结果
如果想起输出的信息太多,看的眼花缭乱,可以最初简化
git log --pretty=oneline
-
在一行里面显示,没有两行显示,twoline是错误的
-
其中,HEAD 是头节点的意思,也就是目前的版本是这一个
GUI界面可以看到版本内容
回退前面的版本
当前的版本就是HEAD, 上一个版本就是HEAD,上上个版本就是HEAD^,以此类推。。。前面的第一百个版本为HEAD~100
命令如下:
git reset --hard HEAD^
cat BFS.cpp
cat 是现实当前版本文件的全部内容
再用git log 查看现在的版本,发现现在的版本不包含之前的版本了
git log
- 这时候找不到之前的版本了,一种方法是找到之前看到的版本号,然后写几位数,就可以回退到原来的版本了,但是如果查找不到原来的版本的话?
使用命令git reflog,查看之前的版本,
git reflog
然后可以找到之前的版本号码,可使用git reset --hard "版本号"进行回退
上传远程库
Step1: 输入
git remote add origin “远程库名称”
下面是自己创建的仓库的地址
如果没有报错就是对的,如果已经链接了,则会出现
Step2:
git push -u origin --all
git push -u origin --tags
# 更新目前的设置
- 错误调试,因为输入的密码错误,导致如下错误
如果错误反复出现,不在允许输入密码,那么清楚缓存的密码:
git config --system --unset credential.helper
git push <远程主机名> <本地分支名> <远程分支名>
git push origin master:refs/for/master
第一个master是本地分支名,第二个master是远程分支名。
1.1 git push origin master
如果远程分支被省略,如上则表示将本地分支推送到与之存在追踪关系的远程分支(通常两者同名),如果该远程分支不存在,则会被新建
1.2 git push origin
refs/for/master 如果省略本地分支名,则表示删除指定的远程分支,因为这等同于推送一个空的本地分支到远程分支,等同于 git push origin --delete master
1.3 git push origin
如果当前分支与远程分支存在追踪关系,则本地分支和远程分支都可以省略,将当前分支推送到origin主机的对应分支 上述已有的仓库,在gitlab中创建,
(1) git push -u origin master
如果当前分支与多个主机存在追踪关系,则可以使用 -u 参数指定一个默认主机,这样后面就可以不加任何参数使用git push,不带任何参数的git push,默认只推送当前分支,这叫做simple方式,还有一种matching方式,会推送所有有对应的远程分支的本地分支, Git 2.0之前默认使用matching,现在改为simple方式 如果想更改设置,可以使用git config命令。git config --global push.default matching OR git config --global push.default simple;可以使用git config -l 查看配置
(2) git push --all origin
当遇到这种情况就是不管是否存在对应的远程分支,将本地的所有分支都推送到远程主机,这时需要 -all 选项
(3) git push --force origin git push
时候需要本地先git pull更新到跟服务器版本一致,如果本地版本库比远程服务器上的低,那么一般会提示你git pull更新,如果一定要提交,那么可以使用这个命令。
(4) git push origin --tags
git push 的时候不会推送分支,如果一定要推送标签的话那么可以使用这个命令
完成上传
clone在线工程
git clone “代码clone with SSH的链接”
本地仓库更新到远程master
git pull --rebase origin master
删除建立的仓库
find . -name ".git" | xargs rm -Rf
修改commit 信息
- 修改最新的log
直接使用命令
git commit --amend
进入vim窗口之后,修改好信息,然后在最下面,按esc, :, x保存并且退出
-
修改历史的log
如果要修改历史的版本信息 -
修该历史信息
执行git 操作, 修改近三次的信息
git rebase -i HEAD~3
现在的信息是按照从旧到新的顺序排列,是和git log顺序反过来的 。。。。。
删除已经存在于工作区的文件
- 删除工作区和暂存区
git rm -r <file> //从工作区和暂缓区删除某个文件
git commit -m "" //就是把文件都删除了
- 只是从暂存区删除文件,本地的工作去不受更改
git rm -r -cached "文件名" //只是删除了commit里面的信息
- 误删除后复原
git checkout --<file>
撤销提交的命令
例如,撤销下面的命令
$ git rm -r --cached .$ git add .$ git commit -m "remove xyz file"
确定什么需要上传git, 什么不需要上传
.vs 不需要上传
data 不需要上传
保存缓存区
git stash
git stash pop