目录
一、ssh连接
二、http连接(两种方式)
1.在 .git/config 文件中添加登录用户名和密码
2.执行命令设置用户和密码
三、设置身份验证
四、本地项目与远程服务器项目之间的交互
1.如果本地没有最新的代码,打算从头开始
2.已经有了新版代码,需要提交到远程服务器
五、常用Git命令
六、版本穿梭
1.版本回退
2.分支管理
创建分支
切换分支
合并分支
删除分支
解决冲突
客户机上产生公钥上传到gitlab的SSH-Keys里, git clone下载和git push.上传都没问题,这种方式比较安全。
这里其实咱们在部署的时候已经用过了(之前的博客:分布式版本控制系统 | Git 部署),比如之前使用的命令:
ssh-keygen
ssh-copy-id [email protected]
在工作目录中操作:
cd .git
cat config
cd到根目录下执行:
git config --global credential.helper store
在执行过后会在 .gitconfig 文件中添加以下内容:
[credential]
helper = store
cd到项目目录,执行 git pull 命令,会提示输入账号密码。输入完这一次后只会将不要再次输入,并会在目录下生成一个 .git-ceadentials 文件
git pull
Username for 'http://192.168.150.50:sauser/ansible.git':
[email protected] Password for
'https://[email protected]@192.168.150.50:sauser/ansible.git':
cat .git-credentails
https://Username:Password@...
之后再 pull / push 代码将不再需要密码
注意:设定本机用户名,绑定邮箱,让远程服务器知道机器的身份
git config --global user.name 'van'
git config --global user.email '[email protected]'
这里是项目的地址(可从项目主从复制),将远程服务器的内容完全复制过来:
git clone [email protected]
clone之后 cd 进入该项目的文件夹,新建一个文件:
touch test1
将新的文件添加到git的暂存区:
git add test1
将暂存区的文件提交到某一个版本保存下来,并加上注释:
git commit -m '这里是注释'
将本地的更改提交到远程服务器:
git push origin master
先cd进代码所在的目录位置,进行初始化:
git bash git init
添加远程项目地址:
git remote add origin [email protected]
将目录中所有文件添加到暂存区,注意点:
git add .
提交所有代码到本机的版本库:
git commit -m '注释'
将本地的更改提交到远程服务器:
git push origin master
- git中clone过来的时候,git 不会对比本地和服务器的文件,也就不会有冲突
- 建议确定完全覆盖本地的时候用clone,不确定会不会有冲突的时候用git pull,将远程服务器的代码download下来
初始化:
git init
将某一个文件添加到暂存区:
git add test1
将目录下所有文件添加到暂存区:
git add .
将暂存区中的文件保存成某一个版本:
git commit -m '注释'
查看所有的版本日志:
git log
查看现在暂存区的状况:
git status
查看现在文件与上一次提交的-commit版本的区别:
git diff
回到上一个版本:
git reset --hard HEAD^
回退到前3次提交之前,以此类推,回退到n次提交之前:
git reset --hard HEAD~3
xxx为版本号,退回到指定版本:
git reset --hard xxx
从主分支pull到本地:
git pull origin master
从本地push到主分支:
git push -u origin master
pull默认主分支:
git pull
push默认主分支:
git push
这里其实上面已经写过了。使用 git log 查看每一个提交所对应的 commit 版本号:
git log
使用 git reset 退回到上一个版本:
git reset --hard HEAD^
回退到前3次提交之前,以此类推,回退到n次提交之前:
git reset --hard HEAD~3
xxx为版本号,退回到指定版本:
git reset --hard xxx
创建dev分支,然后切换过去,(这里的 -b 表示创建并切换):
git checkout -b dev
列出所有分支,当前分支前会添加一个 * :
git branch
在dev分支上正常提交:
git add test1
git commit -m '注释'
切换到master分支
git checkout master
把dev分支的工作成果合并到master分支上:
git merge dev
将指定的分支与当前分支合并:
git merge
注意到上面的Fast-forward信息,Git告诉我们,这次合并是"快进模式”,也就是直接把master指向dev的当前提交,所以合并速度非常快。当然,也不是每次合并都能Fast- forward,我们后面会讲其他方式的合并。
删除dev分支:
git branch -d dev
创建新的feature1分支:
git checkout -b feature1
修改readme.txt最后一行,改为:
Creating a new branch is quick AND simple.
在feature1分支上提交:
git add readme.txt
git commit -m "AND simple"
切换到master分支:
git checkout master
Switched to branch 'master' Your branch is ahead of 'origin/master' by 1 commit. Git还会自动提示我们当前master分支比远程的master分支要超前1个提交。
在master分支上把readme.txt文件的最后一行改为:
Creating a new branch is quick & simple.
提交:
git add readme.txt
git commit -m "& simple"
现在,master分支和feature1分支各自都分别有新的提交 这种情况下,Git无法执行“快速合并”,只能试图把各自的修改合并起来,但这种合并就可能会有冲突,我们试试看: git merge feature1 Auto-merging readme.txt CONFLICT (content): Merge conflict in readme.txt Automatic merge failed; fix conflicts and then commit the result. ``` ```shell readme.txt文件存在冲突,必须手动解决冲突后再提交。
git status 冲突的文件;
直接查看readme.txt的内容: Git is a distributed version control system. Git is free software distributed under the GPL. Git has a mutable index called stage. Git tracks changes of files. <<<<<<< HEAD Creating a new branch is quick & simple. ======= Creating a new branch is quick AND simple. >>>>>>> feature1 Git用<<<<<<<,=======,>>>>>>>标记出不同分支的内容,我们修改后保存再提交:
git add readme.txt
git commit -m "conflict fixed"
[master 59bc1cb] conflict fixed
最后,删除feature1分支:
git branch -D feature1
Deleted branch feature1 (was 75a857c). ```