Git基本操作
安装完Git,在开始菜单打开Git Bash后,先设置Git登录信息
git config --global user.name "Name"
git config --global user.email "[email protected]"
常见文件位置操作:
pwd #当前目录
cd
mkdir #新建文件夹
第一步,将当前目录变为git的本地版本库(仓库)。文件在工作区中,工作区与电脑里的目录相同。
git init
第二步,添加add文件到暂存区(Stage)。注意添加多个文件的格式,否则会被识别为untracked File。
git add 1.txt
git add 2.txt 3.txt #添加多个文件
第三步,一次性提交所有暂存区文件到本地版本库master分支(分支可切换)中,-m参数message意为本次说明。
git commit -m '此版本说明'
文件的add + commit + push/pull命令经常会用到,具体见下文。
恭喜你!基本的操作已经学会了。至此代码们提交到了Git的工作区中,可以开始恣意纵情的写代码了,有不同的修改也可以根据提交记录恢复。
工作区、暂存区、版本库关系如下图所示:
文档版本管理
git status #查询Git当前状态,常用。
git diff 1.txt #查询代码与暂存区的修改区别
git log #查询git历史,显示太多时按q退出。加--graph参数图形化显示
git reflog #查询历史版本号
修改出问题了怎么办,尝试下版本回退,但是在还没把本地版本库推送到远程前。reset既可以回退,也可以把暂存区回退到工作区。Git自动创建的第一个分支叫master,指向master的一个指针叫HEAD。
git reset --hard HEAD^
git reset --hard HEAD^^ #回退到上上次
git reset --hard HEAD~77 #回退第前77次修改
git reset --hard HEAD 8yfhY45 #回退到具体的版本号
撤销此次修改
git checkout -- 1.txt
删除暂存区中add的文件,不影响工作区的实际文件
git rm --cache 1.txt #带--cache参数不影响实际文件;或者-f参数将实际文件也删除
删除暂存区及工作区文件,如果commit过了可用 ‘checkout – 版本’ 撤销,否则就找不到啦~
rm 1.txt
删除及整理某次commit历史
git rebase -i HEAD~1 #删除上次的
git rebase -i 9fbf10 #对id前几位为9fbf10之后的commit进行rebase
git rebase #将分叉的commit历史整理成一条直线,但本地的分叉提交历史会被修改
想忽略某些文件不提交,需新建.gitignore文件写入要忽略的文档名
touch .gitignore
# 在git bash中命令新建.gitignore,打开并写入如下规则的目录:
*.log #所有log格式文件
*.temp
/folder # /某文件夹
1.txt #具体的某文档名
连接GitHub远程仓库
通过验证SSH Key将本地的testgit仓库与Github仓库连接,远程库的名字是origin:
git remote add origin https://github.com/Aeron9000/testgit #与远程仓库建立连接
git push -u origin master #本地仓库推送到远程仓库,第一次带-u参数关联本地远程
git push origin master #本地推送到远程仓库,推送主分支master
git pull origin master #拉取远程仓库master分支并与本地合并
git fetch origin master #只拉取远程仓库到本地。合并还要merge origin/master
git clone https://github.com/Aeron9000/testgit #远程仓库克隆到本地
Git分支管理
git branch chs #创建chs分支
git checkout -b chs #创建并切换到chs分支,只切换不带-b参数
git branch #查看本地分支
git branch -r #查看远程现在分支
git merge chs #在master下与chs合并。加--no-ff参数可保留原分支,往前走一个版本
git branch -d chs #删除chs分支
注:
在当前分支下删除此分支则会报错,
error: Cannot delete branch ‘chs’ checked out at 'C:/Users/testgit’
如果分支合并产生冲突,则在merge之后(可用git status查询),修改1.txt并再次add + commit该文件可以解决冲突。
远程协作管理,远程库的默认名是origin:
git merge –no-ff -m “注释” bno #不用Fast Forword模式合并
git stash #隐藏该分支
git stash list
git stash pop #恢复该分支并删除stash list中的
git remote #查询远程库
git remote -v #查询远程库详细信息
git remote rm origin #删远程库
多人协作
git push origin chs #chs分支推送到远程库
git checkout -b chs origin/chs #远程origin的chs分支到本地
git pull #最新的提交从origin/chs抓下,在本地合并解决冲突
推送分支步骤:
- master分支是主分支,因此要时刻与远程同步。
- 一些修复bug分支不要推送,可以先合并到主分支上,然后把主分支master推送到远程。
多人协作模式:
- 首先,试图用git push origin chs推送自己的修改。
- 如果推送失败,则因为远程分支比你的本地更新早,需要用git pull试图合并。
- 如果合并冲突,则需要解决冲突,并在本地提交,再用git push origin branch-name推送。
常见报错应对
- " Your branch is up to date with ‘origin/master’. "
分支问题,需要新建并切换checkout到新分支再add+commit,等merge分支后再push到远程仓库。
- " Updates were rejected because the tip of your current branch is behind hint: its remote counterpart. Integrate the remote changes (e.g. hint: ‘git pull …’) before pushing again."
git push -f -u origin master 强推至远程服务器,会强制删除远程仓库中冲突文件。或者,git pull origin master --allow-unrelated-histories
- " Changes not staged for commit. "
没有add文件,或者尽管add了但是存在大小写不对应问题。
- " Please enter a commit message to explain why this merge is necessary."
因为本地库的代码跟远程库有冲突需要合并,可修改完后按ESC,然后输入":wq"
学习更多详细的Git参考:
https://www.liaoxuefeng.com/wiki/896043488029600