Git常用指令
秘钥
生成秘钥
$ ssh-keygen (按照提示指定存放目录和密码)
其它形式:$ ssh-keygen -t rsa -C "your_email@example.com" (...)
查看公钥
$ cat ~/.ssh/id_rsa.pub
配置
用户信息
$ git config --global user.name "John Doe"
$ git config --global user.email johndoe@example.com
文本编辑器
$ git config --global core.editor emacs (默认通常是Vim)
检查配置信息
$ git config --list (所有)
$ git config <key> (检查某一项配置,如:git config user.name)
创建版本库
$ git init
把文件添加到版本库
step1: 用命令 git add 告诉Git,把文件添加到仓库
$ git add file.txt (一次提交多个文件 $ git add file1.tet file2.txt ...)
step2: 用命令 git commit 告诉Git,把文件提交到仓库
$ git commit -m "提交描述xxx"
查看文件状态
$ git status
查看文件修改内容
$ git diff file.txt
或查看工作区和版本库里最新版本版本的区别:
$ git diff HEAD -- file.txt
查看提交日志(从最近到最远,HEAD指向当前版本)
$ git log 或 $ git log --oneline (简短commit id) 或 $ git log --pretty=oneline (完整commit id)
查看命令历史(可查看版本回退后不见的commit id,以便重新返回到“未来”某个版本)
$ git reflog
查看文件内容
$ cat file.txt
版本回退
$ git reset --hard commit_id (commit_id 具体的提交ID)
$ git reset --hard HEAD^ (HEAD^ 表示回退到上个版本)
撤销工作区的修改
$ git checkout -- file.txt (命令中“--”很重要,没有“--”,就变成“切换到另一个分支”的命令了)
分两种情况:
一种是file.txt文件自修改后还没有被存放到暂存区(未git add),现在,撤销修改就回到和版本库一模一样的状态;
一种是file.txt文件已添加到暂存区后,又做了修改,现在,撤销修改就回到添加到暂存区后的状态(已git add的内容不变,未git add的内容全部撤销修改)。
总之,就是让这个文件回到最近一次git commit 或git add 时的状态。
撤销暂存区的修改
$ git reset HEAD file.txt (把暂存区(git add)的修改撤销掉,重新放回工作区)
删除文件
step1:直接删除文件,或者用rm命令(没有git前缀)
$ rm file.txt
step2: 面临两个选择,确定要删除还是重新恢复
重新恢复:
$ git checkout -- file.txt (git checkout
其实是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”)
确定要删除(需要执行两个命令):
$ git rm file.txt (或 git add file.txt)
$ git commit -m "提交描述"
关联本地仓库到远程仓库(远程空仓库)
step1: 关联远程仓库
$ git remote add origin git@server-name:path/repo-name.git
step2: 推送本地分支的所有内容到远程仓库
$ git push -u origin master (第一次推送时加上参数 -u,会将本地的master分支和远程的master分支关联起来)
step3: 推动后续的本地提交到远程仓库
$ git push origin master (后续的推送不需要加参数 -u,会自动关联本地的master分支和远程的master分支)
注意:本地的仓库名需要与远程的仓库名相同
关联本地仓库到远程仓库(远程仓库已有内容)
step1: 关联远程仓库
$ git remote add origin git@server-name:path/repo-name.git
step2: 拉取远程内容到本地
$ git pull origin master --allow-unrelated-histories
step3: 解决冲突
step2有时会出现冲突(master|MERGING),需要根据实际情况解决冲突
step4: 提交合并后的内容
$ git add file.txt
$ git commit -m “解决冲突”
$ git push -u origin master
说明:step2中,执行命令git push -u origin master 会因为远程仓库中已有提交而失败,执行git pull 会因为还未关联远程分支而失败;
删除与远程库间的关联
$ git remote rm origin (删除成功后可重新关联新的远程库)
从远程库克隆
$ git clone git@server-name:path/repo-name.git (或 git clone https://server-name:path/repo-name.git)
说明:
① Git支持多种协议,默认的 git:// 使用ssh,但也可以使用 https 等其它协议
② 使用 https 除了速度慢以外,还有个最大的麻烦是每次推送都必须输入口令(有的只需要第一次输入)
分支常用命令
$ git branch (查看本地分支;git branch -r 查看远程分支;git branch -a 查看本地和远程分支)
$ git branch <branch_name> (创建本地分支)
$ git checkout <branch_name> 或者 git switch <branch_name> (切换分支)
说明:git switch 命令是git v2.23 版本新发布的
$ git checkout -b <branch_name> 或者 git switch -c <branch_name> (创建并切换分支)
$ git checkout -b <branch_name> origin/<branch_name> (检出远程分支到本地)
$ git branch --set-upstream-to=origin/<branch_name> <branch_name> (建立本地分支和远程分支的关联,远程库中已有要关联的分支才成功)
$ git push --set-upstream origin <branch_name> (建立本地分支和远程分支的关联,远程库中没有要关联的分支)
$ git merge <branch_name> (合并branch_name分支到当前分支)
$ git branch -d <branch_name> (删除本地分支)
$ git branch -D <branch_name> (强行删除,可强行删除有提交未合并的分支)
$ git push origin --delete <branch_name> (删除远程分支)
$ git push origin <branch_name> (推送本地提交到远程分支)
$ git branch -vv (查看本地分支与远程分支的追踪关系)
$ git fetch origin -p (删除远程仓库已删除的远程分支,或:git fetch --prune origin)
$ git push -f origin <branch_name> (强推)
删除远程已删除的分支
step1: 查看remote地址,远程分支,还有本地分支与之相对应关系等信息
$ git remote show origin
step2: 根据提示,删除远程仓库中已不存在的远程分支
$ git remote prune origin
合并、解决冲突
step1: 合并其它分支内容到当前分支
$ git merge branch_feature
step2: 解决冲突(当合并发生冲突时,状态变为 mater|MERGIN)
① 根据具体情况手动解决冲突
② git add file.txt
③ git commit -m "confict fixed" (状态恢复为 master)
④ git push origin master
提示:查看分支的合并情况,git log --graph --pretty=oneline --abbrev-commit
禁用Fast forward模式
$ git merge --no-ff -m "合并描述信息" develop
暂存
$ git stash list (查看所有暂存)
$ git stash (暂存,默认,最新的暂存stash@{0},之前的暂存索引依次增加1)
$ git stash save "save message" (暂存,添加暂存描述)
$ git stash show [stash@{<num>}] (显示增减的行数,默认显示最新的暂存的改动)
$ git stash show -p [stash@{<num>}] (显示具体的改动)
$ git stash apply [stash@{<num>}] (恢复stash,但不删除stash)
$ git stash pop [stash@{<num>}] (恢复stash,同时删除stash)
$ git stash drop [stash@{<num>}] (删除stath)
$ git stash clear (删除所有暂存)
复制其它分支的提交内容到当前分支
$ git cherry-pick <commit_id>
查看远程库信息
$ git remote
$ git remote -v (“fetch”, 可拉取;“push”,可推送。没有“push”的链接,说明没有推送权限)
合并提交
$ git rebase i start_commit_id end_commit_id
获取远程主机的更新到本地
$ git fetch origin