豁然高

导航

git checkout

git checkout 相关命令总结

1.git checkout       

  表示核查工作区相对于版本库修改过的文件

2. git checkout  + 分支名 

  表示切换分支

3. git checkout  -b  分支名

  表示以当前分支的当前状态创建新分支并切换到新分支    -b 表示创建新分支

4. git checkout -b 分支名  commitID

  表示以当前分支的commitID提交节点创建新的分支并切换到新分支。此时工作区的内容和切换分之前commitID提交节点的内容一样

5. git checkout  commitID

  是以指定的提交节点创建了一个临时性分支,此临时性分支可用于做实验性修改

6.git checkout  filename 

  当没有提交版本号时将工作区的指定文件的内容恢复到暂存区的状态

     git checkout  . 

  将工作区的所有文件的内容恢复到暂存区的状态

 7.    git checkout <commit> filename 

  当有提交版本号时,表示将工作区和暂存区都恢复到版本库指定提交版本的指定文件的状态,此时HEAD指针不变,此时的状态相当于把工作区的内容修改到指定版本的文件内容后,再把修改的内容添加到暂存区。因此git checkout <commit> filename后,可以直接执行git commit而不需要先执行git add

 

 

操作详细如下

1.git checkout 后面不加任何参数。表示核查工作区相对于版本库修改过的文件

 

2. git checkout  + 分支名       表示切换分支

 

 

3. git checkout  -b  分支名   表示以当前分支的当前状态创建新分支并切换到新分支    -b 表示创建新分支

 

 4. git checkout -b 分支名  commitID   表示以当前分支的commitID提交节点创建新的分支并切换到新分支。此时工作区的内容和切换分之前commitID提交节点的内容一样

 

5. git checkout  commitID   此命令有些特殊,此命令执行后,工作区的内容会变成commitID提交节点的内容,但时HEAD不位于任何分支上,处于游离状态。

更准确的说,此命令是以指定的提交节点创建了一个临时性分支,被别HEAD指向了这个临时分支,你可以在这个临时分支上修改内容并且提交内容。

但是,一但你从临时分支切换到其他分支,这个临时分支就会消失。

这种临时性分支主要用来做一些实验性的修改,实验结束后,只要切换回原分支即可,原分支不会有任何改变。临时性分支上的改动并不会反映到原分支。

但是你如果想把这临时性分支上的改动反映到原分支上,可以通过git checkout  -b  新分支名  命令  以临时性分支的当前状态创建一个永久性分支,再把这个分支合并到原先的分支,然后再删除这个分支即可。

执行git checkout  commitID命令

 

 将临时性分支反映到原分支master上

w_gao@YRL47-80972 MINGW64 /c/w_gao/git learn (master)
$ git log --pretty=oneline
515bbaac44e128a4e3c1f956bb962359090b7dc6 (HEAD -> master, newbranch) AA
cc19754ef1ea7f9e0414eed31592af952094116e (branch2, branch1) Merge branch 'tem'
065be4955a8e3e2e1d7bdf8b181f58a2066b5289 CC
5da296c5bf7d7f674f4a128d1ff77a79f4ee0311 BB
da2b161d76b0fb0b07b56cc4d229f92fa9424d5a AAA
a3239e33bcfb422c3f9fc72a622e50f207a7e61d add l3
22ff17b9dce0a7a2fd9f6c3760cef876e733b0a2 add test2.txt
ae61384fee29e82c3975cae1a03122eb69eee31b (newbranch2) add l1
1d000b4679adca98a168328dad432a9216877442 add file

w_gao@YRL47-80972 MINGW64 /c/w_gao/git learn (master)
$ git checkout a3239e
Note: checking out 'a3239e'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by performing another checkout.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -b with the checkout command again. Example:

  git checkout -b <new-branch-name>

HEAD is now at a3239e3 add l3

w_gao@YRL47-80972 MINGW64 /c/w_gao/git learn ((a3239e3...))
$ git branch
* (HEAD detached at a3239e3)
  branch1
  branch2
  master
  newbranch
  newbranch2
  newbranch3

w_gao@YRL47-80972 MINGW64 /c/w_gao/git learn ((a3239e3...))
$ git add .

