git 常用命令
1、删除远程库
使用命令git remote rm name (解除了本地与远程的绑定关系,并不是物理上删除了远程库)
使用前建议使用 git remote -v 查看远程库信息
2、分支管理
查看分支
使用命令git branch
可以查看所有分支,当前分支前面会有(*),操作如下:
$ git branch
dev
hotfix
* master
创建分支
使用命令git branch branch-name
可以用来创建一条分支,操作如下:
$ git branch feature
$ git branch
dev
feature // 新创建分支
hotfix
* master
切换分支
使用命令git checkout branch-name
或者git switch -c branch-name
(新版本git提供) 可以用来切换分支,操作如下:
$ git checkout dev
Switched to branch 'dev'
$ git branch
* dev
feature
hotfix
master
创建并切换分支
git checkout
命令加上-b
参数表示创建并切换,相当于以下两条命令:
$ git branch dev
$ git checkout dev
Switched to branch 'dev'
使用命令git checkout -b branch-name
或者 git switch -c branch-name
(新版本的git提供)
查看提交历史
1)git log
---- 按时间顺序列出所有的提交
2) git log -p
或者 git log --patch
:会显示每次提交所引入的差异,也可以限制显示的日志条目数量,使用 -2选项来只显示最近的两次提交
3) git log --stat
:在每次提交的下面列出所有被修改过的文件、有多少文件被修改以及被修改过的文件哪些行被添加或是移除
4) git log --graph --pretty=oneline --abbrev-commit
--graph
:在日志旁以 ASCII 图形显示分支合并图。
bug分支
git stash
:将当前工作现场“储藏”起来,等bug修复之后恢复现场继续工作(在git stash之前一定要用git status确认没有Untracked files(未被追踪的文件(没有git add过)
)
1)例如:你正在dev分支上开发,发现之前完成某部分的项目存在bug,这时候你dev分支上还没有完成的代码还没有办法提交,这时候你可以使用git stash
先将当前dev上开发的代码先隐藏起来,去修改bug
$ git stash
Saved working directory and index state WIP on dev: e843901 graph
现在使用git status
查看工作区,就是干净的
2)这时候你需要的bug已经修改完成,已经提交完成了,这时候你需要找到你刚才‘隐藏’的代码继续开发,这时候你怎么找到刚才git stash
隐藏的代码呢?,不要着急,Git提供了git stash list
命令,可以解决你的疑惑,咱们接着往下看:
$ git stash list
stash@{0}: WIP on dev: e843901 graph
3)恢复工作现场
一是用git stash apply
恢复,但是恢复后,stash内容并不删除,你需要用git stash drop
来删除
另一种方式是用git stash pop
,恢复的同时把stash内容也删了(看不见stash@{0}: WIP on dev: e843901 graph
)
可以多次stash,恢复的时候,先用git stash list
查看,然后恢复指定的stash,使用命令
$ git stash apply stash@{0} (使用git stash drop stash@{0}删除stash内容)
或者
$ git stash pop stash@{0}
将指定的提交应用到其他分支
git cherry-pick <分支名>
:将该分支的最近一次提交应用到当前分支
查看工作区的状态
使用git status
命令可以查看工作区的状态,如果git status
告诉你有文件修改过,可以使用git diff
查看修改内容
3、版本回退
在Git中,HEAD
表示当前版本,也就是最新提交的,上一个版本是HEAD^
,上上个版本是HEAD^^
,往上100个版本可以写成HEAD~100
现在,我们要把当前版本回退到上一个版本,可以使用命令:git reset --hard HEAD^
如果想要回到未来的某个版本,怎么办?
如果命令窗口没有被关闭,就可以往上找,找到你想要回到的版本的commit_id,然后就可以使用命令:
git reset --hard <commit_id>
(版本号没必要写全,前几位就可以了)
现在如果你版本回退到了某个版本,关闭了电脑下班回家,第二天早上你后悔了,命令窗口已经关闭,你找不到commit_id了怎么办?
这时候需要冷静,不要慌,吃口(后悔)药,Git提供了git reflog
用来记录你的每一次命令
4、撤销修改
git checkout -- <filename>
可以丢弃工作区的修改
命令git checkout -- readme.txt
意思就是,把readme.txt文件在工作区
的修改全部撤销,这里有两种情况:
1)readme.txt文件自修改后没有放到暂存区(也就是还没有git add
过),现在,撤销修改就回到了和版本库一摸一样状态;
2)readme.txt已经添加到暂存区了,这时又作了修改,现在,撤销修改就回到了添加到暂存区的状态
总之,就是让readme.txt文件回到最近一次git commit或git add时的状态
如果该文件已经git add
暂存区了,但是并没有git commit
提交:
Git提供了命令:git reset HEAD <filename>
可以把暂存区的修改撤销掉,重新放回到工作区
5、删除文件
1)如果确实需要从版本库中删除文件,可以使用命令git rm <filename>
,然后git commit
2)如果删错了文件,手动不小心删除了某些文件,这时候版本库中还存在这些文件,可以使用命令git checkout -- <filename>
还原
注意⚠️:命令git rm
用于删除一个文件。如果一个文件已经被提交到版本库,那么你永远不用担心误删,但是需要小心,你只能恢复文件到最新版本,你会丢失最后一次提交后你修改的内容
。
6、多人协作的工作模式
1)首先,可以试图用git push origin <branch-name>
推送自己的修改
2)如果推送失败,则因为远程分支比你本地的分支更新
,需要先使用git pull
命令试图合并
3)如果合并有冲突,则解决冲突后在本地提交
4)如何没有冲突或者解决冲突后,再用git push origin <branch-name>
推送就能成功
注:如果git pull
提示no tracking information
,则说明本地分支和远程分支的链接关系没有创建
,用命令
git branch --set-upstream-to <branch-name> origin/<branch-name>
小结:在本地创建与远程分支对应的分支,使用命令:git checkout -b branch-name origin/branch-name
7、区别理解
git merge origin master
:将origin merge 到master上
git merge origin/master
:将origin上的 master分支 merge到当前分支
git push origin dev:master
:将local repository(本地仓库)
中名字为dev的分支的内容推送到romote repository(远程存储库)
中名称为master的分支