github学习笔记

Day1基础
git --version
pwd
ls
ls -la
cd
cd .
cd ..
cd ~
cd /
mkdir    建目录
touch    建文件
rm    删文件
rm -rf    删目录
clear    清屏幕

Day2配置
git config
git config -global user.name 'cj'
git config -global user.email '1064789374@qq.com'
git config -list
git config user.name
git help

Day3管理
git init        在本目录下创建仓库
git init [name]        在给定目录下创建仓库
git status        查本目录下的仓库状态,可以识别空文件,但不能识别空目录
git add .        追踪本目录下所有文件
git add [filename]    追踪本目录下某个文件
git commit        提交修改生成版本日志

Day4放弃
git add <file>        更新正追踪的有修改的文件
git restore <file>    还原正追踪的有修改的文件
git restore --staged <file_name> 将暂存区的修改重新放回工作区
git rm --cached <file>    放弃追踪

至此简单总结一下:
·创建仓库并对文件进行增改
1、在一个目录下git init出一个仓库,此时git status是working tree clean的
2、把文件放进来或touch出来,再git status会提示有untracked files
3、按提示git add <file>对文件实现追踪,此时git status是有changes to be committed的
4、对文件对行修改,再git status会有modified的文件,要再用git add实现追踪
5、commit提交生成版本日志,注意如果有modified的文件未add的时候commit,只会提交之前add了的内容
·让文件离开仓库,有两个方案
一是直接手动拉出仓库目录,然后git rm <file>删掉然后git commit
二是直接rm --cached <file>放弃追踪然后git commit,但由于文件仍在当前目录下故每次git status会提示有untracked files
·让修改后即modified的文件恢复到上一次add的状态就用git restore <file>
【commit只对前面add了的文件生效,就是说untracked/deleted/modified状态的都要先add了才能commit,或者说restore到上一次add的状态】

Day5提交
git commit         提交所有更改,要在VIM中输入提交操作的说明再确定    
git commit -m 'update'    指定提交操作的说明并提交
git commit -am 'update'    指定提交操作的说明并提交,注意这里的a指针对deleted/modified的文件省去add的那一步,但是untracked文件仍要手动add
【因为系统不知道你是不是要往仓库增加这个文件,但是deleted/modified是你已经明确要追踪了的】
【不得不说,-am是真的好用,不用我逐个-a】

Day6日志
git log            查看最新日志,显示不完会有冒号,按enter继续往下看旧日志,按q跳出
git log -p -2        查看最近两次的日志提交内容的差异,按q跳出
git log --author='cj'    查看作者cj的所有提交日志
git log --oneline    每行日志用一一行显示,只含简略HASH值与提交时的说明
git log --graph        查看分支
git log --graph    --oneline            查看分支的同时每个版本用一行表示
git log --pretty=oneline            每个版本日志用一行显示,只含完整HASH值与提交时的说明
git log --pretty=format:"%h - %an, %ar : %s"    每个版本日志进行格式化,格式为hash - author,time : 说明

Day7对比
git diff        当前目录所有追踪文件修改前后的区别
git diff <file>        指定追踪文件修改前后的区别
git diff --staged    当前目录所有新追踪文件内容

下面举个例子:
1、创建index.txt并写入第一行hi 123,第二行hi 456,第三行hi 789
2、commit -a index.txt,commit -m 'go'
3、修改index.txt:分别尝试改第一行为hi g123,第二行为hi gj456,第三行为hi l789并git diff index.txt,还可以加减行再diff
【通过尝试改第一行与第三行(不改第二行)可以发现diff展示时是把连续一块有修改的对比显示】

Day8删移
git rm [filename]        文件删除,其实与直接用rm没有什么区别
git mv [oldname] [newname]    文件重命名此时git status会有renamed文件,如果手动改的话再看git status会视为先删再加(效果一样)
git mv [oldname] [path/newname]    文件移动,与上一行差不多

Day9忽略
touch .gitignore    在仓库根目录下创建.gitignore忽略管理文件
vim .gitignore        打开.gitignore文件并写入忽略文件
    /node_modules    忽略node_modeuls文件夹下所有文件
    *.log        忽略.log结尾的文件
    *.zip        忽略.zip结尾的文件
