代码托管平台:git.acwing.com
一、git基本概念
工作区:仓库的目录。工作区是独立于各个分支的。
暂存区:数据暂时存放的区域,类似于工作区写入版本库前的缓存区。暂存区是独立于各个分支的。
版本库:存放所有已经提交到本地仓库的代码版本
版本结构:树结构,树中每个节点代表一个代码版本。
二、git命令分类整理
1.全局设置
1.git config --global user.name xxx:设置全局用户名,信息记录在~/.gitconfig文件中
2.git config --global user.email xxx@xxx.com:设置全局邮箱地址,信息记录在~/.gitconfig文件中
3.git init:将当前目录配置成git仓库,信息记录在隐藏的.git文件夹中
2.常用命令
4.git add XX :将XX文件添加到暂存区
5.git commit -m "给自己看的备注信息":将暂存区的内容提交到当前分支
6.git status:查看仓库状态
7.git log:查看当前分支的所有版本
8.git push -u (第一次需要-u以后不需要) :将当前分支推送到远程仓库
9.git clone git@git.acwing.com:xxx/XXX.git:将远程仓库XXX下载到当前目录下
10.git branch:查看所有分支和当前所处分支
3.查看命令
11.git diff XX:查看XX文件相对于暂存区修改了哪些内容
12.git status:查看仓库状态
13.git log:查看当前分支的所有版本
14.git log --pretty=oneline:用一行来显示
15.git reflog:查看HEAD指针的移动历史(包括被回滚的版本)
16.git branch:查看所有分支和当前所处分支
17.git pull :将远程仓库的当前分支与本地仓库的当前分支合并
4.删除命令
18.git rm --cached XX:将文件从仓库索引目录中删掉,不希望管理这个文件
19.git restore --staged xx:==将xx从暂存区里移除==
20.git checkout — XX或git restore XX:==将XX文件尚未加入暂存区的修改全部撤销==
5.代码回滚
21.git reset --hard HEAD^ 或git reset --hard HEAD~ :将代码库回滚到上一个版本
22.git reset --hard HEAD^^:往上回滚两次,以此类推
23.git reset --hard HEAD~100:往上回滚100个版本
24.git reset --hard 版本号:回滚到某一特定版本
6.远程仓库
25.git remote add origin git@git.acwing.com:xxx/XXX.git:将本地仓库关联到远程仓库
26.git push -u (第一次需要-u以后不需要) :将当前分支推送到远程仓库
27.git push origin branch_name:将本地的某个分支推送到远程仓库
28.git clone git@git.acwing.com:xxx/XXX.git:将远程仓库XXX下载到当前目录下
29.git push --set-upstream origin branch_name:设置本地的branch_name分支对应远程仓库的branch_name分支
30.git push -d origin branch_name:删除远程仓库的branch_name分支
31.git checkout -t origin/branch_name 将远程的branch_name分支拉取到本地
32.git pull :将远程仓库的当前分支与本地仓库的当前分支合并
33.git pull origin branch_name:将远程仓库的branch_name分支与本地仓库的当前分支合并
34.git branch --set-upstream-to=origin/branch_name1 branch_name2:将远程的branch_name1分支与本地的branch_name2分支对应
7.分支命令
35.git branch branch_name:创建新分支
36.git branch:查看所有分支和当前所处分支
37.git checkout -b branch_name:创建并切换到branch_name这个分支
38.git checkout branch_name:切换到branch_name这个分支
39.git merge branch_name:将分支branch_name合并到当前分支上
40.git branch -d branch_name:删除本地仓库的branch_name分支
41.git push --set-upstream origin branch_name:设置本地的branch_name分支对应远程仓库的branch_name分支
42.git push -d origin branch_name:删除远程仓库的branch_name分支
43.git checkout -t origin/branch_name 将远程的branch_name分支拉取到本地
44.git pull :将远程仓库的当前分支与本地仓库的当前分支合并
45.git pull origin branch_name:将远程仓库的branch_name分支与本地仓库的当前分支合并
46.git branch --set-upstream-to=origin/branch_name1 branch_name2:将远程的branch_name1分支与本地的branch_name2分支对应
8.stash暂存
47.git stash:将工作区和暂存区中尚未提交的修改存入栈中
48.git stash apply:将栈顶存储的修改恢复到当前分支,但不删除栈顶元素
49.git stash drop:删除栈顶存储的修改
50.git stash pop:将栈顶存储的修改恢复到当前分支,同时删除栈顶元素
51.git stash list:查看栈中所有元素
上面命令有重复,只是分类。
三、homework
1.homeowrk_0
(0) 在当前目录下创建文件夹homework,并将homework目录配置成git仓库。后续作业均在homework目录下操作;
#进入到homework/lesson_5/创建一个文件夹
mkdir homework
#将该homework创建为仓库
git init
2.homework_1
(1) 创建文件readme.txt,内容包含一行:111;
将修改提交一个commit;
#在homework仓库中创建一个readme.txt文件,并输入111
vim readme.txt
#将该文件加入到缓存区
git add . #也可以是 git add readme.txt
#此时可以看一下是否加入到了缓存区
git status
#然后将进行commit
git commit -m "add readme.txt"
#完成后可以检查一下
git log #该条命令会查看当前分支的所有版本
3.homework_2
(2) 在readme.txt文件末尾新增一行:222;
将修改提交一个commit;
#再次打开readme.txt文件
vim readme.txt
#加入222后,继续执行homework_1的操作
git add .
git commit -m "add 222"
4.homework_3
(3) 创建文件夹:problem1和problem2;
创建文件problem1/main.cpp。文件内容为下述链接中的代码:https://www.acwing.com/problem/content/submission/code_detail/7834813/;
创建文件problem2/main.cpp。文件内容为下述链接中的代码:https://www.acwing.com/problem/content/submission/code_detail/7834819/;
将修改提交一个commit;
mkdir problem1 problem2
vim problem1
vim problem2
git add .
git commit -m "add p1 p2"
5.homework_4
(4) 删除文件夹problem2;
创建文件夹problem3;
创建文件problem3/main.cpp。文件内容为下述链接中的代码:https://www.acwing.com/problem/content/submission/code_detail/7834841/;
将readme.txt中最后一行222删掉,然后添加一行333;
将修改提交一个commit;
#删除文件夹
rm problem2 -r #直接删就行,不需要git
#创建文件夹
mkdir problem3
#进入文件夹problem3,创建main.cpp文件
vim main.cpp
#在修改readme.txt
vim readme.txt
#最后在提交到缓存区,并commit
git add .
git commit -m "add p3"
6.homework_5
(5) 在https://git.acwing.com/上注册账号并创建仓库,仓库名称为homework;
将本地git仓库上传到AC Git云端仓库;
将上图两个步骤,复制到terminal
回车即可
7.homework_6
(6) 创建并切换至新分支dev;
在readme.txt文件中添加一行444;
将修改提交一个commit;
将dev分支推送至AC Git远程仓库;
#创建一个dev分支
git checkout -b dev #创建一个dev分支 git checkout dev 本命令是切换到dev分支
#git branch 查看当前分支
#进入readme.txt文件
vim readme.txt #输入444
#传入到缓存区,并commit
git add .
git commit -m "add 444"
#将该分支上传到云端
git push
git push --set-upstream origin dev #此命令是push完之后,出来的,copy ,paste就行
8.homework_7
(7) 切换回master分支;
在readme.txt文件中添加一行555;
将修改提交一个commit;
#切换到master分支
git checkout master # git branch 查看当前分支
#进入到readme.txt
vim readme.txt
git add .
git commit -m "add 555"
9.homework_8
(8) 将dev分支合并到master分支;
手动处理冲突,使readme文件最终内容包含4行:111、333、555、444;
将修改提交一个commit;
#将dev合并到master中
git merge dev #此条命令为将xxx分支合并到当前所处分支
#合并后会有冲突,需要手动更改
vim readme.txt #更改即可
git add .
git commit -m "fix conflict"
10.homework_9
(9) 将master分支的版本库push到AC Git云端仓库;
登录myserver服务器(4. ssh作业中配置的服务器);
创建并清空文件夹:~/homework/lesson_5/;
将AC Git云端仓库clone到~/homework/lesson_5/中;
#进入服务器
ssh myserver
#创建lesson_5
mkdir lesson_5
#在lesson_5中clone
git clone git@git.acwing.com:Newer/homework.git
#该链接为git端的克隆命令