一:GIT命令实战(码云)
https://oschina.gitee.io/learn-git-branching/
提交
git commit
创建分支
git branch <name>
切换分支
git checkout <name>
合并分支
git merge <name>
git rebase <name>
分离HEAD
git checkout <某个具体的提交记录>
相对引用(^)
git checkout HEAD^
git checkout HEAD~<num>
强制修改分支位置
git branch -f <name>(eg:master) HEAD...(当前位置的父级个数)
撤销变更
(local)
git reset HEAD^
(push)
git revert HEAD
整理提交记录
git cherry-pick ~ ~(某个提交记录,可单个可范围)
git rebase -i HEAD~..(开始处理位置)
提交一个记录的方法:移动到上一个记录,使用上述代码提交单个记录
下载仓库
git clone
o(orign)/master
git checkout o/master
更新下载(单纯下载,不更新本地仓库)
git fetch
正常更新
git pull /= git fetch + git merge
二:GIT基础(廖雪峰网站)
https://www.liaoxuefeng.com/wiki/896043488029600
- 在Linux上安装Git
$ git The program 'git' is currently not installed. You can install it by typing: sudo apt-get install git
- 设置用户名和邮箱
$ git config --global user.name "Your Name" $ git config --global user.email "email@example.com"
- 创建版本库
$ mkdir learngit $ cd learngit $ pwd #显示当前目录 /Users/michael/learngit
- 初始化仓库
$ git init Initialized empty Git repository in /Users/michael/learngit/.git/
- 把文件添加到仓库
$ git add readme.txt
- 把文件提交到仓库
$ git commit -m "wrote a readme file" #-m后面输入的是本次提交的说明 [master (root-commit) eaadf4e] wrote a readme file 1 file changed, 2 insertions(+) create mode 100644 readme.txt
- 命令git结果
$ git status On branch master Changes not staged for commit: (use "git add <file>..." to update what will be committed) (use "git checkout -- <file>..." to discard changes in working directory) modified: readme.txt no changes added to commit (use "git add" and/or "git commit -a")
- 查看修改内容
$ git diff readme.txt diff --git a/readme.txt b/readme.txt index 46d49bf..9247db6 100644 --- a/readme.txt +++ b/readme.txt @@ -1,2 +1,2 @@ -Git is a version control system. +Git is a distributed version control system. Git is free software.
- 历史记录
$ git log --pretty=oneline 1094adb7b9b3807259d8cb349e7df1d4d6477073 (HEAD -> master) append GPL e475afc93c209a690c39c13a46716e8fa000c366 add distributed eaadf4e385e865d25c48e7ca9c8395c3f7dfaef0 wrote a readme file
- 版本回退
$ git reset --hard HEAD^ HEAD is now at e475afc add distributed
- 回到未来
$ git reset --hard 1094a #git reset --hard commit_id HEAD is now at 83b0afe append GPL
- 查询每一次命令,寻找哈斯值
$ git reflog e475afc HEAD@{1}: reset: moving to HEAD^ 1094adb (HEAD -> master) HEAD@{2}: commit: append GPL e475afc HEAD@{3}: commit: add distributed eaadf4e HEAD@{4}: commit (initial): wrote a readme file
修改过程
第一次修改 -> git add -> 第二次修改 -> git add -> git commit
- 丢弃工作区的修改(1)/删错了
$ git checkout -- readme.txt #git checkout -- file
16.丢弃工作区的修改(2)
$ git reset HEAD readme.txt #git reset HEAD <file> Unstaged changes after reset: M readme.
- 从版本库中删除该文件
# 命令git rm删掉,并且git commit $ git rm test.txt rm 'test.txt' $ git commit -m "remove test.txt" [master d46f35e] remove test.txt 1 file changed, 1 deletion(-) delete mode 100644 test.txt
- 添加远程库
$ git remote add origin $ git@server-name:path/repo-name.git
git remote add origin git@server-name:path/repo-name.git
- 内容推送
$ git push -u origin master #第一次 $ git push origin master
- 命令克隆库
git clone #Git支持多种协议,包括https,但通过ssh支持的原生git协议速度最快
- 分支
# 查看分支: $ git branch # 创建分支: $ git branch <name> # 切换分支: $ git checkout <name> $ git switch <name> # 创建+切换分支: $ git checkout -b <name> $ git switch -c <name> # 合并某分支到当前分支:git merge <name> # 删除分支: $ git branch -d <name>
解决冲突
首先解决冲突。解决冲突后,再提交,合并完成。解决冲突就是把Git合并失败的文件手动编辑为我们希望的内容,再提交.
git log --graph #图形化
- 分支管理策略
$ git merge --no-ff -m "merge with no-ff" dev #--no-ff参数,表示禁用Fast forward Merge made by the 'recursive' strategy. readme.txt | 1 + 1 file changed, 1 insertion(+)
- “储藏”功能
$ git stash $ git stash pop #回到工作现场
- 在master分支上修复的bug,想要合并到当前分支
$ git cherry-pick <commit>
- 强行删除分支
git branch -D <name>
- 查看远程库的信息
$ git remote # -v显示更详细的信息
- 从本地推送分支
$ git push origin branch-name # 推送失败,先用git pull抓取远程的新提交
- 在本地创建和远程分支对应的分支
$ git checkout -b branch-name origin/branch-name # 本地和远程分支的名称最好一致
- 建立本地分支和远程分支的关联
$ git branch --set-upstream branch-name origin/branch-name
- 从远程抓取分支
$ git pull
- rebase操作
$ git rebase # -i 图形操作 # 把本地未push的分叉提交历史整理成直线
- 创建标签
$ git tag <tagname> # 用于新建一个标签,默认为HEAD,也可以指定一个commit id; $ git tag -a <tagname> -m "blablabla..." # 可以指定标签信息; $ git tag # 查看所有标签
- 操作标签
$ git push origin <tagname> #推送一个本地标签; $ git push origin --tags #推送全部未推送过的本地标签; $ git tag -d <tagname> #删除一个本地标签; $ git push origin :refs/tags/<tagname> #删除一个远程标签
常用命令行(push码云)
第一步:建立并初始化本地的仓库
git init
第二步:添加所有文件到仓库中
git add
或者可以使用git add
你想要添加的文件
第三步:将添加的文件提交到仓库中
git commit -m '备注'
第四步:上传之前要进行pull,将码云上的文件拉下来
git pull origin master
第五步:上传代码到码云仓库
git push -u origin master