git rm -r --cached .    把当前目录下被跟踪的文件全部取消跟踪
【所有状态的文件皆可随时被忽略,忽略后用status时不再检查,但若取消忽略,再status则会从忽略前的状态进行比较】

Day10还原
·对未被add追踪加入缓冲区的文件:
git checkout -- [filename]    直接还原,与git restore <file>区别是checkout不能还原增删文件的修改
·对已被add追踪加入缓冲区但未被commit的文件:
get reset HEAD [filename]    撤销add追踪
git checkout -- [filename]    再还原
·对已被commit的文件如果要回退,即放弃最近的版本(官方说法版本回退,即v1->v2->v3变成v1):
git reset --hard HEAD^        回退出上一版本
git reset --hard HEAD^^        回退到上上版本
git reset --hard [hash]        回退到指定hash版本(用git log --oneline查看)
git reflog             查看指针是
·对已被commit的文件如果要复制某个旧版本作为新版本(官方说法回到某个版本即v1->v2->v3变成v1->v2->v3->v1):
git checkout [hash] -- .    把当前目录下所有文件回到某个版本但非回退,然后可以再用git commit生成新版本
git checkout [hash] -- [filename]    只把某个文件回退到指定版本

Day11分支
git branch            查看全部分支
git branch [branch name]    生成新的分支
git checkout [branch name]    转到指定分支
git checkout -b [branch name]    生成并转到新的分支
git branch -d [branch name]    删除指定分支,在从master复制出来后无生成新版本的分支
git branch -D [branch name]    强制删除分支,在从master复制出来后有生成新版本的分支
【为了方便管理,一般都是在master主分支里创建子分支(创建分支是复制当前分支而成的)】
【还有就是每次切换分支时都应commit好生成一个版本】

Day12合并
git merge [branch_name]    把branch_name分支合并到当前master分支上
【注意,如果是把develop分支合并到master分支上,就是用develop的新功能文件覆盖master的旧功能文件】
【注意,如果develop分支的版本是master分支的旧版本,则把develop合并到master上时会无效】

Day13冲突
发现冲突:git merge [branch_name]    当master分支的文件与branch_name分支的文件都有修改成新版本时会有冲突
查看原因:git status            查看冲突原因
方法一:git merge --abort        可以忽略冲突进行合并,就是对都修改了的文件,保留master的
方法二:手动选择正确内容        或者让冲突在文件中把两个版本都显示出来,手动删掉不要的部分
    git commit -am 'go'        然后提交

Day14版图
git log --oneline --graph        显示当前分支的版图(比没有--graph就是每行多了*)
git log --oneline --graph --all        显示全部分支(这个是真的牛)【示例图如下】
git log --oneline --graph -[number]    显示当前分支的前number个版图
示例图:越靠左上就是越最新更改,注意到往左上的两条直线表示love与master先后被merge到like上
*   a122242 (HEAD -> like) v11
|\
| * c590bd3 (master) v6
* |   271c8af v10
|\ \
| * | fcccaa7 (love) v8
| * | 9660a35 (gjl) v7
* | | f108f5f v9
|/ /
| | * e326d37 (cj) v5
| |/
| * ce8e572 v4
|/
* 208c841 v3
* f5225cc v2
* 7f82665 v1
* bf00e9a v0

Day15快转
git merge branch_name --no-ff    不使用快转机制(没有--no-ff时默认就是使用快转机制)
不使用快转时的示例图:
*   d941106 (HEAD -> master) Merge branch 'develop'
|\
| * 6223573 (develop) v2
|/
* ad80bec v1
使用快转时的示例图:
$ git log --oneline --graph --all
* 6223573 (HEAD -> master, develop) v2
* ad80bec v1
【区别就是是否合并成同一个结点,本人觉得合就完事了】
【rm -rf .git可直接清掉仓库!】

