Git--分布式版本控制系统
基础概念
工作区:电脑里能够看到的目录
版本库:工作区内隐藏目录.git
暂存区:Git的版本库中存放的stage(index)
HEAD:Git自动创建的第一个分支master后,指向master的一个指针
指令:
git init -- 将当前目录变为git可以管理的库(在本地)
git add “filename” -– 将(新的或修改过的)文件提交的仓库中(将文件修改从工作区添加到暂存区) -- 往Git版本库里添加文件时的第一步
git commit –m “message” -– 将文件提交到仓库,-m 后可以加入提交的说明(把暂存区的所有内容提交到当前分支)--往Git版本库里添加文件的第二步
git status -–查看是否有文件被修改过
git diff “filename” -–查看文件修改内容
git log -– 显示最近到最远的提交日志
git reset –hard HEAD^ -- Git在内部有个指向当前版本的HEAD指针,将当前版本回退到上一个版本
git reset –hard “commit id” -- 将当前版本回退到对应commit id的版本
往Git版本库里添加文件时的第一步
git commit –m “message” -– 将文件提交到仓库,-m 后可以加入提交的说明(把暂存区的所有内容提交到当前分支)--往Git版本库里添加文件的第二步
git status -–查看是否有文件被修改过
git diff “filename” -–查看文件修改内容
git log -– 显示最近到最远的提交日志
git reset –hard HEAD^ -- Git在内部有个指向当前版本的HEAD指针,将当前版本回退到上一个版本
git reset –hard “commit id” -- 将当前版本回退到对应commit id的版本
git reflog – 查看命令历史,以便确定回到未来的那个版本
git diff HEAD – "filename" -–查看工作取和版本库里最新版本的区别
git checkout – "filename" –- 丢弃工作区的修改(还没add),让文件回到最近一次git commit或git add时的状态 ;或用于恢复在工作区误删的,但还存在于版本库中的文件
git reset HEAD "filename" -- 把暂存区的修改撤销掉(add但还没commit),重新放回工作区
git rm “filename” – 从版本库中删除文件
使用小结:
场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令 git checkout -- file
场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步。第一步用命令git reset HEAD file,就回到了场景1,第二步按场景1操作。
场景3:已经提交了不合适的修改到版本库时,想要撤销本次提交,参考版本回退一节,不过前提是没有推送到远程库。
ssh-keygen –t rsa –C youremail@example.com – 通过Git Bash创建SSH Key
git remote add origin git@account:nickname/ReposityName.git -- 关联到GitHub仓库(注:首先要在本机上建立秘钥对,其中将公钥上传到GitHub,之后才能将仓库推送到GitHub上;同时要在GitHub上创建一个Git仓库ReposityName,用于与本地Git仓库进行远程同步)
origin是Git远程库的默认叫法。
git push –u origin master – 将本地库的所有内容推送到远程库上,初次推送时,-u,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来(以后推送便可以通过命令:git push origin master 或 git push origin dev--推送到其他分支dev )
git clone git@url:nickname/reposityname.git -- 将远程git仓库克隆到本地库
git checkout –b dev ( 等价于 git branch dev 和 git checkout dev) -- 创建并切换到dev分支
git merge dev – 用于合并指定分支到当前分支(会使用fast forward模式合并)
git branch –d dev – 删除分支dev
git branch –查看当前分支
git merge –no-ff –m “message” dev –以—no-ff方式git merge
git branch –d <name > --删除一个分支
git branch –D <name> -- 强行删除一个还没有合并的分支
git log –graph – 看到分支合并图
git remote –v –查看远程库的信息
git stash –将当前工作现场“储藏”起来
git stash list – 查看stash中的内容
git stash pop == git stash apply – 恢复“储藏”在stash中的内容 git stash drop – 删除“储藏”在stash中的内容。当有多个stash时,可以通过git stash apply stash@{0}来恢复
应用场景:在当前分支master之下存在分支dev,该分支尚未完全修改完成。此时需要新建分支dev1,便可以通过git stash来隐藏当前dev分支的工作现场
多人协作的工作模式:
1. 首先,可以试图用git push origin branch-name推送自己的修改;
2. 如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并;
3. 如果合并有冲突,则解决冲突,并在本地提交;
4. 没有冲突或者解决掉冲突后,再用git push origin branch-name推送就能成功!
如果git pull提示“no tracking information”,则说明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream branch-name origin/branch-name。
多人协作的工作模式通常是这样:
1. 首先,可以试图用git push origin branch-name推送自己的修改;
2. 如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并;
3. 如果合并有冲突,则解决冲突,并在本地提交;
4. 没有冲突或者解决掉冲突后,再用git push origin branch-name推送就能成功!
如果git pull提示“no tracking information”,则说明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream branch-name origin/branch-name。
git tag “name” – 为最新提交的commit打上标签name
git tag “name” “commit id” – 为对应id的commit打上标签name
git tag –a “tagname” –m “message” “commit id” – 为对应id 的commit打上标签tagname,同时带有说明message
git tag – 查看所有标签
git show “tagname” – 查看tagname标签信息
git tag –d “tagname” – 删除标签tagname
注:标签默认只存储在本地,不会自动推送到远程
git push origin “tagname” – 将某个标签推送到远程
git push origin –tags –一次性推送全部尚未推送到远程的本地标签
git tag –d “tagname” git push origin :refs/tags/tagname --删除远程标签
参考文章:https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000