Git常用命令
-
前阵子在字节跳动广告创意中心实习的时候,发现自己对Git不是很精通。因此写下这篇博客,作为一份备忘录,记录本人经常使用的Git命令操作。
-
git config
- git config --global user.name "xx"
- git config --global user.email "xxx@example.com"
- git config -l 查看配置信息
-
git branch
- git branch 查看所有本地分支
- git branch -r 查看所有远程分支
- git branch -a 查看本地分支+远程分支
- git branch xx 创建新分支
- git branch -d xx 删除分支
- git branch -v 查看各个分支最后一个提交信息
- git branch --track dev origin/dev是创建一个新分支,并关联,若本地已存在,则会报本地分支已存在的错误
- git branch --set-upstream-to=origin/dev dev 如果本地分支已存在,那使用--set-upstream-to来代替
- git branch -u origin/xxx 设置当前分支跟踪远程分支origin/xxx
- git branch -vv 查看本地分支和远程分支的跟踪关系
-
git remote
- git 添加新的远程仓库,删除掉现在的
- git remote -v 列出远程仓库的详细信息
- git remote rm origin 删除远程仓库
- git remote add origin(可修改) git@github.com:xxx/xxx.git 将本地仓库与远程仓库建立连接
- git remote set-head origin branch_name 切换HEAD分支
-
git checkout
- git checkout xx 切换分支
- git checkout -b dev(本地分支名) origin/dev(远程分支名)达到关联效果
- git checkout --
- 放弃工作区修改,从版本库中拉取还原。
-
git push
- git push <远程主机名> <本地分支名> :<远程分支名> 将本地版本库的分支推送到远程服务器上对应的分支
- git push origin master:refs/for/master 将本地的master分支推送到远程主机origin上的对应master分支
- git push origin master 远程分支被省略,则表示将本地分支推送到与之存在追踪关系的远程分支(如果未关联,则是同名分支)
- git push --force origin master 一般使用git push的时候,本地需要先与远端保持一致,使用--force可以强制推送(我一般用于 git commit --amend 之后)
-
git pull
- 尽量用git fetch 和 git merge 代替git pull
- git pull origin master 等价于
- git fetch origin master
- git merge origin/master
-
git fetch
-
相当于远程获取最新版本到本地,不自动merge
-
git fetch origin branch_name
- 该操作不会在本地创建新的branch。设定当前分支的FETCH_HEAD' 为远程服务器的branch_name分支。
-
git fetch origin branch1:branch2
- 使用远程branch1分支在本地创建branch2(但不会切换到该分支),如果本地不存在branch2分支, 则会自动创建一个新的branch2分支,
- 如果本地存在branch2分支, 并且是`fast forward', 则自动合并两个分支
-
利用git fetch拉取远端数据的方法
- 方法一
- git fetch origin master 从远程的origin仓库的master分支下载代码到本地的origin/master
- git merge origin/master 把远程下载下来的代码合并到当前本地仓库
- 方法二
- git fetch origin master:temp 从远程的origin仓库的master分支下载到本地分支temp
- git merge temp 合并temp分支到当前分支 (之后git push)
- 方法一
-
本地代码误删
- git fetch --all && git reset --hard origin/master && git pull
-
-
git stash (把所有未提交的修改(包括暂存的和非暂存的)都保存起来,用于后续恢复当前工作目录。)
- git stash 等价于 git stash save
- git stash save message, message是文字说明
- git stash list,显示保存的工作进度列表,编号越小代表保存进度的时间越近
- git stash pop stash@{num}, 恢复工作进度到工作区
- git stash apply stash@{num}, 恢复工作进度到工作区且该工作进度可重复恢复
- git stash drop stash@{num},删除一条保存的工作进度
- git stash clear, 删除所有保存的工作进度
- 如果想git stash 部分文件:
- git stash -p,交互式命令,决定每个文件的操作方式
- git stash push
or git stash push -m message ,执行该操作前 应该已经add过 - git stash --keep-index -> git reset
-
注意,分支推送顺序的写法是<来源地>:<目的地>,所以git pull是<远程分支>:<本地分支>,而git push是<本地分支>:<远程分支>。如果省略远程分支名,则表示将本地分支推送与之存在”追踪关系”的远程分支(通常两者同名),如果该远程分支不存在,则会被新建。
-
工作时,push的代码不完善需要重新commit,但又不希望产生多次提交,污染日志,采用如下方法:
- git add xx
- git commit --amend --no-edit
- git push --force xxx
-
git log --pretty=oneline 只会显示版本号和提交时的备注信息(或 git log --oneline)
-
git reflog 可以查看所有分支的所有操作记录(包括已经被删除的 commit 记录和 reset 的操作)
- 例如执行 git reset --hard HEAD~1,退回到上一个版本,用git log则是看不出来被删除的commitid,用git reflog则可以看到被删除的commitid,便于恢复到被删除的那个版本。
-
git rm --cached
撤销add操作 -
git reset HEAD . 撤销add操作
-
撤销commit操作:
- git reset --soft HEAD~1
-
当本地代码与远程仓库发生冲突:
- 希望本地代码覆盖远程仓库
- 利用git stash保存本地 -> git pull 覆盖 -> git stash pop 再覆盖
- 或者笨方法,本地重命名保存
- 希望远程仓库覆盖本地代码
- git checkout file,放弃工作区的修改
- 希望本地代码覆盖远程仓库
-
其余常用命令,有时间再总结
- git diff
- git rebase
- git reset 用于回退版本
- git revert 用于“反做”某一版本,以撤销该版本,会生成一个新的版本
- git log