目录
初始化git仓库
$ git clone <仓库地址>
$ git init
修改和提交
-
查看状态
#查看当前状态 $ git status #查看已缓存文件状态 $ git status –short
-
显示差异
#显示当前工作目录和暂存区的差异 $ git diff #显示缓冲区和最近一次提交的差异 $ git diff –cached #比较两个分支的差异 $ git diff <branch1> <branch2>
-
提交文件到缓存区
#提交单个文件到暂存区,新文件被标记为“已跟踪”,已跟踪且被修改文件标记为“已暂存” $ git add <file> #提交多个文件到暂存区 $ git add file1 file2 file3 #提交所有新文件和已修改的文件, 将当前目录及其子目录中的所有文件提交到暂存区。包括新文件、已修改的文件和已删除的文件 $ git add . #提交所有新文件和已修改的文件,但不包括已删除的文件, 将所有已跟踪的文件的更改提交到暂存区。包括已修改的文件和已删除的文件,但不包括新文件 $ git add -u #提交所有新文件、已修改的文件和已删除的文件,将所有文件的更改提交到暂存区。包括新文件、已修改的文件和已删除的文件 $ git add -A
-
移动/命名文件
#重命名文件 $ git mv <old-file> <new-file> #文件移动目录 $ git mv <file> <new-directory> #文件移动目录并重命名 $ git mv <old-file> <new-file>
-
删除文件
#删除指定文件 $ git rm <file> #删除文件并跳过工作目录 $ git rm --cached <file> #删除目录及内容 $ git rm -r <directory>
-
提交文件到仓库
#把暂存区的更改提交到仓库 $ git commit -m<message> #把已修改文件(跳过暂存区)提交到仓库 $ git commit -am <message> #通过窗口提交多行信息 $ git commit
查看提交历史
#显示完整提交记录
$ git log
#显示简介的提交记录
$ git log --online
#显示指定分支提交记录
$ git log branch-name
#显示指定文件提交记录
$ git log <file>
#显示指定作者提交记录
$ git log --author=”Author Name”
#显示指定日期范围内的提交记录
$ git log --since=”2 weeks ago” --untile”1 week ago”
#显示指定提交范围内的记录: 开始的commit…结束的commit
$ git log <start-commit>..<end-commit>
#显示图形化的提交记录
$ git log --graph --oneline –all
#显示更改内容
$ git log -p
#查看远程仓库的提交记录
$ git log <remote/branch>
撤销
-
改变提交记录的撤销
#软回退,但保留所有更改在暂存区 $ git reset --soft <commit> #混合回退,取消暂存区的更改,但保留工作目录中的更改 $ git reset --mixed <commit> #硬回退,重置暂存区和工作目录 $ git reset --hard <commit> #移除暂存区所有文件 $ git reset #回退指定提交 $git reset <commit> #移除暂存区指定文件 $git reset <file>
-
保留提交记录的撤销
#撤销单个提交 $ git revert <commit> #撤销一系列提交 $ git revert <start-commit>..<end-commit> #撤销遇到冲突时停止,解决冲突后继续撤销 $git revert --continue #撤销遇到冲突时停止,解决冲突后取消撤销 $git revert --abort
分支与标签
-
分支
#列出所有本地分支 $ git branch #查看所有远程分支 $ git branch -r #查看所有本地和远程分支 $ git branch -a #创建新分支 $ git branch <branch-name> #重命名当前分支 $ git branch -m <new-branch-name> #重命名一条分支 $ git branch -m <old-branch-name> <new-branch-name> #删除分支,分支未合并则停止删除 $ git branch -d <branch-name> #强制删除未合并的分支 $ git branch -D <branch-name> #切换到指定分支 $ git checkout <branch-name> #创建并切换到新分支 $ git checkout -b <branch-name> #从指定的提交中检出文件 $ git checkout <commit> <file> #撤销工作目录中的更改 $ git checkout <file> #检出远程分支并创建本地分支 $ git checkout -b <local-branch-name> origin/<remote-branch-name>
-
标签
#列出所有标签 $ git tag #创建轻量标签 $ git tag <tag-name> #创建注释标签 $ git tag -a <tag-name> -m "Tag message" #查看标签信息 $ git show <tag-name> #删除本地标签 $ git tag -d <tag-name>
合并
#将分支的更改合并到当前分支
$ git merge <source-branch>
#创建一个新的合并提交
$ git merge --no-ff <source-branch>
#使用指定的合并策略进行合并
$ git merge -s <strategy> <source-branch>
#刚执行了 git merge命令,但还没有提交合并结果,可以取消合并操作
$ git merge --abort
#告知已解决所有冲突,继续进行合并
$ git merge --continue
#将当前分支的更改重新应用到 <base-branch> 上
$ git rebase <base-branch>
#交互式变基允许你更精细地控制提交历史
$ git rebase -i <base-branch>
#解决冲突之后继续操作
$ git rebase --continue
#取消本次操作
$ git rebase --abort
远程操作
-
远程操作
#列出所有远程仓库的名称 $ git remote #列出所有远程仓库及其对应的 URL $ git remote -v #显示指定远程仓库详细信息 $ git remote show <remote-name> #添加一个新的远程仓库 $ git remote add <remote-name> <url> #删除指定的远程仓库 $ git remote remove <remote-name> #修改远程仓库名称 $ git remote rename <old-name> <new-name>
-
下载
#获取所有远程仓库的数据 $ git fetch #获取指定远程仓库的数据 $ git fetch <remote-name>
-
拉取
#从远程仓库获取数据合并到当前分支 $ git pull #从指定远程仓库获取数据合并到当前分支 $ git pull <remote-name> #从指定远程仓库的指定分支获取数据并合并到当前分支 $ git pull <remote-name> <branch-name>
-
推送
#推送当前分支到默认远程仓库 $ git push #推送指定分支到指定远程仓库 $ git push <remote-name> <branch-name> #推送所有分支到指定远程仓库 $ git push <remote-name> --all #推送所有标签到指定远程仓库 $ git push <remote-name> --tags #推送单个标签到远程仓库 $ git push <remote-name> <tag-name> #删除远程标签 $ git push <remote-name> --delete <tag-name> #推送指定分支到指定远程仓库并设置上游分支关系 $ git push -u <remote-name> <branch-name>
临时保存
#保存当前工作目录中未提交的更改
$ git stash
#查看stash列表
$ git stash list
#最新的 stash 应用到当前工作目录,但不会从stash栈中移除
$ git stash apply
#最新的stash应用到当前工作目录,并从stash栈中移除
$ git stash pop
#从stash栈中移除最新的stash
$ git stash drop
#应用指定的stash,索引值越小的数据越新
$ git stash apply stash@{<index>}
#应用并移除指定的stash
$ git stash pop stash@{<index>}