git常用命令

39 阅读6分钟

git

配置操做

 git config --list
 git config [--local | --global | --system] user.name 'your_name'
 git config [--local | --global | --system] user.email 'your_email@domain.com' #注:优先级为local > global > system
 git config --unset [--local |--global | --system] user.name
 git config --unset [--local |--global | --system] user.email

cherry-pick

 git cherry-pick 1a2aa4b
 git cherry-pick --skip
 git cherry-pick --abort

rebase

 git rebase -i 1a2aa4b^ #调整从这1a2aa4b次提交,到最后一次提交
 git rebase -i HEAD~10 #调整最近10次提交的日志,或合并多次提交为1次,让log更好看
 p pick = use commit
 s squash = use commit but meld into previous commit 
 git rebase --abort
 git rebase --continue

restore

 git restore .  #恢复所有工作区修改的文件
 git restore --staged . #恢复所有暂存区中得文件 执行完次命令修改得内容将从暂存区移至工作区

branch

 git branch 分支名                    #创建 一个新分支,并不会自动切换到新分支中去
 git branch                      #查看分支列表
 git branch -d name              #删除分支
 git branch -a                                   #查看所有分支,包括远程分支。
 git branch -v                   #可以查看每一个分支的最后一次提交
 git branch -m [old-branch-name] [new-branch-name]:重命名指定的分支。
 git branch name commitHash      新建一个分支并且使分支指向对应的提交对象
 git branch –merged              查看哪些分支已经合并到当前分支
 git branch --no-merged          查看所有包含未合并工作的分支
 git branch --set-upstream-to=origin/my_branch my_branch:将本地分支与远程分支关联起来。
 git branch --unset-upstream [branch-name]:取消本地分支与远程分支的关联。

checkout

 git checkout 分支名              切换分支
 git checkout -b 分支名             #先创建分支,再切换到新创建的分支,相当于 git branch 分支名 和 git checkout 分支名两个命令。
 git checkout -b [branch] [remotename]/[branch]  #创建分枝a,并切换至分支a,并将分支a的上游分支设置为分支b
 git checkout -- 文件名         将在工作目录中对文件的修改撤销
 git checkout --track origin/daves  #假设你想要从远程的daves分支签出到本地的daves  #--track 是 git checkout -b [branch] [remotename]/[branch] 的简写)
 git checkout [commit-hash] [file-name]:   #恢复指定提交中的文件到工作区。

merge

 git merge branchName    #将branchName分支合并当前分支    
 git merge branchName --squash    #将branchName分支合并当前分支,并将branchName上的所有提交合并成一次提交

pull

 git pull #等同于 git fetch + git merge FETCH_HEAD
 git pull --rebase origin [branchName] #等同于git fetch + git rebase FETCH_HEAD

stash

 #暂存命令
 git stash               #暂存还没有提交的修改
 git stash save '第一次暂存'              #暂存+备注
 git stash apply                 重新应用暂存
 git stash apply stash@{2}       如果不指定一个储藏, Git 认为指定的是最近的储藏
 git stash list                  查看存储
 git stash pop              #来应用储藏然后立即从栈上扔掉它
 git stash drop  stash@{2}     #删除指定的暂存项
 git stash clear   #删除所有的暂存项
 git stash show -p #显示最新的暂存文件具体的改动
 git stash show -p stashname  #显示指定的暂存文件具体的改动

commit

 #修改最后一次提交
 git commit –amend

reset

 git reset --soft HEAD~/哈希值      #不会修改工作区和暂存区中的修改
 git reset --[mixed] HEAD~/哈希值   #默认 不会修改工作区中的修改,暂存区中的修改会被清空
 git reset --hard HEAD~/哈希值      #把工作和暂存区中的内容清空,HEAD指针移动至上一次提交的位置

revert

 git revert commitId #非merge的commit 创建一个新的提交来反转以前的更改,当你想要撤销一个或多个特定的提交时,而不是删除它们就可以使用此命令
 git revert -m [1/2] [commitId] #撤销merge类型的提交

log

 #log中的一些操作
 git log --oneline --decorate --graph --all      查看项目分叉历史
 git log --author= 'name'                    显示某个作者的日志
 git log -p filepath                             查看某个文件的详细修改
 git log --grep='commitMessage'      按提交信息模糊搜索日志
 git reflog      #只要HEAD发生变化,reflog就会有记录 

--oneline:以一行的形式显示提交历史,每个提交仅显示一行摘要信息。

--graph:在提交历史中显示 ASCII 图形表示的分支合并情况。

--all:显示所有分支的提交历史,包括主分支和其他分支。

--author=<author>:只显示指定作者的提交历史。

--since=<date>:只显示指定日期之后的提交历史。

--until=<date>:只显示指定日期之前的提交历史。

--grep=<pattern>:只显示包含指定模式的提交消息。

remote & push & show

 #远程仓库的一些操作
 git remote show [remote-name]   #查看远程仓库信息
 git remote rename pb paul   #将远程仓库名pb改成paul 注意,对远程仓库的重命名,也会使对应的分支名称发生变化,原来的 pb/master 分支现在成了 paul/master。
 git remote add origin https://gitee.com/lidongkuishihaoren/shangpinhui-admin.git #添加远程仓库地址
 git remote -v:#查看当前所有的远程仓库
 git remote rm [name]:#删除指定名字的远程仓库。
 git remote prune [name]:#删除指定远程仓库的所有已经不存在的远程分支。
 git push --set-upstream origin master
 git push origin --delete my-branch #删除远程分支
 git show commitId #查看具体的修改信息
 git show commitId  --stat               查看某次提交修改了哪些文件
 git show :my_file.txt   #查看暂存区中my_file.txt

ls-file

 git ls-file #可以列出Git仓库中当前跟踪的所有文件
 git ls-files "*.txt" #过滤列出特定文件类型的文件
 git ls-files -m #列出所有已修改但未被暂存的文件
 git ls-files --delete #列出所有被删除但尚未提交的文件
 git update-index --skip-worktree a.txt   #忽略一个已经提交过的文件
 git ls-files -v . | grep "^S"  # 查看所有忽略过的文件 
 git update-index --no-skip-worktree a.txt  # 不再忽略该文件
 git rm --cached -r .idea   #Git 会将指定的文件或目录从 Git 的索引中移除。但是它们仍然存在于工作目录中,不会被删除。这个命令通常用于忽略已经被 Git 追踪的文件或目录。例如,如果你不希望将某个敏感文件添加到版本控制中,但已经被错误地添加,你可以使用 `git rm --cached -r` 命令将其从 Git 索引中移除,然后将其添加到 `.gitignore` 文件中,以确保 Git 不再追踪它。

diff

 git diff branch1 branch2 -- path/file.txt # 比较两个分支的相同文件
 git diff HEAD HEAD~1 比较最近两次提交
 git diff HEAD HEAD~2 比较最近和倒数第三次提交
 git diff HEAD HEAD^  比较最近两次提交
 git diff HEAD HEAD^^ 比较最近和倒数第三次提交
 #本地保存私钥,将公钥设置再gitee或github上,使用下面命令可以检查是否设置成功
 ssh -T git@github.com
 ssh -T git@gitee.com
 ​
 #假设现在代码库中共有四次提交如下:
 A -> B -> C -> D(HEAD)
 HEAD^ #表示上一次提交 C
 HEAD^^ #表示上两次提交 B
 ​
 HEAD~ #表示上一次提交 C 同HEAD^
 HEAD~2 #表示上两次提交 B
 HEAD~3 #表示上三次提交 A