Day16补充
git merge --no-ff --no-commit [branch_name]    把当前master分支的文件改成branch_name的样子但不执行merge,手动git commit后与没有--no-commit效果一样
git merge --squash [branch_name]        把当前master分支的文件改成branch_name的样子但不执行merge,手动git commit后与上一行的区别是branch_name对master没有合并关系
git reset --hard ORIG_HEAD            回到最初始的版本
git branch --merged                显示已经合并的分支
git branch --no-merged                显示仍未合并的分支

Day17github
历史:github被微软收购了
organization:增删在setting里,加减成员在organization主页(还可以再建小队负责某个仓库的某一块内容),然后增加仓库与个人是一样的了
repository:增加按右上角+号再选new repository即可,删除在setting里,查改在主页或者在本地Pull与Push即可

Day18推送
·把本地已有仓库同步到云端新仓库
1、在远端创建新仓库,不要有readme.md
2、在本地已有项目根目录下打开gitbash
3、执行代码
git init
git add .
git commit -am 'v1'
git remote add origin https://github.com/15521108978/test05.git
git push --all
git log --oneline
4、完成,此时git log --oneline可以看到
hash值 (HEAD -> master, origin/master) v1

·把云端已有仓库同步到本地新仓库
1、在云端查看html链接
2、在本地创建新空仓库
3、执行代码
git init
git remote add origin https://github.com/15521108978/test05.git
git pull --all
git checkout master
4、完成,此时git log --oneline可以看到
hash值 (HEAD -> master, origin/master) v1

·以后分工时每次只需操作自己的分支
git pull origin master
git push -u origin master
【如果云端与本地都有新版本就会有冲突,要手动更改后commit】

Day19获取
法一:download zip    没有.git文件
法二:创建空目录并打开git bash
git clone [远端仓库地址] [仓库重命名]
·git clone https://github.com/15521108978/test.git test01            把远程仓库拉到在当前目录下并重命名为test01
·cd test01                                    进入后自动是master默认分支
git clone --no-checkout [远端仓库地址] [仓库重命名]
·git clone --no-checkout https://github.com/15521108978/test.git test02    把远程仓库拉到在当前目录下并重命名为test02
·cd test02                                    进入后ls是没有东西的
·git checkout master                                手动切换到所需要的分支
git clone --bare [远端仓库地址]
·git clone --bare https://github.com/15521108978/test.git test04        只获取裸仓库,亦即远程仓库中.git的内容
·git cloone /f/Desktop/git_demo/test04 test05                    利用刚下载的test04即.git文件来获取仓库文件并重命名为test05
【我的理解是Day18用于云端仓库是我们自己开发用的,Day19中的云端仓库是别人分享的仓库我们复制过来自己用】

Day20Push
git push -u origin [branch_name]        必须要-u的情况是远程仓库没有branch_name分支时用来创建分支
git push --set-upstream origin [branch_name]    效果同上一行
git push --all                    推送所有分支
【git branch -a可以看有分支(含远端)】
【git push -u origin [branch_name]过之后下次要把本地branch_name分支(当前分支)上传到远程仓库branch_name分支时直接git push即可】

Day22删除远端分支
git push origin --delete [branch_name]
1、远端建了一个分支gjl
2、本地建立好remote后先git pull
3、再git branch -a就可以看到远端的gjl分支
4、最后git push origin --delete gjl
【按教程说,你git branch -a看到的叫远端追踪分支,而在网页看到的是真正的远端分支,但其实你操作远端追踪分支就能操作远端分支】

Day23仓库迁移
git remote set-url origin [远端仓库地址]    设置origin连接绑定到新URL
git remote -v                    看当前所有remote绑定的URL
git push --all

Day24SSH
打开gitbash并cd ~    切换到用户主目录
ssh-keygen        一直enter即可生成私钥id_rsa与公钥id_rsa.pub  
cat .ssh/id_rsa.pub    查看公钥并复制
打开github右上角用户下拉框中的setting,选择SSH and GPGkeys选项卡
按New SSH Key并粘贴公钥,命名TempKey(这个名字可随意)
回到gitbash执行ssh git@github.com再按yes确定
连接成功
【前面所有的HTML连接的操作都可以换成更快的SSH操作】
【例如:git clone git@github.com:15521108978/test05.git】

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值