Git 命令总结与声明


声明

本站 git 初级教程 目录里,写在本篇文章之前的文章绝大部分都是在 http://www.liaoxuefeng.com 网站学习到的。在这里感谢网站的作者,我也会继续发扬互联网的开源精神,把自己的一些学习心得发布在本网站。

Git 命令总结

$ git init                  #将当前文件夹初始化为 git 仓库
$ git add daodesign.txt     #将工作区中的 daodesign.txt 文件提交到暂存区
$ git commit -m "update 1"  #将暂存区的文件提交到版本库,并备注 update 1
$ git status                #查看当前库的状态(是否有没有提交的文件等)
$ git diff HEAD             #查看当前库的工作区暂存区与版本库里的区别
$ git diff HEAD -- daodesign.net  #查看 daodesign.net 文件在工作区暂存区与版本库里的区别
$ git log                   #查看当前库的提交历史记录
$ git log --pretty=oneline  #查看当前库的提交历史记录,一条记录显示一行
HEAD       #当前版本
HEAD^      #上一个版本
HEAD^^     #上两个版本
HEAD~100   #上100个版本
$ git reset --hard HEAD^    #回退到上一个版本
$ git reset --hard a85bcd   #回退到 commit id 为 a85bcd 的版本(a85bcd 是 commit id 的前几位)
$ git reflog                #查看当前库的命令历史记录
$ git checkout -- daodesign.txt  #用版本库里的版本替换掉工作区里的版本
$ git reset HEAD daodesign.txt  #用暂存区里的版本替换掉工作区里的版本,并撤销暂存区里的版本
$ git rm daodesign.txt      #删除版本库里的 daodesign.txt 文件(需要 git commit -m "delete test.txt" 确认)。
#------------------------------------
# 远程仓库 - 远程仓库的默认名称是 origin
#------------------------------------
$ ssh-keygen -t rsa -C "youremail@example.com"  #创建 SSH Key,即 id_rsa 密钥 / id_rsa.pub 公钥。
$ git remote add origin git@github.com:daodesign/learngit.git 本地版本库关联远程版本库
$ git push -u origin master #第一次,把本地版本库更新到远程版本库
#加上了 -u 参数,Git 不但会把本地的 master 分支内容推送的远程新的 master 分支,还会把本地的 master 分支和远程的 master 分支关联起来,在以后的推送或者拉取时就可以简化命令。
$ git push origin master    #第二次及以后,把本地版本库更新到远程版本库
$ git clone git@github.com:daodesign/learngit.git   #SSH协议,从远程库克隆到本地版本库
#------------------------------------
# 分支管理
#------------------------------------
$ git checkout -b dev       #创建并切换到 dev 分支,即:
$ git branch dev            #创建 dev 分支
$ git checkout dev          #切换到 dev 分支
$ git branch                #查看当前分支(带 * 号的即为当前分支)
$ git merge dev             #把 dev 分支合并到当前分支 [Fast-forward 快进模式,合并速度快,合并后看不出曾经做过合并]
$ git merge --no-ff -m "merge no-ff" dev  #把 dev 分支合并到当前分支 [--no-ff 模式,合并后有历史记录,能看出曾经做过合并]
$ git branch -d dev         #删除 dev 分支
$ git branch -D dev         #强行删除 dev 分支(dev 分支未合并过)
$ git log --graph --pretty=oneline --abbrev-commit   #查看分支合并情况
$ git log --graph --pretty=oneline
$ git log --graph
$ git stash                 #把当前工作现场“储藏”起来,可以多次 stash
$ git stash list            #查看“储藏”起来的工作
$ git stash apply           #恢复“储藏”起来的工作,但“储藏”在 stash 的内容并不删除
$ git stash apply stash@{0}    #根据序号(从0开始)恢复“储藏”起来的工作,但“储藏”在 stash 的内容并不删除
$ git stash drop            #删除“储藏”在 stash 的内容
$ git stash pop             #恢复“储藏”起来的工作,并删除“储藏”在 stash 的内容
#------------------------------------
# 多人协作
#------------------------------------
$ git remote                #查看远程库的信息
$ git remote -v             #查看远程库的详细信息
origin  git@github.com:daodesign/learngit.git (fetch)
origin  git@github.com:daodesign/learngit.git (push) #如果没有推送权限,就看不到 push 的地址
$ git push origin master    #推送 master 分支到远程库 master 分支
$ git push origin dev       #推送 dev 分支到远程库 dev 分支
$ git checkout -b dev origin/dev   #在本地创建 dev 分支,并克隆远程 origin 的 dev 分支到本地 dev 分支
# 上面这个命令在测试时不好用,我用的以下命令
$ git checkout -b dev #先在本地创建 dev 分支
# 进入 dev 分支
$ git branch --set-upstream dev origin/dev   #把本地 dev 分支关联远程 dev 分支
$ git pull #把远程 dev 分支克隆到本地 dev 分支
#------------------------------------
# 标签
#------------------------------------
$ git tag v1.0                    #将当前分支内容打上标签 v1.0
$ git tag v0.9 6224937            #根据  commit id 打标签
# 创建带有信息的标签 -a 标签名(可省略),-m 说明文字,-s 用私钥签名一个标签
$ git tag -a v0.1 -m "说明文字" 3628164
$ git tag -s v0.2 -m "signed version 0.2 released" fec145a
$ git tag                        #查看所有标签  注意,标签不是按时间顺序列出,而是按字母排序的。
$ git show v0.9                  #查看具体某个标签的信息
$ git tag -d v0.1                #删除本地库标签
$ git push origin :refs/tags/v0.9   #删除远程库标签(应先删除本地,然后再删除远程)
$ git push origin v1.0           #推送标签到远程库
$ git push origin --tags         #一次性推送全部尚未推送到远程的本地标签
#------------------------------------
# .gitignore
#------------------------------------
$ git add App.class              #如果 .gitignore 中忽略了 .class,则添加不会成功
$ git add -f App.class           #但是可以强制添加
$ git check-ignore -v App.class  #查找 App.class 文件为何不能添加
.gitignore:3:*.class    App.class #结果显示 .gitignore 的第3行规则忽略了该文件
#------------------------------------
# 自定义配置
# 参数 --global 是针对当前用户起作用的,如果不加,那只针对当前的仓库起作用。
# 每个仓库的 Git 配置文件都放在 .git/config 文件中。
# 当前用户的 Git 配置文件放在用户主目录下的一个隐藏文件 .gitconfig 中。
$ cat .git/config #查看配置文件
#------------------------------------
$ git config --global color.ui true      #让 Git 显示颜色,会让命令输出看起来更醒目
$ git config --global alias.st status    #status 的别名配置成 st
# 配置之前 git status
# 配置之后 git st
$ git config --global alias.co checkout
$ git config --global alias.ci commit
$ git config --global alias.br branch
$ git config --global alias.unstage 'reset HEAD'  #把暂存区的修改撤销掉(unstage),重新放回工作区
$ git config --global alias.last 'log -1'         #显示最后一次提交信息

