美文网首页
git 常用命令

git 常用命令

作者: 竹剑道 | 来源:发表于2018-12-24 18:12 被阅读20次

    配置git

    git config --global user.name/user.email
    // 配置级别
     --local // 默认,高优先级,只影响本仓库
    --global // 中, 影响到当前用户的所有git仓库
    --system // 低, 影响全局git 仓库
    

    初始化仓库

    git init [[path]/ [path]--bare]
    

    基本操作

    git status // 对状态的跟踪 内容状态:工作目录/ 暂存区/提交区  文件状态: 未跟踪/已跟踪
    git add // 添加文件到暂存区(同时文件被跟踪)
    git add . // 他会监控工作区的状态树,使用它会把工作时的所有变化提交到暂存区,包括文件内容修改(modified)以及新文件(new),但不包括被删除的文件。
    git add -u // 他仅监控已经被add的文件(即tracked file),他会将被修改的文件提交到暂存区。add -u 不会提交新文件(untracked file)。(git add --update的缩写)
    git add -A  // 是上面两个功能的合集(git add --all的缩写)
    git rm // 删除
    -- cached // 仅从暂存区删除
    --f // 从暂存区与工作目录删除
    git rm $(git ls-files --deleted) // 删除所有被跟踪,但是在工作目录被删除的文件
    git ls-files // 展示所有被跟踪的文件
    git checkout -- <file>  // to discard changes in working directory(撤销工作目录的修改,缓存区内容覆盖工作目录)
    git reset HEAD <file> // to unstage (撤销暂存区内容, 即暂存区被提交区内容覆盖)
    git checkout HEAD -- <file> // 提交区的内容覆盖暂存区和工作目录,即撤销所有修改到上次commit
    
    git commit // 提交到 提交区
    -m 'message' // 提交时的message
    -a -m'message' // 直接从工作目录提交到提交区
    -m"message" -n // m:message, n :no-verify
    
    git-log // 查看提交的历史记录
    --oneline // 简短记录,一行
    
    

    git 中别名的设置

    git config alias.<shortname>  '<fullcommand>' // 为fullcommand 配置别名shortname
    // eg:
    git config --global alias.lg "log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit
     "
    

    显示工作目录与暂存区的差异

    git diff // 工作目录与暂存区的差异
    git diff -cached [<reference>] // 暂存区与某次提交差异,默认为HEAD
    git diff <reference> // 工作目录与某次提交的差异
    

    忽略文件

    .gitignore //在添加时忽略匹配文件,仅作用于**未跟踪**的文件
    

    分支管理

    git branch // 分支的增删改查
    git branch <branchName> // 查看分支
    git branch -a // 查看本地和远程分支
    git branch -m "daily/0.0.1" // 在本分支修改名字
    git branch –d <branchName> // 如果是要删除本地已经合并了的分支
    git branch –D <branchName> // 如果是要删除本地未合并的分支
    git branch -v 显示所有分支信息
    git checkout <branchName> 通过移动HEAD检出版本,切换分支
    git checkout -b <branchName> 创建分支,并切换到该分支
    git checkout -b <branchName> origin/<branchName> 以origin/branchName 为基础创建分支并切换到该分支
    git fetch origin <origin branchName>:<local branchName> // 使用该方式会在本地新建分支x,但是不会自动切换到该本地分支x,需要手动checkout。
    
    git reset -将当前分支会退到历史某个版本
    git reset --mixed <commit> // (默认), 把分支(branch&HEAD)移动到 commit, 且把暂存区内容替换为commit
    git reset --soft <commit> // 暂存区和工作目录不改变
    git reset --hard <commit> // 且把暂存区和 工作目录都用commit内容替换掉
    // reset 捷径
    A^ // A的上一次提交
    A~n // A之前的第n次提交
    // eg:
    git reset HEAD^
    git reset HEAD~5
    git reset HEAD 撤销 add .到add 前。
    git reset --hard HEAD^ 撤销到commit的上一次,如果要撤销到上99次,可以用 git reset --hard~99;
    git reset --hard 9425c47b6 //版本号
    
    git reflog // 查询所有提交log,包括回退前的版本
    
    git stash // 保存当前的暂存区和工作目录到git stash 栈中,并从最近的一次提交中读取相关内容,让暂存区和工作目录保持clean,从而可以切换分支等一系列操作。
    git stash save 'message' // 同 git stash 并增加 message,便于理解保存内容
    git stash pop: 从Git stash栈中读取最近一次保存的内容,恢复工作区的相关内容。由于可能存在多个Stash的内容,所以用栈来管理,pop会从最近的一个stash中读取内容并恢复。
    git stash apply stash@{0} // 让保存的stash@{0} 中的内容从新回到工作目录和暂存区
    git stash drop stash@{0} // 删除git stash栈中的stash@{0}内容
    git stash list: 显示Git stash栈内的所有备份,可以利用这个列表来决定从那个地方恢复。
    git stash clear: 清空Git栈。此时使用gitg等图形化工具会发现,原来stash的哪些节点都消失了。
    
    git merge // 合并分支, 默认为 fast-forward合并
    git merge branchA // 把branchA 合并到当前分支
    git merge branchA branchB // 把branchA合并到branchB
    git merge --no-ff  branchA // 合并分支,并保留分支的合并信息
    git cat-file -p HEAD|| branch|| commitHash // 查看具体分支的详细信息 -p 参数为 'Pretty-print the contents of object based on its type.'
    

    reset vs checkout

    reset 与checkout命令对比图

    rebase 变基

    git rebase branchA// 检修提交历史基线,使合并的分支branchA成为线性
    git rebase -- onto branchA commitId // 同上,只不过合并了commitId,而不是本分支的所有内容。
    尽量不要在共有分支上使用rebase,因为rebase会从新生成commitID会导致你本地的部分commidId和队友的不同,从而造成没必要的冲突
    
    git rebase 
    while(存在冲突) {
        git status
        找到当前冲突文件,编辑解决冲突
        git add -u
        git rebase --continue
        if( git rebase --abort ) 如果rebase过程中,你想中途退出,恢复rebase前的代码则可以用命令 
            break; 
    }
    使用git rebase合并多次commit
    1.首先使用git log查看一下提交历史
    2. git 压缩  git rebase -i HEAD~4
    
    git pull = git fetch + git merge
    git pull --rebase = git fetch + git rebase
    

    git rebase -i 的使用

    使用别名

    git tag tagName branch || commitId // 把 此时此刻的branch 或者commitId 打上名为tagName 的tag
    git tag -l // 列出tag的list
    git push origin tagName // 把tag推到origin
    

    创建本地远程提交仓库

    git init [path] --bare // --bare 表示为裸仓库,是因为这个仓库只保存git历史提交的版本信息
    

    远程提交

    源仓库和远程仓库合并
    git remote -v 查看远程主机状态
    git remote rm origin 删除远程仓库
    git remote add upstream git@github.com:xxx/xxx.git 添加源仓库地址
    git fetch upstream 从源仓库更新同步代码
    git merge upstream/master 合并到本地代码
    git push 向自己远程仓库推送刚才同步源仓库后的代码
    
    git fetch // 本地更新远程同步
    $ git push origin newBranch  // 把分支同步到远程,如果远程没有该分支,直接创建一个(但是前提是local分支名字要和远程相同)
    git push origin --delete thisBranch // 删除远程分支
    
    git clone   // 克隆一个远程仓库
    

    gid

    相关文章

      网友评论

          本文标题:git 常用命令

          本文链接:https://www.haomeiwen.com/subject/xozwyxtx.html