本文只列举了一些基本常用的,欢迎补充和讨论。
从切分支到代码提交,一般会用到以下这些命令 :
1. git fetch
- 指从远程仓库下载最新的代码并更新本地仓库的远程跟踪分支(如origin/master)。它并不会自动合并(merge)本地分支和远程跟踪分支,而是只是把最新的代码拉到本地。
2. git checkout -b feat/xxx origin/master
- git checkout -b feat/xxx 是以你当前所在分支为主,来切出一条新的分支。如果你当前分支是feat/yyy, 就是以feat/yyy 为主,切出一条名叫feat/xxx的分支。
- git checkout -b feat/xxx origin/feat/xxx 是以本地仓库跟踪的远程分支feat/xxx为主,创建分支。
但是创建的新分支并不一定是远程分支的最新提交,需要先使用git fetch命令从远程仓库获取最新的提交。
3. git branch
可以查看本地有哪些分支
git branch -r 查看远程有哪些分支
4. git status
查看当前工作区和暂存区的状态
5. git add . 或者 git add [file]
git add . 是将工作区所有文件添加到暂存区。
git add config/config.ts 是将config/config.ts文件添加到暂存区。
6. git reset config/config.ts
将暂存区的config/config.ts文件修改放回工作区
7. git checkout . 或者 git checkout [file]
git checkout . 丢弃工作区所有的改动
git checkout config/config.ts 丢弃工作区config/config.ts的改动
8. git commit -m "feat: xxxxx"
- 将暂存区的文件提交到本地仓库,并添加提交信息。
- git commit --amend 修改上一次提交信息
9. git push origin HEAD:feat/xxx 与 git push origin HEAD:refs/for/feat/xxx
- git push origin HEAD:feat/xxx 将当前分支的最新提交推送到远程仓库的feat/xxx分支。
- HEAD: 是一个特别的指针,它是一个指向你正在工作的本地分支的指针,可以把它当做本地分支的别名,git这样就可以知道你工作在哪个分支
- refs/for :意义在于我们提交代码到服务器之后是需要经过code review 之后才能进行merge的
10. git pull origin master --no-ff (同步分支用这个)
- 将远程仓库的master分支的最新提交拉取到本地,并进行合并。
- 使用--no-ff选项可以保留合并提交,即创建一个新的合并提交来表示分支的合并历史,而不是简单地移动分支指针。这样可以更清晰地记录分支的合并过程。
- git pull 命令相当于先执行git fetch,然后再执行git merge。
11. git cherry-pick 2ceb59ab7
将指定的提交(commit)应用到当前分支上。例如想要别人分支上的某个commit修改。
12. git revert 2ceb59ab7
撤销commit SHA-1哈希值为2ceb59ab7引入的更改。
13. git stash
现在想要切换分支,但是还不想要进行提交,运行 git stash,将当前的工作进度保存起来,然后在需要的时候再重新应用
$ git stash
可能需要加 -u,来将工作区中未追踪的文件(新文件)一同保存在 stash 中 git stash -u
重新使用刚才暂存的内容,可以使用git stash pop
$ git stash pop
在这时,你能够轻易地切换分支并在其他地方工作;你的修改被存储在栈上。 要查看暂存的东西,可以使用 git stash list:
$ git stash list
stash@{0}: WIP on master: 049d078 added the index file
stash@{1}: WIP on master: c264051 Revert "added file_size"
stash@{2}: WIP on master: 21d80a5 added number to log
在本例中,有两个之前做的暂存,所以你接触到了三个不同的暂存工作。 可以通过原来 stash 命令的帮助提示中的命令将你刚刚暂存的工作重新应用:git stash apply。 如果想要应用其中一个更旧的暂存,可以通过名字指定它,像这样:git stash apply stash@{2}。 如果不指定一个暂存,Git 认为指定的是最近的暂存:
$ git stash apply
# On branch master
# Changed but not updated:
# (use "git add <file>..." to update what will be committed)
#
# modified: index.html
# modified: lib/simplegit.rb #
可以看到 Git 重新修改了当你暂存时撤消的文件。
tips:vscode内置的git 管理工具可以很方便的进行stash操作
其他
1. 关于git pull 和 git push
(pull 和 push如果没有指定远程分支的,会默认走 .git/config里关联的远程分支)
可以通过cat .git/config 看到分支关联的远程分支
第一次推送 git push origin HEAD:feat/817-revert,会创建一个远程分支feat/817-revert
可以通过 git branch --set-upstream-to=origin/feat/817-revert 设置关联的远程分支
后续就可以省略远程分支名字,直接git push
- 推荐 vscode 的 git 插件 Git History、 GitLens
- sourcetree下载链接:Sourcetree | Free Git GUI for Mac and Windows