1.Git 初始化
- Create a new repository
git clone git@*******/test.git
cd test
touch README.md
git add README.md
git commit -m "add README"
git push -u origin master
- Existing folder or Git repository
cd existing_folder
git init
git remote add origin git@@*******/test.git
git add .
git commit
2.Git Config
- config 配置文件位置
All User : /etc/gitconfig
Current User : ~/.gitconfig
- config 查看
git config --list
- config 设置
git config --global user.name "xxx"
git config --global user.email "xxxx@163.com"
3.Git 基础命令
git status
查看git仓库文件状态, git文件状态如下所示。
unstaged - git仓库中没有此文件的相关记录
modified - git仓库中有这个文件的记录,且此文件当前有改动
staged - 变更的文件被暂存,没有提交到仓库 (git add命令之后)
commited - 文件被提交到本地git仓库 (git commit之后)
git log
查看历史commit记录
git add
git add file/fileDir #modified或unstaged的文件转换为staged状态
git add -A/--all #modified或unstaged的所有文件转换为staged状态
- git rm
git rm test.java #从git仓库删除test.java文件,同时删除本地文件
git rm --cache test.java #从git仓库删除test.java文件,不删除本地文件
- git commit
git commit -m "xxx comment" #staged状态转换为commited状态
- git diff
git diff file-path #查看自己本次要提交的文件有哪些改动
- git pull
git pull [remote-name branch-name] #获取远程服务器数据,并同时与本地数据合并(可能会出现冲突)
- git fetch
git fetch [remote-name] #(获取仓库的所有更新,但是不自动合并当前分支)
git fetch -p #(获取仓库的所有更新,且自动删除不需要的分支,更新最新的分支下来)
- git push
git push [remote-name branch-name] #上传数据到远程分支,若出现冲突,则上传失败。
git push --force [remote-name branch-name] #强制上传数据到远程分支**,(覆盖远程数据,慎用)**
git stash
可用来暂存当前正在进行的工作,比commit简单,而且可以跨分支合并
git stash #暂存更改的内容
git stash save "comment" #暂存更改的内容,带注释
git stash list #显示所有暂存的内容
git show stash@{0} #显示指定stash的更改内容,类似于git diff
git stash apply stash@{1} #应用指定编号的stash, 但不从stash-list中清除
git stash pop #应用栈顶的stash,并从stash-list清除该记录
git stash clear #清除stash-list
git stash --help #获取更多的信息
3.Git 分支
- git branch
git branch #查看本地分支列表
git branch -r #查看远程分支列表
git branch -a #查看所有分支
git branch -d branch-name #删除指定分支
git branch -D branch-name #强制删除指定分支
- git checkout
git checkout branch-name #切换到指定分支 (切换前记得先commit或者stash)
git checkout -b new-branch-name #基于当前分支创建一个新分支
git checkout -b branch-name origin/branch-name #获取远程分支到本地
git checkout file-name #获取远程最新文件
git checkout -- . #放弃本地所有的modify文件改动
- add remote branch
1.git checkout branch-name #切换到要上传的分支
2.git remote add origin branch-name #添加远程分支
3.git push origin branch-name #推送数据到远程分支 (自动创建分支,step2可省去)
- delete remote branch
git push origin :remote-branch #删除指定远程分支
4.Git 分支合并
- git merge
1. git merge branch-name #合并指定分支内容到当前分支
2. git add -A #手动解决冲突后,重新暂存
2. git commit -m "xxx 解决冲突" #再次提交
- git cherry-pick
1. git cherry-pick commit-id #合并指定commit到当前分支
2. git add -A #手动解决冲突后, 重新暂存
3. git cherry-pick -- continue #继续刚才的pick操作,这一步容易忘记
4. git cherry-pick -- abort #放弃cherry-pick操作
5.Git 修改与撤销
- git reset
git reset HEAD file #将文件从staged转换为unstaged
git reset HEAD . #将所有文件从staged转换为unstaged
git reset --mixed commit-id #默认方式,回退到指定个版本,只保留源码,回退commit和index信息
git reset --soft commit-id #回退到某个版本,只回退了commit的信息,
#不会恢复到index file级。如果还要提交,直接commit即可
git reset --hard commit-id #彻底回退到某个版本,本地的源码也会变为上一个版本的内容
git reflog
显示所有过去commit历史,可用来挽救–hard的误操作
- git rebase
(1) git rebase -i commit-id #在vi编辑器中,显示commit-id到最新的所有commit记录
(2) git rebase -i HEAD~10 #在vi编辑器中,显示最新10条commit记录
(3) 在vi编辑器中, 修改commit内容, wq保存
(4) git add -A #解决冲突后,暂存文件
(5) git rebase --continue #完成未完成rebase操作
(6) git rebase --abort #完成未完成rebase操作
在vim编辑器中,常见几种操作方式,显示如下,
# 修改前
pick 8e5da5f test-comment-1
pick 627a433 test-comment-2
pick 627a433 test-comment-3
pick dcc8310 test-comment-4
# commit-id更改
pick 8e5da5f test-comment-1
pick 627a433 test-comment-2
r 627a433 修改后的内容
pick dcc8310 test-comment-4
# commit-id换序
pick 8e5da5f test-comment-1
pick 627a433 test-comment-3
pick 627a433 test-comment-2
pick dcc8310 test-comment-4
# commit-id删除
pick 8e5da5f test-comment-1
pick 627a433 test-comment-2
pick dcc8310 test-comment-4
# commit-id 3 与 4合并
pick 8e5da5f test-comment-1
pick 627a433 test-comment-2
pick 627a433 test-comment-3
s dcc8310 test-comment-4