git init :在当前文件夹创建一个文档库,自动产生一个master分支。当当前文件夹已有文档库时,不会再次创建也不会修改,只会将隐藏的.git文件夹显示出来
git branch:查看当前所有分支
git branch 要创建的分支名称: 从最新的commit创建一个新的分支
git branch 要创建的分支名称 commit 节点标识符或者标签: 从指定的节点或标签中创建新的分支
git branch -m 新的分支名称:将当前分支名称修改为新的分支名称
git branch -d 分支名称:删除分支。如果存在未合并的内容,会报错
git branch -D 分支名称: 强制删除分支
git checkout 分支名称:切换分支
git checkout -b 新分支名称:创建新的分支后自动切换到该分支。相当于先执行git branch 再执行git checkout
git checkout -b 新分支名称 commit 节点标识符或标签:从指定节点创建新的分支后自动切换到该分支
git merge 分支名称A:将分支名称A合并到当前工作的分支
git merge --no-ff 分支名称:合并时留下合并记录。
git merge --abort:合并过程中发成冲突时,使用此命令可以放弃合并。git 文档库和文件夹的内容都会恢复到未合并前的状态
git rebase 分支名称A:将当前工作的分支B移动到分支A中,然后再切换到分支A中,执行 git rebase 分支B,此时没有冲突的情况分支A和分支B的内容一致
git checkout 分支A
git merge master
以上两个命名是将master的内容合并到分支A。当master分支和分支A在持续更新时,还需要再次将master分支修改的内容合并到分支A。此时这种情况是正常的状态,但是commit节点演进图就比较复杂,我们可以使用rebase指令:
把另一个分支的修改运用到当前的分支,等当前分支开发完成后再使用merge指令合并
git checkout 分支A
git rebase master
当然rebase命令也可能出现冲突。出现冲突是要不使用git rebase --abort恢复到未执行rebase之前的状态。要不就是解决冲突后使用 git add 和gitrebase --continue 继续执行rebase操作。rebase 仅适用于当前分支仅限于自己使用,否则会出现和其他人文档库数据不一致的情况
git add . :把新增的文件和被修改的文件加入git索引中,被删除文件不会记录在git 索引中(执行commit之后,git不知道哪些文件备删除了)
git add -u:把被修改的文件和被删除的文件加入git索引中,新增的文件不会加入git 索引中,停止更新新增的文件
git add -A:把新增的文件、修改的文件、删除的文件全都加入git索引中,停止更新已被删除的文件
git commit :将git 索引中的文件内容加入文档库中
git diff 可以查看差异,如果没有显示任何差异,可表明冲突已解决
git reset --hard HEAD^:将当前工作分支恢复到未合并前的状态,--hard表示文件夹中的文件也要一起恢复
git reset --hard commit 节点:回到指定的commit的节点
git revert commit 节点:回到指定的commit节点的前一个节点的文件状态
git revert --abort:执行git revert发生冲突时,可以使用此命令取消revert操作
git reflog HEAD或者是任一分支名称:查询HEAD或者其他分支的变动记录
git clone 是复制出一个本地文档库,与远程文档库是父与子的关系,在本地的文档库配置文件中有一个origin属性记录这个关系
git clone “远程git文档库的路径” “本地git文档库的路径”:适用于远程git文档库在我们自己的计算机上
git clone //计算机名称/“远程git文档库的路径” “本地git文档库的路径” :适用于在局域网的计算机上,并以共享文件夹的方式进行共享
git clone http://IP/“远程git文档库的路径” “本地git文档库的路径”:适用于在web服务器上执行git
git clone git账号@ssh服务器IP:“远程git文档库的路径” “本地git文档库的路径”:在ssh服务器上,创建了一个git程序专用账号
git clone 远程文档库路径 -b 分支名称:复制指定分支的文档库
git push origin 分支名称:将指定分支的最新状态,送到“远程git文档库”中存储。这个命令不会记录本地git文档库和远程git的分支之间的对应关系
git push --set-upstream origin 分支名称:也是将指定分支最新状态送到远程git文档库,但是会在配置文件中记录本地git文档库的分支和远程git文档库的分支之间的对应关系。--set-upstream可使用简写-u。使用gitconfig -l|grep 分支名称可以查看
git push:没有加任何参数会检查当前所在分支是否记录了他在对应远程git文档库的分支,如果有就会传送更新,如果没有就不会执行更新
git push -all:将本地git文档库中的所有分支都传送给远程git文档库
--注意 git push命令有可能会有冲突,因为git push命令相当于执行 git fetch(更新本地分支的状态,让它和远程文档库的最新状态一致) 在执行gitmerge
git pull :从远程git文档库中取回当前分支的最新数据,并且将远程git文档库的分支合并到本地git文档库的分支
目前我常用的工作流程是
1、使用git clone 复制一个文档库到本地
2、然后时候git checkout -b 新的分支名称 创建一个属于自己的分支
3、然后进行修改删除文件后先使用git add 、git commit 将我们的修改提交到本地文档库中
4、然后使用git push -u 分支名称:将我们的分支内容同步到远程git 文档库中
5、在git上提交合并请求,当我们分支的内容合并到主分支上
6、在自己的分支上执行git pull 主分支名称 将主分支的内容合并到自己的分支中
--参考《完全学会git+github+gitserver的24堂课》