安装
环境: linux
安装git:略。。
常用命令
版本库管理
创建版本库
# 初始化版本库
mkdir learngit && cd learngit
git init
# 创建裸仓库
git init --bare repositorieName.git # 创建裸仓库
克隆仓库
git clone xxx.git # 普通克隆
# 获取单一分支,且最近 n 次提交的代码
git clone --depth n -b branchName --single-branch xxx.git
版本回滚
# 回滚到上一版本
[~]# git reset --hard HEAD^
# 回滚到某一版本
[~]# git reset --hard xxxxxxx
文件版本管理
# 添加文件到版本库
git add testFile.txt
# 把工作时的所有变化提交到暂存区
git add .
# 提交
git commit -m "提交的注释" ```
## 移除文件/文件夹
# 还没有加到版本控制中
在.gitignore中添加,移除文件/文件夹
# 已经添加到版本中
git rm -r --cached 文件/文件夹
## 忽略被管理的文件
# 忽略工作区的文件修改
git checkout -- filepathname 或 git checkout .
# 从暂存区回退到工作区
git reset HEAD filename 或 git reset HEAD
## 清楚为被跟踪(git add)的文件
git clean -f
分支管理
git remote add remoteName git@github.com:michaelliao/learngit.git # 添加远程分支
git push -u origin master # 推送到远程 -u 表示指定默认的后续分支
git push origin -d branchName # 删除远程分支
git checkout -b 本地分支名x origin/远程分支名x # 拉取远程分支并创建本地分支
git pull origin xxx # 拉取远程分支并且合并到当前分支
git branch -D BranchName # 删除本地分支
git merge xxx # 合并 xxx 分支到当前分支
# 合并其他分支的部分文件(合并完成后文件状态为暂存区,即add状态)
git checkout branchName fileName1 fileName2 ...
合并多个 Commit
使用 git rebase 命令
查看提交历史,git log
commit 3ca6ec340edc66df13423f36f52919dfa3......
commit 1b4056686d1b494a5c86757f9eaed844......
commit 53f244ac8730d33b353bee3b24210b07......
commit 3a4226b4a0b6fa68783b07f1cee7b688.......
从HEAD版本开始往过去数3个版本
git rebase -i HEAD~3
指名要合并的版本之前的版本号
请注意3a4226b这个版本是不参与合并的,可以把它当做一个坐标
git rebase -i 3a4226b
选取要合并的提交
执行了rebase命令之后,会弹出vi编辑状态,头几行如下
pick 3ca6ec3 '注释**********'
pick 1b40566 '注释*********'
pick 53f244a '注释**********'
将pick改为squash或者s,第一个pick不能改,修改结果如下
然后输入:x/:wq保存并退出
pick 的意思是会执行这个 commit
squash 的意思是这个 commit 会被合并到前一个commit
pick 3ca6ec3 '注释**********'
s 1b40566 '注释*********'
s 53f244a '注释**********'
如果有冲突,需要解决冲突
git add .
git rebase --continue
这时我们会看到 commit 的 vi 编辑界面
输入提交注释,然后输入:x/:wq保存并退出
其中, 非注释部分就是两次的 commit message, 你要做的就是将这两个修改成新的 commit message。
如果你想放弃这次合并,执行以下命令:
git rebase --abort
常见错误
- git pull遇到错误:error: Your local changes to the following files would be overwritten by merge:
解决办法:
git stash
git pull origin master
git stash pop
- git pull 报错:refusing to merge unrelated histories
出错原因:本地和远程的没有一个共同的 commit。 所以 git 认为不是同一个项目,不让提交。
解决办法:添加--allow-unrelated-histories
告诉 git 合并的是同一个项目。
如:git pull origin dev --allow-unrelated-histories