git

1. git reset到过去的版本后有什么方法可以回到未来的版本:

  可以直接在终端中向上查找历史commit后的版本

  git reflog 可以查看命令历史,以便确定要回到未来的哪个版本

2.暂存区

  git add实际上就是把文件放到stage暂存区

3.untracked: 是没有被添加过的新文件 (删除untracked的文件可以用git clean -f)

  not staged: 是add过的文件,即跟踪文件,再次修改没有add

4.git diff 和git diff --cached

  git diff 是未放入暂存区的文件(也就是工作区)和暂存区的文件的比较,也就是修改后还没有暂存起来的变化内容

      git diff --cached 比较的是暂存区和分支里的内容差异,已经暂存的想要添加到下次提交里的内容

  git diff HEAD 是工作区和仓库分支的比较 

解释: 暂存区的文件目录和最近一次git add之后工作区的文件目录是一直的,因此当修改完文件使用git diff可以看到工作区和暂存区的差异)(此时暂存区是上一次add之后的目录,而工作区是刚修改完的样子),使用git add加入新的修改,再git diff就不会有输出,因为咱出去被更新为最新的工作目录)

git diff --cached同理,只是比较的是暂存区和分支里的内容差异(分支保持上一次git commit的目录)

git

5.撤销修改: git co -- file  撤销工作区相对于暂存区的想改

       git co HEAD file 撤销暂存区的修改,重新放回工作区

6.分支合并: 在master上:  git merge master

       几种合并方式: Fast-forward: “快进模式”, 直接把master指向dev的当前提交

               需要手动合并

              git merge --no-ff -m "merge with no-ff" dev

7.有关git stash

   git stash list: 查看stash的列表

   git stash pop: 恢复最近一次的改动

     git stash pop stash@{id}或者 git stash apply stash@{id}: 据说可以pop某一个特定的stash

      pop和apply的区别: 貌似是pop执行后会将stash id从stash list删除,apply不会删除

     git stash clear: 清空stash list

     git stash drop [<stash>]: 删除某一个stash进度,默认删除最新的。([<stash>]里面的stash代表进度的编号形如:stash@{0}, <>尖括号内的必填)

8.多人协作开发时可能遇到no tracking information的问题: 说明本地分支和远程分支的链接关系没有创建,可以用命令git branch --set-upstream-to <branch-name> origin/<branch-name>

9.本地分支与远程分支的追踪关系: 

  git branch -vv: 查看当前详细分支信息(可看到当前分支与对应的远程追踪分支)

  修改对应的远程分支: 进入.git文件,进入其中的config文件,直接修改merge = refs/heads/mastermerge = refs/heads/dev

10.没有详细参阅rebase部分的内容

最后的最后,如果想给当前的项目去除版本管理,请用 find . -name ".git" | xargs rm -Rf