Git 常用操作

2020/01/21 Coding

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,或某一个编号的stash
  • git stash pop / git stash pop stash@{1}: 与apply类似,唯一区别是pop会同时删除该stash(类似stack的pop),同时后面所有stash的编号会前进一位
  • git stash clear: 删除当前repo所有stash
  • git 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了

Search

    Table of Contents