Git 总结
使用 Git 感觉就是使用三个箱子,分别是:
- 工作区
- 暂存区
- 版本库
而使用 Git 就是将版本不同的代码在这三个箱子里转换存放
Git 语法
下面举出最常用的Git语句
提交代码
git init
: 初始化 Git 文件git add <fileName>
:提交工作区的版本代码到暂存区,<fileName>
被-A
代替后表示提交所有修改过后的文件git commit <-m "msg">
: 提交暂存区的版本代码到版本库,<"msg">
是提交信息git commit --amend <-m "msg">
: 替代最近一次提交,此时会出现输入界面,可以按Esc
键后再输入两次 大写Z
键以退出,此时需要push
到远程库就可能需要使用git push origin master -f
强制更新了
撤回代码
撤回代码有 reset
和 checkout
两种方法,区别在于 checkout
会产生匿名分支。以及要注意 reset
方法中 --soft
和 --hard
以及默认的 --mixed
模式的区别。
git reset HEAD <fileName>
:使库的版本代码覆盖暂存区的版本代码,起撤回add
命令的作用git checkout -- <flieName>
:使暂存区的版本代码覆盖工作区的版本代码,起恢复代码的的作用(注意--
后有空格),使用git checkout --
命令可以查看可操作的文件名git checkout <id>
:产生分支,回退版本库代码,id
可使用git log
查找git reset --soft HEAD~<number>
:起回溯版本的作用,其中仅回溯版本库的版本,不添加number
,默认回溯一个版本git reset HEAD~<number>
:起回溯版本的作用,是git reset -mixed HEAD~<number>
简写,回溯版本库和暂存区的版本代码,不添加number
,默认回溯一个版本git reset --hard HEAD~<number>
:起回溯版本的作用,回溯版本库、暂存区以及工作区的版本代码git reset commit-id
:指向某个版本
链接远程库
git remote add origin git@github.com:Seiei-Leung/learngit.git
:先有本地库,后有远程库,然后关联远程库git clone git@github.com:Seiei-Leung/gitskills.git
:先有远程库,后有本地库,然后克隆远程库git push -u origin master
: 关联远程库,第一次推送master
分支的所有内容git push origin master
:此后,每次本地提交后,推送到远程库git pull origin master
:从远程库拉出版本代码
本地电脑首次连接远程数据库,需要添加 sshkey,在添加之后,还需要在命令行里面输入
ssh -T git@github.com
,只是在询问 (yes/no)的时候,记得输入 yes 后才回车
其它
git log <-number> <--pretty=oneline>
:查看提交版本日志,number
查看数,输入大写字母Q
退出git reflog
:包括未来版本git status
: 三个箱子的版本代码状态
忽略文件
创建 .gitignore
文件起忽略提交某些文件作用,内容例如:
*.py[cod]
*.so
*.egg
*.egg-info
dist
build
.gitignore
只能忽略那些原来没有被track的文件,如果某些文件已经被纳入了版本管理中,再修改 .gitignore
是无效的,此时需要:
git rm -r --cached .
git add .
git commit -m 'update .gitignore'
git init #初始化所在目录为Git仓库
git add <file> ... #添加文件到暂存区(stage)
-f <file> ... #强制添加到暂存区(可用于添加忽略文件)
git commit -m "提交说明" #从暂存区提交到版本库
git status #查看仓库当前状态
git diff [file] #比较工作区和暂存区的差异
git diff --cached [file] #比较暂存区和版本库的差异
git diff HEAD -- [file] #比较工作区和版本库的差异
git log #查看提交历史
git log -1 #查看最后一次提交信息(-2 则是最后两次)
git log --pretty=oneline #单行格式显示提交历史
--graph #显示分支合并图
--abbrev-commit #简写的commit_id
git reflog #查看所有操作记录,包括删除的commit记录
git reset --hard HEAD^ #回退到上一版本
# HEAD 表当前版本, HEAD^ 表上一版本,HEAD^^ 表上两版本,HEAD~99 表上99版本。
git checkout -- <file> #撤销工作区的修改
git reset HEAD <file> #撤销暂存区的修改
rm <file> ... #工作区删除
git add <file> ... #将修改提交至暂存区
git commit -m "说明" #提交到版本库
git rm <file> ... #删除工作区和暂存区文件
git commit -m "说明" #提交到版本库
git remote add origin git@github.com:UserName/repo-name.git #添加远程仓库
git remote rm origin #取消远程绑定
git remote #查看远程库信息
-v #显示详细信息
git push -u origin <branch> #推送并关联指定分支到远程库
git clone git@server-name:path/repo-name.git #将远程仓库克隆到当前目录
git pull #拉取远程仓库内容
git branch <branch> #创建分支
git checkout <branch> #切换到指定分支
git checkout -b <branch> #创建并切换到该分支
git branch #查看现有分支
git branch -d <branch> #删除指定分支
git branch --set-upstream <branch_local> <branch_remote> #指定本地分支与远程分支的链接
git merge <branch> #合并指定分支到当前分支
--no-ff <branch> #禁用快速合并
git merge --no-ff -m "提交说明" <branch> #普通方式合并,并附提交说明
git stash #保存当前工作环境(包括工作区和暂存区)
git stash list #查看保存的工作列表
git stash apply [stash@{X}] #恢复工作状态,但不删除stash内容
git stash pop [stash@{X}] #恢复工作状态,并删除stash内容
git stash drop [stash@{X}] #删除stash内容
git branch -D <branch> #强制删除分支(常用于未合并的分支)
git tag #查看现有标签
git tag <tag_name> #给当前所在的commit打标签
git tag <tag_name> <commit_id> #给指定commit打标签
git tag -a <tag_name> -m "标签说明" <commit_id> #给指定commit打标签,并附说明
-s <tag_name> -m "标签说明" <commit_id> #用gpg私钥签名
-d <tag_name> #删除标签
git show <tag_name> #显示标签信息
git push origin <tag_name> #推送标签到远程库
git push origin --tags #推送所有未推送的标签到远程库
git push origin :refs/tags/<tag_name> #删除远程标签(先删除本地,再使用该命令删除)