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

posted @ 2019-09-07 16:57  LucasLin  阅读(396)  评论(1编辑  收藏  举报