1.创建空目录 mkdir cd pwd
2.将目录变成Git可管理仓库 git init ls -ah
1.文件添加到仓库 git add xxx
2.文件提交到仓库 git commit -m "xxx" git commit -a --allow-empty-message -m ""
1.更改文件
2.查看更改 查看状态git status 对比git diff xxx
3.提交更改 ①git add xxx 看状态(将要提交的修改)git status ②提交git commit -m "xxx" (看状态)
看历史记录 git log git log --pretty==oneline
Head 当前版本 Head^上一版 Head^^上上一版本 HEAD~100
1.退回上一版本 git reset --hard HEAD^
查看版本库状态(历史提交版本) git log --pretty=oneline [已无最新的版本]
显示文档 cat xxx
2.返回上一版(重返未来) git reset --hard xxx(commit_id)
若clear了看不到新id(查看命令历史) git reflog
工作区—— 文件夹(电脑可看目录)
版本库—— .git
git add 文件由工作区添加到暂存区,即stage(index);git commit将暂存区内容提交到分支(仓库)
需要提交的文件修改通通放到暂存区,然后,一次性提交暂存区的所有修改。
对比:
git diff xxx 比较的是工作区文件与暂存区文件的区别
git diff --cached xxx 暂存区和HEAD(仓库)的不同
git diff HEAD --xxx 查看工作区和仓库(版本库最新版本)的差异
git checkout xxx 把暂存区最新版本转移到工作区(撤销工作区修改) git add的反向命令
git reset HEAD xxx 把仓库最新版本转移到暂存区 git commit反向命令
Git跟踪修改:每次修改,如果不用git add到暂存区,那就不会加入到commit中。
1.丢弃工作区的修改 git checkout -- xxx
1.修改后还没有被放到暂存区,撤销回到和版本库一模一样的状态
2.已经添加到暂存区,撤销回到添加到暂存区后的状态
即,让这个文件回到最近一次 git commit 或 git add 时的状态。
2.丢弃暂存区的修改
1.git reset HEAD xxx (把暂存区的修改撤销(unstage),重新放回工作区)
2.git checkout -- xxx 丢弃工作区修改
3.丢弃版本库的修改 即版本回退
1.删除目标文件 手动 / rm命令
工作区和版本库不一致 通过git status可以查看哪些文件被删除
2.两种情况:
1.从版本库中删除该文件 ①git rm xxx ②git commit -m "xxx"
2.误删,需要恢复(到版本库最新版本) git checkout -- xxx [用版本库里的版本替换工作区的版本,不论工作区修改/删除,皆还原]
注:如果从版本库中删除了文件又想恢复,可以用版本回退。
1.通过SSH连接远程仓库 在主目录 ssh-keygen -t rsa -C "[email protected]"
有 id_rsa 和 id_rsa.pub 这两个文件
2.登陆Github-SSH Keys 粘贴 id_rsa.pub 内容(公钥)
1.github-create a new repo-输入name,create。成功创建一个新的Git仓库(空的)。
2.关联远程库 git remote add origin https://github.com/XiaochengYe/learngit.git
3.本地库内容推送 git push -u origin master (远程仓库不为空,不用-u)
1.若报错OpenSSL SSL_read: Connection was reset, errno 10054
解决方法:查询下面三个域名ip:github.com、github.global.ssl.fastly.net、codeload.Github.com。找到hosts文件,将上述三行(带ip)放在末尾,保存。https://blog.csdn.net/qq_29493173/article/details/113092656
也可以解除SSL验证 git config --global http.sslVerify "false"
2.若报错failed to push some refs to https://github.com/XiaochengYe/learngit.git
解决方法:新创建的那个仓库里面的README文件不在本地仓库目录中,这时可以同步内容。git pull --rebase origin master 再 push。
3。若验证连接ssh -T [email protected]提示输入 输入yes
之后,只要本地做了提交。git push origin master 即可将本地master分支最新修改推送至Github。
1.先用 git remote -v 查看远程库信息。
2.根据名字删除 git remote rm xxx
“删除”其实是解除了本地和远程的绑定关系,并不是物理上删除了远程库。
git clone [email protected]:michaelliao/gitskills.git 或 git clone https://github.com/XiaochengYe/gitskills
(前者Git用ssh协议会更好)
1.创建并切换dev分支 git checkout -b dev
即:创建分支git branch dev; 切换分支git checkout dev
查看当前分支 git branch
2.git add和commit修改
3.分支工作完成切换回master分支
法一:git checkout master
法二:创建并切换到dev分支git switch -c dev 切换已有分支 git switch master[同1]
4.将dev分支的工作成果合并到当前(master)分支 git merge dev
5.删除dev分支 git branch -d dev
git branch 查看,只有master
1.新分支 git switch -c feature1
修改readme.txt 在feature1分支上提交(add commit)
2.切换 master git switch master
修改readme.txt 在master分支上提交(add commit)
3.合并 git merge feature1
冲突!git status查看,cat xxx查看readme.txt的内容。
修改文件,再提交。(add commit)
4.查看分支合并情况 git log --graph --pretty=oneline --abbrev-commit
5.删除feature1分支 git branch -d feature1
小结:当Git无法自动合并分支时,就必须首先解决冲突。解决冲突后,再提交,合并完成。解决冲突就是把Git合并失败的文件手动编辑为我们希望的内容,再提交。
合并分支时,加上--no-ff
参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并,而fast forward
合并就看不出来曾经做过合并。
1.创建并切换dev分支 git switch -c dev
2.修改readme.txt文件,提交。
3.切换回master git switch master
4.合并dev分支 git merge --no-ff -m "merge with no-ff" dev (禁用Fast forward)
本次合并要创建一个新的commit,所以加上-m参数,把commit描述写进去。
5.查看分支历史 git log --graph --pretty=oneline --abbrev-commit
不使用Fast forward模式。可以看到dev分支。
1.查看工作区 git status (有未提交内容)
2.储藏工作现场 git stash
git status,工作区干净状态。
3.在master分支修复bug,创建临时分支。
git checkout master
git checkout -b issue-101
提交add、commit。
4.修复完成,切回master,并完成合并,删除issue-101分支。
git switch master
git merge --no-ff -m "merged bug fix 101" issue-101
git branch -d issue-101
5.回dev干活。恢复工作区
1.git switch dev
2.git status查看,工作区是干净的。
3.git stash list查看列表,恢复。
1.git stash apply stash内容并不删除 git stash drop删除
2.git stash pop 把stash内容也删
小结:
1.修复bug时,我们会通过创建新的bug分支进行修复,然后合并,最后删除。
2.当手头工作没有完成时,先把工作现场 git stash
一下,然后去修复bug,修复后,再git stash pop
,回到工作现场。
3.在master分支上修复的bug,想要合并到当前dev分支,可以用git cherry-pick <commit>
命令,把bug提交的修改“复制”到当前分支,避免重复劳动。
开发一个新 feature,最好新建一个分支。
如果要丢弃一个没有被合并过的分支,可以通过 git branch -D 强行删除。