git 的使用——相关命令
说明:
workspace:工作区
staging area:暂存区/缓存区
local repository:版本库或本地仓库
remote repository:远程仓库
git init - 初始化仓库。
git add . - 添加文件到暂存区。
git commit - 将暂存区内容添加到仓库中
1、git 查看用户名
git config user.name
git config user.mail
2、git 修改用户名
git config --global user.name “xxxx”
git config --global user.mail “xxxx”
3、git 查看当前本地分支
git branch
4、git查看远程分支
git branch -a
5、添加新分支
git checkout -b 新分支名
6、切换当前本地分支
git checkout 分支名
7、查看本地仓库当前的状态(当前分支,本地代码是否提交)
git status
8、查看提交日志
git log
9、远程代码clone到本地
git clone + 远程代码地址
10、拉取远程代码
git pull
11、将状态改变的代码提交至缓存
1.提交所有变化:git add -A
2.提交被修改和被删除文件,不包括新文件:git add -u
3.提交新文件和被修改文件,不包括被删除文件:git add .
12、将保存的代码提交到本地
git commit -m + ‘提交说明’
13、删除本地提交
git reset --hard
14、将代码推送到服务器
git push origin + 分支名称(不加默认master)
15、使用merge合并开发分支
git merge 分支名
提交代码步骤:
git branch
git add .
git commit -nm “***”
git status
git push
将当前分支修改的代码切换保存到别的分支:
1、修改尚未commit
把branch A上修改的代码转移到branch B下,即可
# A分支下操作
$ git stash
# B分支下操作
$ git stash pop
# 查看修改显示:对应的修改合入B分支了
$ git status -sb
2、修改已经commit
右击已经commit的文件 ,选择“遴选(cherry-pick)”,遴选可以让你选择一次提交,将你提交所做的更该应用到你的当前分支
用法:举例来说,代码仓库有master和feature两个分支。
a - b - c - d Master
\
e - f - g Feature
现在将提交f应用到master分支:
# 切换到 master 分支
$ git checkout master
# Cherry pick 操作
$ git cherry-pick f
上面的操作完成以后,代码库就变成了下面的样子:
a - b - c - d - f Master
\
e - f - g Feature
从上面可以看到,master分支的末尾增加了一个提交f
只提交本地的修改的部分文件:
git checkout dev1 (切换到开发分支dev1)
$ git status -s (查看仓库状态,发现修改了五个文件)
$ git add com/aaa/ccc/aaa.txt (增加其中的一个文件)
$ git stash -u -k (重要:忽略其他文件,隐藏其他的修改文件,这样提交的时候就不会提示未被add的文件了)
$ git commit -m “只提交其中的一个文件aaa” (提交aaa.txt文件)
$ git pull origin dev1 (拉取最新的开发分支dev1)
$ git push origin dev1 (把修改的aaa.txt文件推送到远端分支dev1)
$ git checkout master (切换到主分支master)
$ git pull origin master (拉取主分支最新代码,因为咋们修改的过程中,可能其他同事也提交了,最好是先拉取一把,再推送)
$ git merge dev1 (把本地开发分支dev1合并到主分支master)
$ git push origin master (提交主分支master到远端master分支)
$ git status -s (再次查看状态,发现没有改动的,连剩余的那四个文件也没有显示修改,因为咋们上面给隐藏了)
$ git stash pop (很重要,很重要:一定要记得回复之前忽略的文件)
$ git status -s (再次查看状态,发现以前修改剩余的四个文件出现了)
git pull 和 git pull -rebase 区别:
使用下面的关系区别这两个操作:
git pull = git fetch + git merge
git pull --rebase = git fetch + git rebase
现在来看看git merge和git rebase的区别。
假设有3次提交A,B,C。
在远程分支origin的基础上创建一个名为"mywork"的分支并提交了,同时有其他人在"origin"上做了一些修改并提交了。
其实这个时候E不应该提交,因为提交后会发生冲突。如何解决这些冲突呢?有以下两种方法:
1、git merge
用git pull命令把"origin"分支上的修改pull下来与本地提交合并(merge)成版本M,但这样会形成图中的菱形,让人很困惑。
2、git rebase
创建一个新的提交R,R的文件内容和上面M的一样,但我们将E提交废除,当它不存在(图中用虚线表示)。由于这种删除,小李不应该push其他的repository.rebase的好处是避免了菱形的产生,保持提交曲线为直线,让大家易于理解。
在rebase的过程中,有时也会有conflict,这时Git会停止rebase并让用户去解决冲突,解决完冲突后,用git add命令去更新这些内容,然后不用执行git-commit,直接执行git rebase --continue,这样git会继续apply余下的补丁。
在任何时候,都可以用git rebase --abort参数来终止rebase的行动,并且mywork分支会回到rebase开始前的状态。