checkout某一个commit 里的文件
git checkout <COMMIT#> <path/to/the/messed/up/file>
Example git checkout asdf1g ./WebContent/Study_Consent.jsp
git reset 抛弃本地修改
git reset --hard HEAD
git stash 临时存储当前修改
git stash
如果当前有未完成的工作,但需要临时切换到另外的任务,可以用stash存储当前修改,得到一个clean working directory
git stash
/git stash save "stash name"
: 存储一个匿名或者有名字的stash。 推荐后者。注意:stash存储类似栈,最新的stash总会在最前面(编号0)git stash apply
/git stash apply stash@{0}
: 使用最新的stash,或某一个编号的stashgit stash pop
/git stash pop stash@{1}
: 与apply类似,唯一区别是pop会同时删除该stash(类似stack的pop),同时后面所有stash的编号会前进一位git stash clear
: 删除当前repo所有stashgit stash drop
/git stash drop stash@{1}
删除最新stash或某一个stash
如果有untracked files, 需要用git stash save -u "name"
切换到旧版本 git checkout commit
有时我们想切换到旧版本,例如想要查看某个bug在过去版本里是否存在。git checkout
不仅可以用来切换branch,还能切换到某个commit
直接使用git checkout 1ad3d3
,结果会产生一个detached head,并且所有修改都无法保存。
更好的方法是,checkout建立一个临时branch,测试结束后删除
git checkout -b test-branch 56a4e5c08
...do something...
git checkout master
git branch -d test-branch
只add modified files
git add -u
放弃某个file的修改,拿到最新版本
git checkout origin/master filename
将一个Repo的commit加到另一个Repo
有这样一种情况,有两个Repo A 和 B 同一个项目但是两个独立开发分支, A push 了一个commit到服务器,现在想把这个commit加到Repo B中. 最麻烦的方法肯定是按照commit details把改变内容一点点复制到B中, 但可以采用更自动的方法:
- 把A加入到B的remote当中,这样B可以fetch A的变化
git remote add [A's address]
添加完成后git remote -v
查看是否添加成功 - 切换到B的folder,
git fetch A master
从A拿到我们想添加的commit, 复制commitID git cherry-pick [commitID]
会把这个commit添加到当前HEAD后面- 更新当前HEAD后就可以push了