安装
-
Linux:
yum install git
或sudo apt-get install git
- Windows:安装这个工具,安装后右键选“Git Bash Here”
- Mac:打开 XCode > Preferences > Downloads > Command Line Tools,Install
注意
Git 没有类似 svn 的“签出并锁定”,所有人都可以签出同一个文件,如果有人先签入,其他人签入时需要先“签出”并处理冲突后再合并(push 时会提示让先 pull)。
克隆到本地并关联远程库
git clone https://a.b.c/ycdj.git # 会在当前目录中创建 ycdj 目录
开始开发
# 配置自己的信息(签入时备注的署名会用) git config --global user.name="Mr.User" git config --global user.email="user@honzh.com" # 创建并切换到本地 dev 分支 git checkout -b dev # 从服务器拉取并合并最新代码 git pull # 检查不需要同步的文件和文件夹 # 根据实际情况修改配置文件 /.gitignore # 解决冲突 # pull 时不能自动合并的代码,需要人工处理,冲突长这个样子: >>>>>>> 冲突部分开始 自己的代码(好多行) ======= 服务器的代码(好多行) <<<<<<< 冲突部分结束 # 开始写代码 #### 代码直接在编辑器里修改,想怎么改就怎么改 # 写好了开始提交 cd ycdj git status # 查看修改的文件清单 git checkout -- file.js # 放弃对 file.js 的修改(还原文件内容) git rm src/test.js # 删除文件(提交后服务器的这个文件也会被删除) git add src/newFile.js # 增加这个待提交的文件,这个文件可以是新建的也可以是改过的 git add . # 把所有修改加入暂存区(包括删除动作,add 过才会被 commit) git diff HEAD -- src/newFile.js # 将本地的 test.js 与版本库里的对比一下,HEAD 表示最新版本 git reset HEAD src/newFile.js # 从暂存区中移除文件(提交时不含这个修改过的文件) git commit -m "feat 增加了单位模块" # 提交 # 合并到本地主分支 git checkout master git merge dev # 合并不了的冲突需要人工处理 git branch -d dev # 同步到服务器 git pull # 拉取最新(如果直接 push 出错了还得拉)有冲突的话就合并一下 git push origin master # 推到服务器,不需要写备注,会使用 commit 时的备注
常用命令
git status # 查看改动的文件 git stash # 清理暂存区(隐藏所有的改动,“还原”成始初状态) git checkout -b dev # 创建并切换到dev分支 git stash pop # 恢复暂存区 git checkout master # 切换到master分支 git comit -m "初始化" # 提交修改(仅本地,未同步到服务器)
分支
git branch # 查看分支列表 git branch dev # 创建 dev 分支 git checkout dev # 切换到 dev 分支 git branch -b dev # 创建并切换到 dev 分支 git branch -m oldName newName # 改名,新名称使用中时会提示 git branch -M oldName newName # 改名,如果新名称使用中则覆盖 git branch -d dev # 删除 dev 分支,需要先切换到非 dev 分支 git branch -D dev # 强行删除 dev 分支(丢弃修改) git merge dev # 合并 dev 到当前分支,加 --no-ff 可普通模式合并以保留合并历史
远程库
git clone https://a.b.c/d.git # 克隆并关联远程库 git remote # 查看远程库,加上 -v 可显示详细信息 git push origin master # 把当前分支提交到服务器的 master 分支 git push origin dev # 把当前分支提交到服务器的 dev 分支 git remote set-url https://1.2.3/4.git origin # 修改服务器地址 git pull # 拉取最新代码并合并 git branch --set-upstream dev origin/dev # 关联本地 dev 分支与远程 dev 分支 git checkout -b branch-name origin/branch-name # 在本地创建和远程分支对应的分支
多人协作
-
首先,可以试图用
git push origin branch-name
推送自己的修改; -
如果推送失败,则因为远程分支比你的本地更新,需要先用
git pull
试图合并; - 如果合并有冲突,则解决冲突,并在本地提交;
-
没有冲突或者解决掉冲突后,再用
git push origin branch-name
推送就能成功。
恢复指定版本的文件
git log git reset --head HEAD^ # 恢复到上一个版本 git reset --hard cb926e # 恢复到 cb926e7ea50ad11b8f9e909c05226233bf755030 版本,版本号不用写全 # HEAD 表示当前版本 # HEAD^ 表示上一个版本 # HEAD^^ 表示上上个版本 # HEAD^^^ 表示上 3 个版本 # HEAD~100 表示上 100 个版本 git reflog # 查看操作历史
临时修改小问题
# 清理当前 dev 分支的工作区 git stash # 保存当前工作区 # 从 master 建立临时分支 git checkout master # 切换到 master 分支 git checkout -b issue-101 # 从当前分支创建并切换到 issue-101 分支 git add file.js # 只把修改的文件中的 file.js 提交到“待提交区” git commit -m "fix bug 101" # 保存修改(只是本地,未同步到服务器) # 将临时分支合并到 master 并删除临时分支 git checkout master # 切换到 master 分支 git merge --no-ff -m "merged bug fix 101" issue-101 # 把分支 issue-101 的修改合并到当前分支 git branch -d issue-101 # 删除 issue-101 分支 # 回到dev分支继续工作 git checkout dev # 切换回 dev 分支 git stash list # 查看可恢复的暂存区 git stash apply # 恢复并保留暂存区 git stash drop # 删除暂存区 git stash pop # 恢复并删除暂存区 git stash apply stash@{0} # 恢复指定暂存区