Git
yuankaiqiang Lv5

git stash

git stash会把所有未提交的修改(包括暂存的和非暂存的)都保存到当前分支中,用于后续恢复当前工作目录

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 查看现有list
git stash list
# 保存未提交的修改
git stash
# 保存未提交的修改并添加记录信息
git stash save "完成xxx"
# 恢复之前缓存的工作目录并删除第一个最新的stash,也可以使用git stash pop stash@{0}指定应用并删除哪个缓存的工作区
git stash pop
# 恢复之前缓存的工作目录不删除最新的stash,也可以使用git stash apply stash@{0}指定应用并删除哪个缓存的工作区
git stash apply
# 移除stash,使用git stash drop stash@{0}指定删除哪个
git stash drop
# 查看stash的修改,加上-p显示详细的不同,也可以指定具体哪个
git stash show
# 从stash创建分支,缓存的工作区中的文件与当前分支中的文件可能存在冲突时,检出你储藏工作时的所处的提交,重新应用你的工作,如果成功,将会丢弃储藏。
git stash branch testchanges

git标签

1
2
3
4
# 查看标签
git tag
# 创建标签并添加描述
git tag -a v1.4 -m "1.4版本"

撤销缓存区

1
2
3
4
# 撤销暂存区的修改,将文件恢复到工作区:
git reset HEAD <file>
# 将所有修改从暂存区中移除,并恢复成上一次提交的状态
git reset HEAD

git远程强制覆盖本地

1
2
3
4
5
# 从远程仓库获取最新的分支和提交信息
git fetch --all
# 将本地仓库的 HEAD 移动到远程分支的最新提交,强制覆盖本地修改
git reset --hard origin/master
git reset --hard origin/<branch-name>

配置远程远程服务器Git

  1. 安装Git

    1
    2
    3
    sudo apt-get install git
    git config --global user.name "用户名"
    git config --global user.email "邮箱"
  2. 创建一个Git用户

1
2
3
useradd git //创建用户,用户名为git 
userdel git //删除用户
passwd git //设置git用户密码
  1. 创建一个git文件夹,方便将所有git项目放入其中
1
2
3
cd /home //路径根据自己喜好,此处是在根目录的home里创建 
mkdir git //创建文件夹
Chmod 777 git //设置git文件夹访问权为 所有用户都可以访问
  1. 使用git用户进入git文件夹创建git仓库

    1
    2
    3
    4
    5
    6
    7
    8
    su git //进入git用户
    cd git //进入git文件夹
    mkdir BoltStructure //创建项目文件夹,此处以BoltStructure为例 cd BoltStructure //进入文件夹
    git init //git化此文件夹,此时会在该文件夹里生成三个文件
    cd .git //进入.git这个文件中对git仓库进行配置
    vim config //打开config文件进行编译(由于git默认拒绝push操作,所以要修改config文件进行设置)
    [receive]
    denyCurrentBranch = ignore
  2. 创建本地仓库

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    #进入本地创建的项目
    git init #git化文件夹,使其变为git仓库
    git remote add origin git@49.234.179.217:/home/git/BoltStricture #绑定远程的git库
    git remote -v #查看绑定
    git remote remove origin # 若绑定错误,则删除绑定
    git add . #将当前目录下所有文件交由git仓库管理
    git commit -m "123" #commit更新本地git库
    git push origin master #push上传到远程git库
    git branch mybranch # 创建分支
    git checkout mybranch # 切换分支
    git checkout -b mybranch # -b为 branch和checkout的合并命令
    git branch -d mybranch # 删除分支
    git branch -D mybranch # 强制删除分支
    git branch -a # 查看远程分支
    git branch # 查看本地分支
    git branch -v # 查看当前分支最后一次提交
    git rebase master # 更新master主线上的东西到该分支上
    git merge A # 合并两个分支,A分支的内容merge到当前分支上面

    · git add -A 提交所有变化

    · git add -u 提交被修改(modified)和被删除(deleted)文件,不包括新文件(new)

    · git add . 提交新文件(new)和被修改(modified)文件,不包括被删除(deleted)文件

merge和rebase

marge 特点:自动创建一个新的commit如果合并的时候遇到冲突,仅需要修改后重新commit
优点:记录了真实的commit情况,包括每个分支的详情
缺点:因为每次merge会自动产生一个merge commit,所以在使用一些git 的GUI tools,特别是commit比较频繁时,看到分支很杂乱。

rebase 特点:会合并之前的commit历史
优点:得到更简洁的项目历史,去掉了merge commit
缺点:如果合并出现代码问题不容易定位,因为re-write了history

选择

如果你想要一个干净的,没有merge commit的线性历史树,那么你应该选择git rebase
如果你想保留完整的历史记录,并且想要避免重写commit history的风险,你应该选择使用git merge

 评论