git 常用命令及git使用原理自我理解

git常用命令:
 
git merge 和本地文件存在冲突,如何不commit的情况下能够merge(避免造成 merge commit,给代码review造成额外工作量)
// 把本地修改暂存隐藏起来
git stash
// pop出最近的一次暂存
git stash pop
 
如何从本地切换到1个remote不存在的新分支,并commit+push
 
git checkout -b your-new-branch
git add <files>
git commit -m <message>
git push --set-upstream origin user-console
 
 
git切换到远程存在的分支
git checkout -b v0.9rc1 origin/v0.9rc1
 
git添加和删除upstream
//添加新的upstream
git remote add upstreamName upstreamUrl
//fetch upstream
git fetch upstreamName
//merge upstream code into codebase
git merge upstreamName/branchName
 
//删除已存在的upstream
git remote remove upstreamName
 
//查看当前所有upstream及其地址
git remote -v
 
 
git回退版本,有两个命令,一个是git revert,一个是gitreset
revert的原理是把代码更新到要回退的那个版本,并提交一个新的commit,老的所有commit history都不丢失。
git reset的原理是直接清除掉不想要的几个commit,
git reset --soft表示删除commit后,commit的内容会进入到本地代码中可以重新修改提交
git reset --hard表示删除commit以及commit的内容,不可恢复
例如 git reset HEAD~1 --soft  表示删除最近一个commit,其内容进入本地代码中重新修改提交
 
关于merge没有冲突但是会产生多余commit的问题。
git pull或merge的时候,如果有更新,并且在merge之前本地进行了没有push的代码commit,会造成本地repo和origin repo的diverge,从而这次merge会被当做一次分支合并处理。为避免这种情况发生,首先是尽量多的commit;其次是在每次stage+commit之前可以fetch+merge一下,防止本地产生和远程diverge的commit。
 
git原理自我理解
git个人理解代码分为如下几个区域:A.本地代码  B.暂存区 C.本地repo D.remote repo本地copy  E.remote repo
基于git的分布式的理念,没有一个统一的中央,每个开发者本地有一份repo的全拷贝,即上述D.
1.D和E之间通过git fetch命令从E->D单向数据传输。
2.git merge命令会从D向C中的当前工作分支进行同步,如果没有冲突会直接同步更新到B暂存区和A本地代码中;有冲突则需要处理冲突。
3.git pull相当于fetch + merge
4.git add 把代码从A本地添加到B暂存区
5.git commit 从B暂存区合并到C本地repo并生成commit id
6.git push 从C本地repo合并到Dremote repo本地copy并同步到E remote Repo
7.git status 获取当前A和B的状态,以及C相比于D之间commit的前进和落后关系,不会联网和E进行比较。
8.git diff 不加参数默认本地代码A同B暂存区进行比较;加了分支例如develop和C中的develop进行比较;加了origin/develop和D中的分支进行比较;应该不能和E进行比较。
原文地址:https://www.cnblogs.com/yujunhua/p/13476646.html