Git

系统系统性的学习Git,请移步Git中文学习文档,这篇文章只是分类记录一下git的常用命令。
Git版本控制系统VCS基本操作流程图

常用命令总结

Git初始化

git init 将当前目录变为本地仓库(.git)
git clone 克隆一个远程仓库到本地
git clone -b branch url 克隆远程仓库指定branch分支到本地
git config user.name 查看用户名
git config user.email 查看邮箱

设置与配置

git config -global user.name/email "参数" git是分布式版本控制,所以添加用户名和邮箱作为一个标识
ssh -keygen -t rsa -C "email" 生成本地ssh key

本地版本库

git add "filename.*" 添加到暂存区
git commit -m "filename.*" 提交到本地仓库
git commit --amend 尝试重新提交,例如:

1
2
3
4
git add file1 // 将file1 添加至缓存区
git commmit -m "update files" //提交file1到本地仓库,提交完发现忘记file2没有提交,则你可以使用如下命令,提交file2并覆盖之前的提交信息。
git add file2 // 添加file2
git commit -amend // 尝试重新提交commit信息,并覆盖掉之前的提交信息

git status 查看本地仓库状态
git diff filename.* 查看尚未暂存的文件修改的部分
git diff --cachedgit diff --staged查看已暂存的文件修改的部分
git log commit的日志
git log --pretty=oneline 日志显示为缩略版
注:git reset 不加--hard参数对当前工作区文件不会有任何修改,只是对缓存区进行操作。一旦加了参数,操作一定要慎重,否则你当前工作区中的修改将会全部被清除。
git reset HEAD file 将file退回到当前版本(仅仅是对缓存区进行操作)
git reset --hard HEAD^ 退回到上一版本
git reset --hard HEAD^^ 退回到前二的版本
git reset --hard HEAD~100 退回到前100版本
git reset --hard 版本号 退回到一个特定的版本
git reflog 查看所有操作日志,包括分支和删除的commit
git reset --mixed 将当前文件撤出缓存区,保留文件修改
git rm --cached file 删除缓存区file
git checkout -- file 恢复工作区file(取消工作区文件的修改)

远程版本库

git remote add origin 远程git地址 连接
git push -u origin master 把本地库分支master内容推送到远程库(-u 命令在第一次关联本地库和远程库时使用)
git clone url 克隆远程(url)库

git分支操作

首先master主分支应该是非常稳定的,也就是用来发布新版本,一般情况下不允许在上面干活,干活一般情况下在新建的dev分支上干活,干完后,比如上要发布,或者说dev分支代码稳定后可以合并到主分支master上来。

git branch 查看分支
git checkout 切换分支
git checkout -b 创建并切换分支
git merge 合并到当前分支
git branch -d删除某分支
git merge --no-ff -m "注释"分支合并分支禁用fast forward
git stash 将当前分支的工作现场保留下来
git stash list 查看工作现场
git stash apply 恢复内容但是你需要git stash drop删除stash
git stash pop 恢复的同时把stash内容也删除
git remote 查看远程库的信息
git remote -v 查看远程库的详细信息
git push origin master master为本地的分支名推送分支
git checkout -b dev origin/dev dev为分支名,做完开发后
git push origin dev 推送到远程库
git pull 抓取最新的提交,并尝试自动合并到本地当前所在的分支
git fetch 抓取最新的提交,不会自动合并,必须手动。
git rebase 变基,将提交到某一分支上的所有修改都移至另一分支上
git rebase --continue 继续变基操作,一般用于第一次变基失败后,解决冲突文件,将冲突文件添加到缓存区,不要提交,然后再执行此命令。如果提交了,执行git rebase --skip命令取消rebase状态。
git branch --set-upstream dev origin/dev 指定本地dev分支(已经创建的)与远程origin/dev分支的连接
git branch -u origin/dev 指定当前所在连接远程origin/dev分支的连接
git checkout --track origin/dev 创建新的dev分支,制定远程连接origin/dev

如果顺着一个分支走下去能够到达另一个分支,那么Git在合并两者的时候,只会简单的将指针向前推进(指针右移),因为这种情况下的合并操作没有需要解决的分歧——这就叫做 “快进(fast-forward)”。

多人协作

  1. 每开发一个新特性可以新建一个本地特性分支,开发完成后合并到本地主线。
  2. 如果不使用特性分支开发可以使用git stash保存当前的工作空间。
  3. 远程代码和本地代码合并有两种方式,git pullgit fetchgit pull命令会自动合并远程代码,冲突后需要解决冲突后提交。git fetch不自动和本地代码合并,需要手动merge。
  4. 在合并时,根据项目情况使用变基git pull --rebase可以保持自动合并的情况下进行变基。一般情况下,远程库不保留本地操作历史,所以本地与远程代码合并时最好使用变基。
  5. 使用变基原则:只对尚未推送或分享给别人的本地修改执行变基操作清理历史,从不对已推送至别处的提交执行变基操作,这样,你才能享受到两种方式带来的便利。