w_gao@YRL47-80972 MINGW64 /c/w_gao/git learn ((a3239e3...))
$ git commit -m "add l4"
[detached HEAD 3cfcff2] add l4
 1 file changed, 2 insertions(+), 1 deletion(-)

w_gao@YRL47-80972 MINGW64 /c/w_gao/git learn ((3cfcff2...))
$ git checkout -b newbranch4
Switched to a new branch 'newbranch4'

w_gao@YRL47-80972 MINGW64 /c/w_gao/git learn (newbranch4)
$ git log --pretty=online
fatal: invalid --pretty format: online

w_gao@YRL47-80972 MINGW64 /c/w_gao/git learn (newbranch4)
$ git log --pretty=oneline
3cfcff2024cfd555dffe9fcdffd6d0ded4c4b43f (HEAD -> newbranch4) add l4
a3239e33bcfb422c3f9fc72a622e50f207a7e61d add l3
22ff17b9dce0a7a2fd9f6c3760cef876e733b0a2 add test2.txt
ae61384fee29e82c3975cae1a03122eb69eee31b (newbranch2) add l1
1d000b4679adca98a168328dad432a9216877442 add file

w_gao@YRL47-80972 MINGW64 /c/w_gao/git learn (newbranch4)
$ git branch
  branch1
  branch2
  master
  newbranch
  newbranch2
  newbranch3
* newbranch4

w_gao@YRL47-80972 MINGW64 /c/w_gao/git learn (newbranch4)
$ git checkout master
Switched to branch 'master'

w_gao@YRL47-80972 MINGW64 /c/w_gao/git learn (master)
$ git merge newbranch4
Auto-merging test1.txt
CONFLICT (content): Merge conflict in test1.txt
Automatic merge failed; fix conflicts and then commit the result.

w_gao@YRL47-80972 MINGW64 /c/w_gao/git learn (master|MERGING)
$ git add .

w_gao@YRL47-80972 MINGW64 /c/w_gao/git learn (master|MERGING)
$ git commit
[master b13df65] Merge branch 'newbranch4'

w_gao@YRL47-80972 MINGW64 /c/w_gao/git learn (master)
$ git branch -d newbranch4
Deleted branch newbranch4 (was 3cfcff2).

w_gao@YRL47-80972 MINGW64 /c/w_gao/git learn (master)
$ git branch
  branch1
  branch2
* master
  newbranch
  newbranch2
  newbranch3

 

 当从临时性分支切换到其他分支后,如果还想保存临时性分支的内容,那么可以通过以下命令创建一个新分支来保存临时性分支的内容

w_gao@YRL47-80972 MINGW64 /c/w_gao/git learn ((5f43910...))
$ git branch
* (HEAD detached from a3239e3)
  branch1
  branch2
  master
  newbranch
  newbranch2
  newbranch3

w_gao@YRL47-80972 MINGW64 /c/w_gao/git learn ((5f43910...))
$ git checkout master
Warning: you are leaving 1 commit behind, not connected to
any of your branches:

  5f43910 add l4 l5

If you want to keep it by creating a new branch, this may be a good time
to do so with:

 git branch <new-branch-name> 5f43910

Switched to branch 'master'

w_gao@YRL47-80972 MINGW64 /c/w_gao/git learn (master)
$ git branch newbanch5 5f43910

w_gao@YRL47-80972 MINGW64 /c/w_gao/git learn (master)
$ git branch
  branch1
  branch2
* master
  newbanch5
  newbranch
  newbranch2
  newbranch3

 

 6.git checkout  filename 当没有提交版本号时将工作区的内容恢复到暂存区的状态

 7.    git checkout <commit>  filename 当有提交版本号时,表示将工作区和暂存区都恢复到版本库指定提交版本的指定文件的状态,此时HEAD指针不变,此时的状态相当于把工作区的内容修改到指定版本的文件内容后,再把修改的内容添加到暂存区。因此git checkout <commit> --filename后,可以直接执行git commit而不需要先执行git add

 

posted on 2019-05-31 15:11  豁然高  阅读(51542)  评论(0编辑  收藏  举报