安装

环境: 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。
----_20180517180153

如果你想放弃这次合并,执行以下命令:

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