本地仓库
仓库初始化
git init: 初始化一个Git仓库
添加文件
git add <file> : 把某个指定文件的修改从工作区添加到暂存区 注意:git跟踪的是修改
git commit -m “message” : 把暂存区所有修改提交到当前分支 注意:是修改,不是文件
git status : 查看状态
git diff <file> : 查看文件修改内容
版本回退
git log : 查看提交记录
git reset --hard HEAD^: 回退到上一个版本
git reset --hard 1094a: 回退到指定版本号对应的版本
git reflog:所有命令的记录
撤销修改
git checkout -- <file>: 撤销工作区对应文件的修改,已经通过git add添加到暂存区的修改不会被撤销。
其实是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”。
注意:git checkout <branchname>,也就是不带"--"时是切换到另一个分支
git reset HEAD <file>: 撤销暂存区对应文件的修改,重新放回工作区,如果要彻底撤销,还要执行git checkout -- <file>命令
git reset命令既可以回退版本,也可以把暂存区的修改回退到工作区。
远程仓库
添加SSKHkey
推送到远程仓库
git remote add origin git@github.com:username/learngit.git: 关联远程仓库,这里以github为例
git push -u origin master: 把本地库的所有内容推送到远程库上,实际上是把当前分支master推送到远程。由于远程库是空的,我们第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。从现在起,只要本地作了提交,就可以通过命令git push origin master把本地master分支的最新修改推送至GitHub。
从远程仓库克隆
git clone git@github.com:username/gitskills.git: 从远程仓库克隆
分支管理
创建与合并分支
git checkout -b dev: 创建dev分支并切换到该分支,相当于git branch dev和git checkout dev两条命令的合并。注意:由于git checkout dev和之前的git checkout -- <file>很像,容易混淆,所以可以使用git switch代替:git switch -c dev-创建并切换到对应分支,git switch dev-切换到已有分支。
git branch: 命令查看当前分支
git merge dev: 合并指定分支dev到当前分支
git branch -d dev: 删除指定分支dev
解决冲突
暂存
git stash: 以把当前工作现场“储藏”起来,等以后恢复现场后继续工作
git stash list: 查看暂存内容
一是用git stash apply恢复,但是恢复后,stash内容并不删除,你需要用git stash drop来删除;
另一种方式是用git stash pop,恢复的同时把stash内容也删了。
cherry-pick
多人协作
git remote和git remote -v
git checkout -b dev origin/dev: 从远程库clone时,默认情况下,只能看到本地的master分支。要在dev分支上开发,就必须创建远程origin的dev分支到本地,就要用这个命令创建本地dev分支:git checkout -b dev origin/dev