CREATE

Clone an existing repository

$ git clone ssh://user@domain.com/repo.git

Create a new local repository

$ git init

LOCAL CHANGES

Changed files in your working directory

$ git status

Changes to tracked files

$ git diff

Add all current changes to the next commit

$ git add .

Add some changes in to the next commit

$ git add -p 

Commit all local changes in tracked files

$ git commit -a

Commit previously staged changes

$ git commit

Change the last commit Don‘t amend published commits!

$ git commit --amend

COMMIT HISTORY

Show all commits, starting with newest

$ git log

Show changes over time for a specific file

$ git log -p 

Who changed what and when in

$ git blame 

BRANCHES & TAGS

List all existing branches

$ git branch -av

Switch HEAD branch

$ git checkout 

Create a new branch based on your current HEAD

$ git branch 

Create a new tracking branch based on a remote branch

$ git checkout --track 

Delete a local branch

$ git branch -d 

Mark the current commit with a tag

$ git tag 

UPDATE & PUBLISH

List all currently configured remotes

$ git remote -v

Show information about a remote

$ git remote show 

Add new remote repository, named

$ git remote add  

Download all changes from , but don‘t integrate into HEAD

$ git fetch 

Download changes and directly merge/integrate into HEAD

$ git pull  

Publish local changes on a remote

$ git push  

Delete a branch on the remote

$ git branch -dr 

Publish your tags

$ git push --tags

MERGE & REBASE

Merge into your current HEAD

$ git merge 

Rebase your current HEAD onto Don‘t rebase published commits!

$ git rebase 

Abort a rebase

$ git rebase --abort

Continue a rebase after resolving conflicts

$ git rebase --continue

Use your configured merge tool to solve conflicts

$ git mergetool

Use your editor to manually solve conflicts and (after resolving) mark file as resolved

$ git add 
$ git rm 

UNDO

Discard all local changes in your working directory

$ git reset --hard HEAD

Discard local changes in a specific file

$ git checkout HEAD 

Revert a commit (by producing a new commit with contrary changes)

$ git revert 

Reset your HEAD pointer to a previous commit …and discard all changes since then

$ git reset --hard 

…and preserve all changes as unstaged changes

$ git reset 

…and preserve uncommitted local changes

$ git reset --keep 

<< Git 搭建Git服务器 Git push时出现错误 GH007: Your push would publish a private email address. >>
  • 作者 建站迷

    建站迷

    让天下没有难做的网站!
    解决中小型企业的无站之伤。



没有账号? 忘记密码?

社交账号快速登录