参考答案:git merge和git rebase的区别html
这个问题一样也须要先了解 git 仓库的三个组成部分:工做区(Working Directory)、暂存区(Stage)和历史记录区(History)。git
用来撤销代码仓库中的某些更改。面试
git reset 能够将一个分支的末端指向以前的一个 commit 点。而后再下次 git 执行垃圾回收的时候,会把这个 commit 以后的 commit 都扔掉。git reset 还支持三种标记,用来标记 reset 指令影响的范围:安全
--mixed:会影响到暂存区和历史记录区。也是默认选项;服务器
--soft:只影响历史记录区;app
--hard:影响工做区、暂存区和历史记录区。fetch
注意:由于 git reset 是直接删除 commit 记录,从而会影响到其余开发人员的分支,因此不要在公共分支(好比 develop)作这个操做。.net
git revert 和 git reset 的目的是同样的,可是作法不一样,它会以建立新的 commit 的方式来撤销 commit,这样能保留以前的 commit 历史,比较安全。另外,一样由于可能会覆盖本地的修改,因此执行这个指令以前,你须要 stash 或者 commit 暂存区和工做区的更改。code
git checkout 能够将 HEAD 移到一个新的分支,并更新工做目录。由于可能会覆盖本地的修改,因此执行这个指令以前,你须要 stash 或者 commit 暂存区和工做区的更改。server
git reset 只是把文件从历史记录区拿到暂存区,不影响工做区的内容,并且不支持 --mixed、--soft 和 --hard。
git checkout 则是把文件从历史记录拿到工做区,不影响暂存区的内容。
git revert 不支持文件层面的操做。
回答关键点:
/*设置用户的姓名,用于每次的commit*/ git config - - global user.name "John Simth" /*设置用户的邮箱,用于每次的commit*/ git config - - global user.email john@example.com
/*将现有的项目转变为Git仓库或者新建一个空的仓库*/ git init /*克隆仓库*/ git clone '远程仓库地址'
/*将单个文件添加到暂存区中*/ git add 'filename' /*将当前全部文件添加到暂存区中*/ git add . /*提交文件*/ git commit -m "comment" /*添加并提交文件*/ git commit -a -m "comment"
git branch //查看全部分支 git branch <name> //建立分支 git checkout <name> //切换分支 git checkout -b <name> //建立并切换分支 git branch -d <name> //删除分支,没法删除未被合并的分支 git branch -D <name> //强制删除分支,能够删除未被合并的分支
git merge <branch> //将branch分支合并到当前分支,当前分支拥有branch分支的记录,branch分支不变 git merge <branch1> <branch2> //将分支branch1合并到branch2 /*git默认使用fast-farward快合并模式,会直接将要被合并的分支指向当前分支; *可是--no-ff不会,它会建立合并点; **/ git merge --no-ff <branch> /*将两个分支合并成一个线性的提交*/ git rebase <branch>
/** *显示文件的状态: staged,unstaged和untracked三种状态 *untracked:表示版本库中有新建立的文件,可是并为归入版本库的管理中 *unstaged:将untracked状态的文件执行 git add 命令后文件状态就是unstaged,此时 *意味着git发现这个文件被改动了,可是改动的部分并无提交到仓库中 *staged:表示文件已经被提交到仓库中了 **/ git status /*显示当前分支的commit记录*/ git log /*以图的形式显示当前分支的commit记录*/ git log --graph
/*工做区与暂存区之间的差异,即尚未添加到暂存区的修改,这里比较的是修改内容*/ git diff /*暂存区与上一次提交的差异*/ git diff --cached /*比较两次commit之间的差异*/ git diff <commit id1> <commit id2> /*比较两个分支之间的差异*/ git diff <branch1> <branch2>
/*将HEAD移动到commit id对应的提交点*/ git reset <commit id> /*工做区、暂存区和历史记录区都会被重置commit id提交点*/ git reset --hard <commit id>
git stash //保存当前工做区和暂存区的状态 git stash list //查看全部的stash信息 git stash apply <stash> //回复指定stash,但不删除该stash记录 git stash drop <stash> //删除指定stash git stash clear //删除全部stash记录
git tag <name> //给最新提交打标签 git tag <name> <commit_hash> //给commit_hash提交打标签 git tag //查看全部标签 git show <name> //查看标签信息 git checkout <tagname> //切换到标签 git tag -d <tagname> //能够删除一个本地标签 git push --tags //把本地tag push到远端 git fetch origin tag <tagname> //获取远程tag git push origin --delete tag <tagname> //删除远程tag
git remote add origin git@server-name:path/repo-name.git git push -u origin master git push origin master